{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "GitHub Stars Archive",
  "home_page_url": "https://go.waylonwalker.com/stars/",
  "feed_url": "https://go.waylonwalker.com/stars/archive/feed.json",
  "description": "GitHub stars posts",
  "authors": [
    {
      "name": "Waylon Walker"
    }
  ],
  "items": [
    {
      "id": "https://go.waylonwalker.com/stow-local-ignore/",
      "url": "https://go.waylonwalker.com/stow-local-ignore/",
      "title": "stow local ignore",
      "content_html": "\u003cp\u003eStow comes with a local and global ignore list that you can use to ignore\ncertain files or directories.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf you put Perl regular expressions, one per line, in a .stow-local-ignore\nfile within any top level package directory, in which case any file or\ndirectory within that package matching any of these regular expressions will\nbe ignored. In the absence of this package-specific ignore list, Stow will\ninstead use the contents of ~/.stow-global-ignore, if it exists. If neither\nthe package-local or global ignore list exist, Stow will use its own built-in\ndefault ignore list, which serves as a useful example of the format of these\nignore list files:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eExample given from the docs\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRCS\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.+,v\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCVS\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.\\#.+       # CVS conflict files / emacs lock files\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.cvsignore\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.svn\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_darcs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.hg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.gitignore\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\.gitmodules\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.+~          # emacs backup files\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\\#.*\\#       # emacs autosave files\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e^/README.*\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e^/LICENSE.*\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e^/COPYING\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"reference\"\u003eReference \u003ca href=\"#reference\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://www.gnu.org/software/stow/manual/html_node/Types-And-Syntax-Of-Ignore-Lists.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.gnu.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.gnu.org.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://www.gnu.org/software/stow/manual/html_node/Types-And-Syntax-Of-Ignore-Lists.html\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nStow comes with a local and global ignore list that you can use to ignore\ncertain files or directories.\n\n\n\u003e If you put Perl regular expressions, one per line, in a .stow-local-ignore\n\u003e file within any top level package directory, in which case any file or\n\u003e directory within that package matching any of these regular expressions will\n\u003e be ignored. In the absence of this package-specific ignore list, Stow will\n\u003e instead use the contents of ~/.stow-global-ignore, if it exists. If neither\n\u003e the package-local or global ignore list exist, Stow will use its own built-in\n\u003e default ignore list, which serves as a useful example of the format of these\n\u003e ignore list files:\n\nExample given from the docs\n\n``` text\nRCS\n.+,v\n\nCVS\n\\.\\#.+       # CVS conflict files / emacs lock files\n\\.cvsignore\n\n\\.svn\n_darcs\n\\.hg\n\n\\.git\n\\.gitignore\n\\.gitmodules\n\n.+~          # emacs backup files\n\\#.*\\#       # emacs autosave files\n\n^/README.*\n^/LICENSE.*\n^/COPYING\n```\n\n\n## Reference\n\nhttps://www.gnu.org/software/stow/manual/html_node/Types-And-Syntax-Of-Ignore-Lists.html\n",
      "summary": "Stow comes with a local and global ignore list that you can use to ignore certain files or directories.",
      "date_published": "2026-04-18T10:36:00Z",
      "date_modified": "2026-04-18T10:36:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-980/",
      "url": "https://go.waylonwalker.com/thought-980/",
      "title": "💭 \"Am I Crazy?\" [Wading Through AI - Episode 3]",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Sp1EmFRDquA\" title=\"\u0026#34;Am I Crazy?\u0026#34; [Wading Through AI - Episode 3]\" playlabel=\"Play: \u0026#34;Am I Crazy?\u0026#34; [Wading Through AI - Episode 3]\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eCasey had an interesting point here.  I think demitri came back with some sense of sanity that its just not how corporations look at employee cost, but I still thought it was a head scratcher.\u003c/p\u003e\n\u003cp\u003eRoughly translated not quoted\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf the sellers of ai are telling you that your developers are going to be 10x productive, why are they only spending half their salary in tokens?  Why not 9x?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Sp1EmFRDquA\" title=\"\u0026#34;Am I Crazy?\u0026#34; [Wading Through AI - Episode 3]\" playlabel=\"Play: \u0026#34;Am I Crazy?\u0026#34; [Wading Through AI - Episode 3]\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nCasey had an interesting point here.  I think demitri came back with some sense of sanity that its just not how corporations look at employee cost, but I still thought it was a head scratcher.  \n\nRoughly translated not quoted\n\n\u003e If the sellers of ai are telling you that your developers are going to be 10x productive, why are they only spending half their salary in tokens?  Why not 9x?\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=Sp1EmFRDquA",
      "date_published": "2026-04-16T21:10:02Z",
      "date_modified": "2026-04-16T21:10:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-979/",
      "url": "https://go.waylonwalker.com/thought-979/",
      "title": "💭 A love letter to Pi | Lucas Meijer",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"fdbXNWkpPMY\" title=\"A love letter to Pi | Lucas Meijer\" playlabel=\"Play: A love letter to Pi | Lucas Meijer\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI hate how he called out terminal user interfaces as shit… then proved web interfaces to be superior.  Damn him.  I love working from my terminal, but having ai prove itself through \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 reports including video, image, metrics, charts, and text is goated.  Rethinking yourself has the bottleneck not the orchestrator feels real.  Validating the work is hard, theres a shift right now and everyone is trying to figure it out.  Lucas’s technique is a little bit of be lazy and tell it to prove itself to you, so as you juggle your 15 agents you have a nice report to read.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"fdbXNWkpPMY\" title=\"A love letter to Pi | Lucas Meijer\" playlabel=\"Play: A love letter to Pi | Lucas Meijer\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI hate how he called out terminal user interfaces as shit... then proved web interfaces to be superior.  Damn him.  I love working from my terminal, but having ai prove itself through html reports including video, image, metrics, charts, and text is goated.  Rethinking yourself has the bottleneck not the orchestrator feels real.  Validating the work is hard, theres a shift right now and everyone is trying to figure it out.  Lucas's technique is a little bit of be lazy and tell it to prove itself to you, so as you juggle your 15 agents you have a nice report to read.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=fdbXNWkpPMY",
      "date_published": "2026-04-15T16:12:33Z",
      "date_modified": "2026-04-15T16:12:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "agents",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-978/",
      "url": "https://go.waylonwalker.com/thought-978/",
      "title": "💭 How Claude Code’s Creator Starts EVERY Project - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"KWrsLqnB6vA\" title=\"How Claude Code’s Creator Starts EVERY Project\" playlabel=\"Play: How Claude Code’s Creator Starts EVERY Project\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a really good guide, with quite a few good nuggets.  I need to try deleting my AGENTS.md and rebuilding it from scratch more often.  I liked how he talked about having agents prove their work and tell them up front how they will be judged. What I didn’t care for so much was the feeling that a lot of the rules go in markdown, thats not a rule, thats a suggestion.  Rules should be deterministic.  They should be tests and linters that ensure they are followed.  Suggestions are good, but dont trust the agents to always follow them.  And don’t trust that they wont change your rules, keep them honest.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"KWrsLqnB6vA\" title=\"How Claude Code’s Creator Starts EVERY Project\" playlabel=\"Play: How Claude Code’s Creator Starts EVERY Project\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a really good guide, with quite a few good nuggets.  I need to try deleting my AGENTS.md and rebuilding it from scratch more often.  I liked how he talked about having agents prove their work and tell them up front how they will be judged. What I didn't care for so much was the feeling that a lot of the rules go in markdown, thats not a rule, thats a suggestion.  Rules should be deterministic.  They should be tests and linters that ensure they are followed.  Suggestions are good, but dont trust the agents to always follow them.  And don't trust that they wont change your rules, keep them honest.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=KWrsLqnB6vA",
      "date_published": "2026-04-15T16:07:26Z",
      "date_modified": "2026-04-15T16:07:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "agents",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-977/",
      "url": "https://go.waylonwalker.com/thought-977/",
      "title": "💭 POV: Growing up as a Millennial be like 🤣 AC:@mikemancusi #mil...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qH3KH-q_tGE\" title=\"POV: Growing up as a Millennial be like 🤣 AC:@mikemancusi #millennials #existential #geny #usafyp\" playlabel=\"Play: POV: Growing up as a Millennial be like 🤣 AC:@mikemancusi #millennials #existential #geny #usafyp\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eFeeling this today, feels like everything continues to get worse.  Trying to be more positive, and its hard.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qH3KH-q_tGE\" title=\"POV: Growing up as a Millennial be like 🤣 AC:@mikemancusi #millennials #existential #geny #usafyp\" playlabel=\"Play: POV: Growing up as a Millennial be like 🤣 AC:@mikemancusi #millennials #existential #geny #usafyp\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nFeeling this today, feels like everything continues to get worse.  Trying to be more positive, and its hard.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/qH3KH-q_tGE",
      "date_published": "2026-04-15T16:02:46Z",
      "date_modified": "2026-04-15T16:02:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "random",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-976/",
      "url": "https://go.waylonwalker.com/thought-976/",
      "title": "💭 Write It First, Then Let AI Drive - Kenneth Reitz",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kennethreitz.org/essays/2026-04-12-write_it_first_then_let_ai_drive\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://kennethreitz.org/og-image/essays/2026-04-12-write_it_first_then_let_ai_drive.png\" alt=\"Write It First, Then Let AI Drive — There\u0026#39;s a thing that happens when you start using AI coding tools seriously. You assume the best workflow is obvious: let AI generate the first draft, then...\" loading=\"lazy\"/ data-glightbox=\"description: Write It First, Then Let AI Drive — There\u0026#39;s a thing that happens when you start using AI coding tools seriously. You assume the best workflow is obvious: let AI generate the first draft, then...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWrite It First, Then Let AI Drive\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThere\u0026#39;s a thing that happens when you start using AI coding tools seriously. You assume the best workflow is obvious: let AI generate the first draft, then...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKenneth Reitz · kennethreitz.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting take by Kenneth Reitz.  Not quite sure how I feel about it anymore.  It kinda hurts, but I’m not sure if code aesthetics matter as much as the product anymore.  I cared when I was the one editing, but at this point I’m not doing a lot of edits by hand.  Do these aesthetics affect the final products that users use, Not sure.  AI makes me sad.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kennethreitz.org/essays/2026-04-12-write_it_first_then_let_ai_drive\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://kennethreitz.org/og-image/essays/2026-04-12-write_it_first_then_let_ai_drive.png\" alt=\"Write It First, Then Let AI Drive — There\u0026#39;s a thing that happens when you start using AI coding tools seriously. You assume the best workflow is obvious: let AI generate the first draft, then...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWrite It First, Then Let AI Drive\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThere\u0026#39;s a thing that happens when you start using AI coding tools seriously. You assume the best workflow is obvious: let AI generate the first draft, then...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKenneth Reitz \u0026middot; kennethreitz.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting take by Kenneth Reitz.  Not quite sure how I feel about it anymore.  It kinda hurts, but I'm not sure if code aesthetics matter as much as the product anymore.  I cared when I was the one editing, but at this point I'm not doing a lot of edits by hand.  Do these aesthetics affect the final products that users use, Not sure.  AI makes me sad.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kennethreitz.org/essays/2026-04-12-write_first_let_drive",
      "date_published": "2026-04-14T20:05:11Z",
      "date_modified": "2026-04-14T20:05:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-975/",
      "url": "https://go.waylonwalker.com/thought-975/",
      "title": "💭 I am slowly coming around to AI assisted programming.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ThePrimeagen/status/2043861800819761382\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIf agents make prime a bit faster, what does that mean for the rest of us mortals?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ThePrimeagen/status/2043861800819761382\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIf agents make prime a bit faster, what does that mean for the rest of us mortals?\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/ThePrimeagen/status/2043861800819761382",
      "date_published": "2026-04-14T15:17:09Z",
      "date_modified": "2026-04-14T15:17:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-974/",
      "url": "https://go.waylonwalker.com/thought-974/",
      "title": "💭 AIs aren’t good rule followers",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/unclebobmartin/status/2044065822067282396\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve gotta agree with bob on this one, the first thing I did to my biggest brownfield project I wanted to use agents on BEFORE they did work was a hardened pre-commit.yaml, ci, hardened type checking and linting. SECOND get rid of bad inconsistent patterns, let them replicate consistency, force them to pass checks.  Agents will follow all of your markdown suggestions \u003cem\u003emost\u003c/em\u003e of the time, enough for you to become complacent if you let it.  They are goal seeking, if you put them to a task you thought was possible that is not given your constraints, they will try to find a way given enough tokens.  I dont see this ever changing, its one thing that makes them great, it just needs to be kept in check.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/unclebobmartin/status/2044065822067282396\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've gotta agree with bob on this one, the first thing I did to my biggest brownfield project I wanted to use agents on BEFORE they did work was a hardened pre-commit.yaml, ci, hardened type checking and linting. SECOND get rid of bad inconsistent patterns, let them replicate consistency, force them to pass checks.  Agents will follow all of your markdown suggestions _most_ of the time, enough for you to become complacent if you let it.  They are goal seeking, if you put them to a task you thought was possible that is not given your constraints, they will try to find a way given enough tokens.  I dont see this ever changing, its one thing that makes them great, it just needs to be kept in check.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/unclebobmartin/status/2044065822067282396",
      "date_published": "2026-04-14T15:16:11Z",
      "date_modified": "2026-04-14T15:16:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-973/",
      "url": "https://go.waylonwalker.com/thought-973/",
      "title": "💭 A quote from Steve Yegge",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Apr/13/steve-yegge/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSteve Yegge\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSteve Yegge: I was chatting with my buddy at Google, who\u0026#39;s been a tech director there for about 20 years, about their AI adoption. Craziest convo I\u0026#39;ve had all year. …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ebehind, yet positioned to completely dominate this race by hitting it with some sense.  Making trends in what looks like longevity in the race that is not subsidising to simply get users, but to get by until they figure out how to 100x reduce the cost to a reasonable level.  They feel like the guy sitting in the back with nothing big or flashy to say that is going to drop the hammer on their competition that overstretched itself taking on too much debt because it was necessary to change the game.  There might be something to having a mix of hipsters, boomers, and luddites all trying to balance each other out.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Apr/13/steve-yegge/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSteve Yegge\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSteve Yegge: I was chatting with my buddy at Google, who\u0026#39;s been a tech director there for about 20 years, about their AI adoption. Craziest convo I\u0026#39;ve had all year. …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nbehind, yet positioned to completely dominate this race by hitting it with some sense.  Making trends in what looks like longevity in the race that is not subsidising to simply get users, but to get by until they figure out how to 100x reduce the cost to a reasonable level.  They feel like the guy sitting in the back with nothing big or flashy to say that is going to drop the hammer on their competition that overstretched itself taking on too much debt because it was necessary to change the game.  There might be something to having a mix of hipsters, boomers, and luddites all trying to balance each other out.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2026/Apr/13/steve-yegge/#atom-everything",
      "date_published": "2026-04-13T21:10:23Z",
      "date_modified": "2026-04-13T21:10:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/anthropic-mythos/",
      "url": "https://go.waylonwalker.com/anthropic-mythos/",
      "title": "Anthropic Mythos",
      "content_html": "\u003cp\u003eAn ai model created by Anthropic was announced as a closed preview on April 7,\n2026 for critical security research and evaluation with its close partners with\ncritical software such as operating systems and browsers.  Anthropic claims\nthat mythos is able to reason through so much more context that any model ever\nbefore.  This enables it to find bugs that are 25 years old in the BSD,\nconsidered one of the most secure operating systems we have.  Once it finds\nthese zero day bugs never discovered before its able to use them together in\nmalicious ways never expected.  In ways the world is not ready for.  At the\ntime of writing these are claims without proof.  It remains scary to know the\npotential this has and that there is only a few companies with this potential\nthat will gatekeep who gets access.\u003c/p\u003e\n",
      "content_text": "\nAn ai model created by Anthropic was announced as a closed preview on April 7,\n2026 for critical security research and evaluation with its close partners with\ncritical software such as operating systems and browsers.  Anthropic claims\nthat mythos is able to reason through so much more context that any model ever\nbefore.  This enables it to find bugs that are 25 years old in the BSD,\nconsidered one of the most secure operating systems we have.  Once it finds\nthese zero day bugs never discovered before its able to use them together in\nmalicious ways never expected.  In ways the world is not ready for.  At the\ntime of writing these are claims without proof.  It remains scary to know the\npotential this has and that there is only a few companies with this potential\nthat will gatekeep who gets access.\n",
      "summary": "An ai model created by Anthropic was announced as a closed preview on April 7, 2026 for critical security research and evaluation with its close partners...",
      "date_published": "2026-04-13T16:18:15Z",
      "date_modified": "2026-04-13T16:18:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "model"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-972/",
      "url": "https://go.waylonwalker.com/thought-972/",
      "title": "💭 How does Claude Code *actually* work? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"I82j7AzMU80\" title=\"How does Claude Code *actually* work?\" playlabel=\"Play: How does Claude Code *actually* work?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e5 star video, if you are going to watch one video to understand how harnesses and agents work, this is it.  This really had my gears spinning on what tools do for agents and how big of a difference they make in their ability to manage context efficiently and accurately create changes.  It’s crazy how good bash works, and that gives the agents the ability to do just about everything, but it could be better.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"I82j7AzMU80\" title=\"How does Claude Code *actually* work?\" playlabel=\"Play: How does Claude Code *actually* work?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n5 star video, if you are going to watch one video to understand how harnesses and agents work, this is it.  This really had my gears spinning on what tools do for agents and how big of a difference they make in their ability to manage context efficiently and accurately create changes.  It's crazy how good bash works, and that gives the agents the ability to do just about everything, but it could be better.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=I82j7AzMU80",
      "date_published": "2026-04-13T10:15:26Z",
      "date_modified": "2026-04-13T10:15:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-971/",
      "url": "https://go.waylonwalker.com/thought-971/",
      "title": "💭 Artemis II Lunar Flyby",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.nasa.gov/gallery/lunar-flyby/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://images-assets.nasa.gov/image/art002e015231/art002e015231~large.jpg\" alt=\"Artemis II Lunar Flyby - NASA — The first flyby images of the Moon captured by NASA’s Artemis II astronauts during their historic test flight reveal regions of the Moon\u0026#39;s far side, as well as an in-space solar eclipse. Released April 7, 2026, NASA astronauts Reid Wiseman, Victor Glover, and Christina Koch and CSA (Canadian Space Agency) astronaut Jeremy Hansen captured the images during the mission’s seven-hour flyby on April 6, 2026, showing humanity’s return to the Moon’s vicinity.\" loading=\"lazy\"/ data-glightbox=\"description: Artemis II Lunar Flyby - NASA — The first flyby images of the Moon captured by NASA’s Artemis II astronauts during their historic test flight reveal regions of the Moon\u0026#39;s far side, as well as an in-space solar eclipse. Released April 7, 2026, NASA astronauts Reid Wiseman, Victor Glover, and Christina Koch and CSA (Canadian Space Agency) astronaut Jeremy Hansen captured the images during the mission’s seven-hour flyby on April 6, 2026, showing humanity’s return to the Moon’s vicinity.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eArtemis II Lunar Flyby - NASA\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe first flyby images of the Moon captured by NASA’s Artemis II astronauts during their historic test flight reveal regions of the Moon\u0026#39;s far side, as well as an in-space solar eclipse. Released...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNASA · nasa.gov\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOne of the biggest scientific achievement of our lifetime happened this week.  I will forever remember sitting in a Culvers in between theater builds looking through these photos as they came live, looking at them in awe.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/9987010a-a448-472d-9c60-2831b61a1d3a.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/9987010a-a448-472d-9c60-2831b61a1d3a.webp\" alt=\"9987010a-a448-472d-9c60-2831b61a1d3a.webp\"/ data-glightbox=\"description: 9987010a-a448-472d-9c60-2831b61a1d3a.webp\"\u003e\u003c/a\u003e\n\u003cfigcaption\u003e\u003cp\u003eOne of the most famous images from the shoot “Setting Earth”\u003c/p\u003e\u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.nasa.gov/gallery/lunar-flyby/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://images-assets.nasa.gov/image/art002e015231/art002e015231~large.jpg\" alt=\"Artemis II Lunar Flyby - NASA — The first flyby images of the Moon captured by NASA’s Artemis II astronauts during their historic test flight reveal regions of the Moon\u0026#39;s far side, as well as an in-space solar eclipse. Released April 7, 2026, NASA astronauts Reid Wiseman, Victor Glover, and Christina Koch and CSA (Canadian Space Agency) astronaut Jeremy Hansen captured the images during the mission’s seven-hour flyby on April 6, 2026, showing humanity’s return to the Moon’s vicinity.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eArtemis II Lunar Flyby - NASA\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe first flyby images of the Moon captured by NASA’s Artemis II astronauts during their historic test flight reveal regions of the Moon\u0026#39;s far side, as well as an in-space solar eclipse. Released...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNASA \u0026middot; nasa.gov\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOne of the biggest scientific achievement of our lifetime happened this week.  I will forever remember sitting in a Culvers in between theater builds looking through these photos as they came live, looking at them in awe.\n\n![9987010a-a448-472d-9c60-2831b61a1d3a.webp](http://dropper.wayl.one/file/9987010a-a448-472d-9c60-2831b61a1d3a.webp)\nOne of the most famous images from the shoot \"Setting Earth\"\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.nasa.gov/gallery/lunar-flyby/",
      "date_published": "2026-04-09T21:53:49Z",
      "date_modified": "2026-04-09T21:53:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "science",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-970/",
      "url": "https://go.waylonwalker.com/thought-970/",
      "title": "💭 Explaining the Most Important Artemis II Photos - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"oaXRREHVkHo\" title=\"Explaining the Most Important Artemis II Photos\" playlabel=\"Play: Explaining the Most Important Artemis II Photos\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat an amazing set of photos created by the Artemis II crew accompanying a fantastic breakdown by Hank Green.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/0b53a4ed-924e-42b5-84f4-51c189f60801.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/0b53a4ed-924e-42b5-84f4-51c189f60801.webp\" alt=\"0b53a4ed-924e-42b5-84f4-51c189f60801.webp\"/ data-glightbox=\"description: 0b53a4ed-924e-42b5-84f4-51c189f60801.webp\"\u003e\u003c/a\u003e\n\u003cfigcaption\u003e\u003cp\u003eI like this one, as its probably one of the ones not shred a ton\u003c/p\u003e\u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003cp\u003eWhole gallery is worth looking at \u003ca href=\"https://www.nasa.gov/gallery/lunar-flyby/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.nasa.gov.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.nasa.gov.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://www.nasa.gov/gallery/lunar-flyby/\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"oaXRREHVkHo\" title=\"Explaining the Most Important Artemis II Photos\" playlabel=\"Play: Explaining the Most Important Artemis II Photos\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWhat an amazing set of photos created by the Artemis II crew accompanying a fantastic breakdown by Hank Green.\n\n![0b53a4ed-924e-42b5-84f4-51c189f60801.webp](http://dropper.wayl.one/file/0b53a4ed-924e-42b5-84f4-51c189f60801.webp)\nI like this one, as its probably one of the ones not shred a ton\n\nWhole gallery is worth looking at https://www.nasa.gov/gallery/lunar-flyby/\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=oaXRREHVkHo",
      "date_published": "2026-04-09T21:44:47Z",
      "date_modified": "2026-04-09T21:44:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "science",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-969/",
      "url": "https://go.waylonwalker.com/thought-969/",
      "title": "💭 An AI state of the union: We’ve passed the inflection point \u0026 ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"wc8FBhQtdsA\" title=\"An AI state of the union: We’ve passed the inflection point \u0026amp; dark factories are coming\" playlabel=\"Play: An AI state of the union: We’ve passed the inflection point \u0026amp; dark factories are coming\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eA really interesting long form interview with @simonwillison.net.  If you follow him closely most of it is probably not new, but I found some interesting nuggets.\u003c/p\u003e\n\u003cp\u003eSimon is writing most of his code from his phone these days using anthropic hosted platform.  He mentioned that a lot of security risks go away when you don’t put secrets on the platform and you let them take the risk of running ai written code with ai chosen supply chain.\u003c/p\u003e\n\u003cp\u003eHe talked about the Pelican Riding a Bike benchmark for quite awhile.  He was surprised at how well of a proxy it is for how capable a model is at just about everything.  He also said that when he runs the benchmark he also runs half a dozen others that he’s never talked about so that He could see if they were to train a model specific to his benchmark he could catch them, but it seems they had caught on and if they were they seem that they would already be doing it on all of his others anyways.\u003c/p\u003e\n\u003cp\u003eTDD is incredibly boring for humans, it strips so much creativity and joy from the process.  Who cares if agents are bored they do better when doing TDD.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"wc8FBhQtdsA\" title=\"An AI state of the union: We’ve passed the inflection point \u0026amp; dark factories are coming\" playlabel=\"Play: An AI state of the union: We’ve passed the inflection point \u0026amp; dark factories are coming\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nA really interesting long form interview with @simonwillison.net.  If you follow him closely most of it is probably not new, but I found some interesting nuggets.\n\nSimon is writing most of his code from his phone these days using anthropic hosted platform.  He mentioned that a lot of security risks go away when you don't put secrets on the platform and you let them take the risk of running ai written code with ai chosen supply chain.\n\nHe talked about the Pelican Riding a Bike benchmark for quite awhile.  He was surprised at how well of a proxy it is for how capable a model is at just about everything.  He also said that when he runs the benchmark he also runs half a dozen others that he's never talked about so that He could see if they were to train a model specific to his benchmark he could catch them, but it seems they had caught on and if they were they seem that they would already be doing it on all of his others anyways.\n\nTDD is incredibly boring for humans, it strips so much creativity and joy from the process.  Who cares if agents are bored they do better when doing TDD.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=wc8FBhQtdsA",
      "date_published": "2026-04-08T09:29:40Z",
      "date_modified": "2026-04-08T09:29:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-968/",
      "url": "https://go.waylonwalker.com/thought-968/",
      "title": "💭 DDR5 Prices are Crashing... Kind Of. - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"0jCMF7OeH9w\" title=\"DDR5 Prices are Crashing... Kind Of.\" playlabel=\"Play: DDR5 Prices are Crashing... Kind Of.\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTHIS is the future of \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, excited to see someone who knows so much more about hardware than I do get excited about this.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.waylonwalker.com/file/f69c86b9-ab79-46ad-9ef0-4d794544e943.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.waylonwalker.com/file/f69c86b9-ab79-46ad-9ef0-4d794544e943.webp\" alt=\"f69c86b9-ab79-46ad-9ef0-4d794544e943.webp\"/ data-glightbox=\"description: f69c86b9-ab79-46ad-9ef0-4d794544e943.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"0jCMF7OeH9w\" title=\"DDR5 Prices are Crashing... Kind Of.\" playlabel=\"Play: DDR5 Prices are Crashing... Kind Of.\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTHIS is the future of homelab, excited to see someone who knows so much more about hardware than I do get excited about this.\n\n![f69c86b9-ab79-46ad-9ef0-4d794544e943.webp](http://dropper.waylonwalker.com/file/f69c86b9-ab79-46ad-9ef0-4d794544e943.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=0jCMF7OeH9w\u0026t=328s",
      "date_published": "2026-04-08T08:41:16Z",
      "date_modified": "2026-04-08T08:41:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-967/",
      "url": "https://go.waylonwalker.com/thought-967/",
      "title": "💭 @seldo.com on Bluesky",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/seldo.com/post/3miybjol76p2r\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:4w3lx5jmokfvihilz2q562ev/bafkreic3gypsfet4fdphv4pp3h3fbrbwuu54bu42ks4qs6h754syqo3fxi\" alt=\"Laurie Voss (@seldo.com) — Project Glasswing is a glimpse at an oncoming future in which agents do things humans could never have accomplished and the results are handled by other agents faster than humans could react and we are just spectators.\" loading=\"lazy\"/ data-glightbox=\"description: Laurie Voss (@seldo.com) — Project Glasswing is a glimpse at an oncoming future in which agents do things humans could never have accomplished and the results are handled by other agents faster than humans could react and we are just spectators.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLaurie Voss (@seldo.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eProject Glasswing is a glimpse at an oncoming future in which agents do things humans could never have accomplished and the results are handled by other agents faster than humans could react and we...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIs Glasswing the next inflection point\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp\" alt=\"00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp\"/ data-glightbox=\"description: 00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/seldo.com/post/3miybjol76p2r\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:4w3lx5jmokfvihilz2q562ev/bafkreic3gypsfet4fdphv4pp3h3fbrbwuu54bu42ks4qs6h754syqo3fxi\" alt=\"Laurie Voss (@seldo.com) — Project Glasswing is a glimpse at an oncoming future in which agents do things humans could never have accomplished and the results are handled by other agents faster than humans could react and we are just spectators.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLaurie Voss (@seldo.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eProject Glasswing is a glimpse at an oncoming future in which agents do things humans could never have accomplished and the results are handled by other agents faster than humans could react and we...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIs Glasswing the next inflection point\n\n\n![00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp](http://dropper.wayl.one/file/00bc13be-32bd-4410-b0c4-2ecc0f2f6b95.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/seldo.com/post/3miybjol76p2r",
      "date_published": "2026-04-08T07:31:34Z",
      "date_modified": "2026-04-08T07:31:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-966/",
      "url": "https://go.waylonwalker.com/thought-966/",
      "title": "💭 BumpMesh by CNC Kitchen",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bumpmesh.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/bumpmesh.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/bumpmesh.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBumpMesh by CNC Kitchen\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebumpmesh.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAbsolutely sick texture app from cnc kitchen.  Like him I’ve spent a bunch of time attempting and failing to learn blender, I’m so glad someone else vibe coded out such a good app that can \u003ccode\u003ejust\u003c/code\u003e add texture to stls with basic masks and is the very basics of what you would want to add to 3d prints to make them interesting, I’m excited to use this for some real projects.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp\" alt=\"d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp\"/ data-glightbox=\"description: d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/e10dddf6-0f2e-498f-bef7-81901afced7b.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/e10dddf6-0f2e-498f-bef7-81901afced7b.webp\" alt=\"e10dddf6-0f2e-498f-bef7-81901afced7b.webp\"/ data-glightbox=\"description: e10dddf6-0f2e-498f-bef7-81901afced7b.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bumpmesh.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBumpMesh by CNC Kitchen\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebumpmesh.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAbsolutely sick texture app from cnc kitchen.  Like him I've spent a bunch of time attempting and failing to learn blender, I'm so glad someone else vibe coded out such a good app that can `just` add texture to stls with basic masks and is the very basics of what you would want to add to 3d prints to make them interesting, I'm excited to use this for some real projects.\n\n![d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp](http://dropper.wayl.one/file/d959e3dc-3fde-410b-acaf-8f0574f68a1a.webp)\n\n![e10dddf6-0f2e-498f-bef7-81901afced7b.webp](http://dropper.wayl.one/file/e10dddf6-0f2e-498f-bef7-81901afced7b.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bumpmesh.com/",
      "date_published": "2026-04-05T10:54:20Z",
      "date_modified": "2026-04-05T10:54:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-965/",
      "url": "https://go.waylonwalker.com/thought-965/",
      "title": "💭 Bush: Tiny Desk Concert - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"lBuHH7WE4yE\" title=\"Bush: Tiny Desk Concert\" playlabel=\"Play: Bush: Tiny Desk Concert\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBush on tiny desk.  Iconic band on an iconic platform.  Will be re-listening to this several times.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp\" alt=\"3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp\"/ data-glightbox=\"description: 3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"lBuHH7WE4yE\" title=\"Bush: Tiny Desk Concert\" playlabel=\"Play: Bush: Tiny Desk Concert\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nBush on tiny desk.  Iconic band on an iconic platform.  Will be re-listening to this several times.\n\n![3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp](http://dropper.wayl.one/file/3b67304c-41cc-4040-b6cd-7e0c16633e3d.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=lBuHH7WE4yE\u0026list=RDlBuHH7WE4yE\u0026start_radio=1",
      "date_published": "2026-04-03T20:23:28Z",
      "date_modified": "2026-04-03T20:23:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "music",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-964/",
      "url": "https://go.waylonwalker.com/thought-964/",
      "title": "💭 GitHub - kraanzu/smassh at terminaltrove · GitHub",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/kraanzu/smassh?ref=terminaltrove\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/454288517/ffbff45f-2f28-4d8b-92d6-fbb22d457a62\" alt=\"GitHub - kraanzu/smassh at terminaltrove — Smassh your Keyboard, TUI Edition. Contribute to kraanzu/smassh development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - kraanzu/smassh at terminaltrove — Smassh your Keyboard, TUI Edition. Contribute to kraanzu/smassh development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - kraanzu/smassh at terminaltrove\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSmassh your Keyboard, TUI Edition. Contribute to kraanzu/smassh development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003esmassh is the coolest monkeytype tui clone, its impressively accurate.  Easy to install and run, all the same themes appear to be there and everything.  maybe a good way to get a few reps in while agents are running these days.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/35102587-dffe-48ec-920a-a037917e7776.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"http://dropper.wayl.one/file/35102587-dffe-48ec-920a-a037917e7776.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"http://dropper.wayl.one/file/35102587-dffe-48ec-920a-a037917e7776.mp4\" type=\"video/mp4\"\u003e35102587-dffe-48ec-920a-a037917e7776.mp4\u003c/video\u003e\u003c/a\u003e\n\u003cfigcaption\u003e\u003cp\u003eI need to go back and brush up on my skills I’m down a good 20wpm from what I should be doing.\u003c/p\u003e\u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/kraanzu/smassh?ref=terminaltrove\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/454288517/ffbff45f-2f28-4d8b-92d6-fbb22d457a62\" alt=\"GitHub - kraanzu/smassh at terminaltrove — Smassh your Keyboard, TUI Edition. Contribute to kraanzu/smassh development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - kraanzu/smassh at terminaltrove\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSmassh your Keyboard, TUI Edition. Contribute to kraanzu/smassh development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nsmassh is the coolest monkeytype tui clone, its impressively accurate.  Easy to install and run, all the same themes appear to be there and everything.  maybe a good way to get a few reps in while agents are running these days.\n\n![35102587-dffe-48ec-920a-a037917e7776.mp4](http://dropper.wayl.one/file/35102587-dffe-48ec-920a-a037917e7776.mp4)\nI need to go back and brush up on my skills I'm down a good 20wpm from what I should be doing.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/kraanzu/smassh?ref=terminaltrove",
      "date_published": "2026-04-02T09:07:37Z",
      "date_modified": "2026-04-02T09:07:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "terminal",
        "tui",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-963/",
      "url": "https://go.waylonwalker.com/thought-963/",
      "title": "💭 What Happens When AI Stops Being Artificially Cheap | Daniel M...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://danielmiessler.com/blog/ai-stops-being-artificially-cheap\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://danielmiessler.com/images/ai-stops-being-artificially-cheap-thumb.png?t=1776460310982\" alt=\"What Happens When AI Stops Being Artificially Cheap — The subsidy era is ending. Here\" loading=\"lazy\"/ data-glightbox=\"description: What Happens When AI Stops Being Artificially Cheap — The subsidy era is ending. Here\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhat Happens When AI Stops Being Artificially Cheap\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe subsidy era is ending. Here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edanielmiessler.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve been thinking about this for awhile and Daniel makes some great arguments here.  Interestingly keeping inference cheap removes the incentives to make our tools better, help us choose the right model, lean on local models, open weight models.  The frontier models are so affordable through subsidized subscription models why would you deal with anything less intelligent at this point.  The tooling we use is not optimized for it, and why should it be.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://danielmiessler.com/blog/ai-stops-being-artificially-cheap\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://danielmiessler.com/images/ai-stops-being-artificially-cheap-thumb.png?t=1776460310982\" alt=\"What Happens When AI Stops Being Artificially Cheap — The subsidy era is ending. Here\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhat Happens When AI Stops Being Artificially Cheap\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe subsidy era is ending. Here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edanielmiessler.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've been thinking about this for awhile and Daniel makes some great arguments here.  Interestingly keeping inference cheap removes the incentives to make our tools better, help us choose the right model, lean on local models, open weight models.  The frontier models are so affordable through subsidized subscription models why would you deal with anything less intelligent at this point.  The tooling we use is not optimized for it, and why should it be.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://danielmiessler.com/blog/ai-stops-being-artificially-cheap",
      "date_published": "2026-04-01T12:04:12Z",
      "date_modified": "2026-04-01T12:04:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-962/",
      "url": "https://go.waylonwalker.com/thought-962/",
      "title": "💭 Tuesday, March 31, 2026 | Baty.net",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://baty.net/journal/31mar26/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebaty.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eemacs config so bad he launch obsidian, YIKES!  grantid I’m using obsidian currently on my phone, not for this post, but for journal entries while I’m away from my desk.  Use this as a reminder that you can swim through murky waters with your dotfiles for awhile, but occasionally its good to do a clean up, pin it, put em in a docker image, have a good fallback to go to if shit really hits the fan.  Iv’e been using \u003ca href=\"https://github.com/waylonwalker/nvim-manager\" 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\"\u003ehttps://github.com/waylonwalker/nvim-manager\u003c/a\u003e as part of my strategy for awhile now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://baty.net/journal/31mar26/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebaty.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nemacs config so bad he launch obsidian, YIKES!  grantid I'm using obsidian currently on my phone, not for this post, but for journal entries while I'm away from my desk.  Use this as a reminder that you can swim through murky waters with your dotfiles for awhile, but occasionally its good to do a clean up, pin it, put em in a docker image, have a good fallback to go to if shit really hits the fan.  Iv'e been using https://github.com/waylonwalker/nvim-manager as part of my strategy for awhile now.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://baty.net/journal/31mar26/",
      "date_published": "2026-03-31T21:09:19Z",
      "date_modified": "2026-03-31T21:09:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "other",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-961/",
      "url": "https://go.waylonwalker.com/thought-961/",
      "title": "💭 Release 0.9.17 · astral-sh/uv · GitHub",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/astral-sh/uv/releases/tag/0.9.17\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/astral-sh/uv/releases/tag/0.9.17\" alt=\"https://github.com/astral-sh/uv/releases/tag/0.9.17\"/ data-glightbox=\"description: https://github.com/astral-sh/uv/releases/tag/0.9.17\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003euv adds dependency cooldowns via \u003ca href=\"https://github.com/astral-sh/uv/pull/16814\" 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\"\u003e#16814\u003c/a\u003e. Well needed feature in todays world, far from a guarantee, but its something.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/astral-sh/uv/releases/tag/0.9.17](/static/https://github.com/astral-sh/uv/releases/tag/0.9.17)\n\nuv adds dependency cooldowns via [#16814](https://github.com/astral-sh/uv/pull/16814). Well needed feature in todays world, far from a guarantee, but its something.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/astral-sh/uv/releases/tag/0.9.17",
      "date_published": "2026-03-31T21:02:17Z",
      "date_modified": "2026-03-31T21:02:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-960/",
      "url": "https://go.waylonwalker.com/thought-960/",
      "title": "💭 Package Managers Need to Cool Down",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Mar/24/package-managers-need-to-cool-down/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePackage Managers Need to Cool Down\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eToday\u0026#39;s LiteLLM supply chain attack inspired me to revisit the idea of dependency cooldowns, the practice of only installing updated dependencies once they\u0026#39;ve been out in the wild for a …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e2026, finding the balance between fixed bugs and zero days.  There is very unlikely ever a reason you \u003cstrong\u003eneed\u003c/strong\u003e to be running bleeding edge packages in prod most package managers now support cool downs.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Mar/24/package-managers-need-to-cool-down/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePackage Managers Need to Cool Down\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eToday\u0026#39;s LiteLLM supply chain attack inspired me to revisit the idea of dependency cooldowns, the practice of only installing updated dependencies once they\u0026#39;ve been out in the wild for a …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n2026, finding the balance between fixed bugs and zero days.  There is very unlikely ever a reason you **need** to be running bleeding edge packages in prod most package managers now support cool downs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2026/Mar/24/package-managers-need-to-cool-down/",
      "date_published": "2026-03-31T20:40:50Z",
      "date_modified": "2026-03-31T20:40:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-959/",
      "url": "https://go.waylonwalker.com/thought-959/",
      "title": "💭 no one read the source",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ThePrimeagen/status/2038978962089492631\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eEveryone look away, nothing to see here.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp\" alt=\"090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp\"/ data-glightbox=\"description: 090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ThePrimeagen/status/2038978962089492631\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nEveryone look away, nothing to see here.\n\n![090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp](http://dropper.wayl.one/file/090f03b2-e6f5-4ede-a814-bfbb4e237b54.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/ThePrimeagen/status/2038978962089492631",
      "date_published": "2026-03-31T18:47:59Z",
      "date_modified": "2026-03-31T18:47:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "twitter",
        "anthropic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-958/",
      "url": "https://go.waylonwalker.com/thought-958/",
      "title": "💭 safe words",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/metedata/status/2038924041453441422\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAnthropic safewords are the talk of the town today.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/c097c6dc-4b10-4fab-a9f9-1d4181422285.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/c097c6dc-4b10-4fab-a9f9-1d4181422285.webp\" alt=\"c097c6dc-4b10-4fab-a9f9-1d4181422285.webp\"/ data-glightbox=\"description: c097c6dc-4b10-4fab-a9f9-1d4181422285.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/metedata/status/2038924041453441422\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAnthropic safewords are the talk of the town today.\n\n![c097c6dc-4b10-4fab-a9f9-1d4181422285.webp](http://dropper.wayl.one/file/c097c6dc-4b10-4fab-a9f9-1d4181422285.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/metedata/status/2038924041453441422",
      "date_published": "2026-03-31T18:46:01Z",
      "date_modified": "2026-03-31T18:46:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "twitter",
        "anthropic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-957/",
      "url": "https://go.waylonwalker.com/thought-957/",
      "title": "💭 the cheng lou pretext tweet",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/_chenglou/status/2037713766205608234\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ewebdev twitter is blowing up with implementations of pretext text calculations.  The examples are absolutely fun and ridiculous.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/350a368f-0e6b-4375-98d6-6303961c0d6c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/350a368f-0e6b-4375-98d6-6303961c0d6c.webp\" alt=\"350a368f-0e6b-4375-98d6-6303961c0d6c.webp\"/ data-glightbox=\"description: 350a368f-0e6b-4375-98d6-6303961c0d6c.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/_chenglou/status/2037713766205608234\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nwebdev twitter is blowing up with implementations of pretext text calculations.  The examples are absolutely fun and ridiculous.\n\n![350a368f-0e6b-4375-98d6-6303961c0d6c.webp](http://dropper.wayl.one/file/350a368f-0e6b-4375-98d6-6303961c0d6c.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/_chenglou/status/2037713766205608234",
      "date_published": "2026-03-31T18:38:39Z",
      "date_modified": "2026-03-31T18:38:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-956/",
      "url": "https://go.waylonwalker.com/thought-956/",
      "title": "💭 you can replace the spinning verbs in Claude Code",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/joshmedeski/status/2039010741039120417\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe claude code source code leaked today and the tweets are great, maybe twitter is back.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDid you know you can replace the spinning verbs in Claude Code. I’m having fun with it.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/file/8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp\" alt=\"8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp\"/ data-glightbox=\"description: 8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/joshmedeski/status/2039010741039120417\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe claude code source code leaked today and the tweets are great, maybe twitter is back.\n\n\u003e Did you know you can replace the spinning verbs in Claude Code. I'm having fun with it.\n\n![8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp](http://dropper.wayl.one/file/8cf5cf65-40e1-4f40-8d09-b596a97dd51d.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/joshmedeski/status/2039010741039120417",
      "date_published": "2026-03-31T18:31:56Z",
      "date_modified": "2026-03-31T18:31:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "twitter",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-955/",
      "url": "https://go.waylonwalker.com/thought-955/",
      "title": "💭 @nicknisi.com on Bluesky",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/nicknisi.com/post/3mhgcbpm4ds2p\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:qcyz4wcmgnz4mzxevrsrf6j6/bafkreigqa53eff2zrpj3ycievkcogzoj6yhyvsngidu6zowjnjofvzng4i\" alt=\"Nick Nisi (@nicknisi.com) — Y\u0026#39;all, I think I\u0026#39;m a convert to pi\" loading=\"lazy\"/ data-glightbox=\"description: Nick Nisi (@nicknisi.com) — Y\u0026#39;all, I think I\u0026#39;m a convert to pi\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNick Nisi (@nicknisi.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eY\u0026#39;all, I think I\u0026#39;m a convert to pi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m about to be pi pilled.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/nicknisi.com/post/3mhgcbpm4ds2p\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:qcyz4wcmgnz4mzxevrsrf6j6/bafkreigqa53eff2zrpj3ycievkcogzoj6yhyvsngidu6zowjnjofvzng4i\" alt=\"Nick Nisi (@nicknisi.com) — Y\u0026#39;all, I think I\u0026#39;m a convert to pi\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNick Nisi (@nicknisi.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eY\u0026#39;all, I think I\u0026#39;m a convert to pi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm about to be pi pilled.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/nicknisi.com/post/3mhgcbpm4ds2p",
      "date_published": "2026-03-31T10:19:49Z",
      "date_modified": "2026-03-31T10:19:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-954/",
      "url": "https://go.waylonwalker.com/thought-954/",
      "title": "💭 To Live In A World Without AI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/to-live-in-a-world-without-ai/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"To Live In A World Without AI | Nic Payne — I\u0026#39;m finding lately that I wish we could go back to pre-ChatGPT... A world\nwithout a code-gen easy button, where \u0026#34;easy\u0026#34; was LSP autocomplete, wher\" loading=\"lazy\"/ data-glightbox=\"description: To Live In A World Without AI | Nic Payne — I\u0026#39;m finding lately that I wish we could go back to pre-ChatGPT... A world\nwithout a code-gen easy button, where \u0026#34;easy\u0026#34; was LSP autocomplete, wher\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTo Live In A World Without AI | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m finding lately that I wish we could go back to pre-ChatGPT... A world\nwithout a code-gen easy button, where \u0026#34;easy\u0026#34; was LSP autocomplete, wher\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWe f\u0026amp;\u003cem\u003e#ing said @pype.dev, well f\u0026amp;\u003c/em\u003e#ing said.  I think a lot of us are feeling this, we’ve pitched our brain into a bucket and we are no longer stretching it in the same way.  We still work in similar ways of old, with new ways of turning off and saying yes a bunch of times.  the best thing I can hope for is that as things get better we have fewer yes loops, and more architectural design debates and deep thoughts.  But I fear deep thoughts are gone to the way of “research the leading 10 frameworks and pick the best one for this project.” and letting the clankers do the deep thinking.  Its signing us up for a weird distopia.\u003c/p\u003e\n\u003cp\u003eI think a lot of us wish we could undo what has happened and go back to actually understanding what we are doing, but the world has changed, and if you are building average shit, like the average person, using models trained on average people doing average shit you cant keep up anymore.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/to-live-in-a-world-without-ai/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"To Live In A World Without AI | Nic Payne — I\u0026#39;m finding lately that I wish we could go back to pre-ChatGPT... A world\nwithout a code-gen easy button, where \u0026#34;easy\u0026#34; was LSP autocomplete, wher\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTo Live In A World Without AI | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m finding lately that I wish we could go back to pre-ChatGPT... A world\nwithout a code-gen easy button, where \u0026#34;easy\u0026#34; was LSP autocomplete, wher\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWe f\u0026*#ing said @pype.dev, well f\u0026*#ing said.  I think a lot of us are feeling this, we've pitched our brain into a bucket and we are no longer stretching it in the same way.  We still work in similar ways of old, with new ways of turning off and saying yes a bunch of times.  the best thing I can hope for is that as things get better we have fewer yes loops, and more architectural design debates and deep thoughts.  But I fear deep thoughts are gone to the way of \"research the leading 10 frameworks and pick the best one for this project.\" and letting the clankers do the deep thinking.  Its signing us up for a weird distopia.\n\nI think a lot of us wish we could undo what has happened and go back to actually understanding what we are doing, but the world has changed, and if you are building average shit, like the average person, using models trained on average people doing average shit you cant keep up anymore.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/to-live-in-a-world-without-ai/",
      "date_published": "2026-03-26T08:29:37Z",
      "date_modified": "2026-03-26T08:29:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-953/",
      "url": "https://go.waylonwalker.com/thought-953/",
      "title": "💭 pype.dev - https://github.com/steveyegge/beads",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/my-thoughts-on-beads/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260303115635_629b64a7.png\" alt=\"My Thoughts on Beads | Nic Payne — [Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge) is a pretty well-known individual in the tech field, having been\naround for a long time at some of the\" loading=\"lazy\"/ data-glightbox=\"description: My Thoughts on Beads | Nic Payne — [Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge) is a pretty well-known individual in the tech field, having been\naround for a long time at some of the\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMy Thoughts on Beads | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e[Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge) is a pretty well-known individual in the tech field, having been\naround for a long time at some of the \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m in step with @pype.dev here, I really want beads to work for me, but my systems for infra/platform work are all over the place, not one repo.  I’m considering trying the \u003ccode\u003eBEADS_DIR\u003c/code\u003e env var but idk if it fits my workflow.  For now, similar to @pype.dev, I am rocking my own home vibed solution that I’ve intentionally put little effort in and its working great and I expect it to be broken and not working with the latest harnesses and models within a few months anyways, cause there is no predicting this train.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/my-thoughts-on-beads/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260303115635_629b64a7.png\" alt=\"My Thoughts on Beads | Nic Payne — [Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge) is a pretty well-known individual in the tech field, having been\naround for a long time at some of the\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMy Thoughts on Beads | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e[Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge) is a pretty well-known individual in the tech field, having been\naround for a long time at some of the \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm in step with @pype.dev here, I really want beads to work for me, but my systems for infra/platform work are all over the place, not one repo.  I'm considering trying the `BEADS_DIR` env var but idk if it fits my workflow.  For now, similar to @pype.dev, I am rocking my own home vibed solution that I've intentionally put little effort in and its working great and I expect it to be broken and not working with the latest harnesses and models within a few months anyways, cause there is no predicting this train.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/my-thoughts-on-beads/",
      "date_published": "2026-03-26T08:24:05Z",
      "date_modified": "2026-03-26T08:24:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-952/",
      "url": "https://go.waylonwalker.com/thought-952/",
      "title": "💭 paynepride dot com outage on vacation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/paynepride-dot-com-outage-on-vacation/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"paynepride dot com outage on vacation | Nic Payne — The day after I leave for vacation I start getting SSL errors on every homelab\nservice I host for myself and others. The culprit was my Cloudflare API token\nexp\" loading=\"lazy\"/ data-glightbox=\"description: paynepride dot com outage on vacation | Nic Payne — The day after I leave for vacation I start getting SSL errors on every homelab\nservice I host for myself and others. The culprit was my Cloudflare API token\nexp\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epaynepride dot com outage on vacation | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe day after I leave for vacation I start getting SSL errors on every homelab\nservice I host for myself and others. The culprit was my Cloudflare API token\nexp\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eoof, outage on 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 during vacation, brutal.  I can think of a couple of similar solutions to what @pype.dev has done to tailscale in, but I’m not sure that I could do this remotely.  On one hand I’m so glad that cloudflared just takes care of certs on the other hand this really brings a gap in my understanding of what the heck I would do if it were broken.\u003c/p\u003e\n\u003cp\u003eAn untested DR plan is not a DR plan.\u003c/p\u003e\n\u003cp\u003eAn untested backup does not exist.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/paynepride-dot-com-outage-on-vacation/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"paynepride dot com outage on vacation | Nic Payne — The day after I leave for vacation I start getting SSL errors on every homelab\nservice I host for myself and others. The culprit was my Cloudflare API token\nexp\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epaynepride dot com outage on vacation | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe day after I leave for vacation I start getting SSL errors on every homelab\nservice I host for myself and others. The culprit was my Cloudflare API token\nexp\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\noof, outage on the homelab during vacation, brutal.  I can think of a couple of similar solutions to what @pype.dev has done to tailscale in, but I'm not sure that I could do this remotely.  On one hand I'm so glad that cloudflared just takes care of certs on the other hand this really brings a gap in my understanding of what the heck I would do if it were broken.\n\nAn untested DR plan is not a DR plan.\n\nAn untested backup does not exist.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/paynepride-dot-com-outage-on-vacation/",
      "date_published": "2026-03-26T08:20:22Z",
      "date_modified": "2026-03-26T08:20:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-951/",
      "url": "https://go.waylonwalker.com/thought-951/",
      "title": "💭 Has 3D Printing Reduced Adam Savage's Maker's High? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"l8vxTYJbzSY\" title=\"Has 3D Printing Reduced Adam Savage\u0026#39;s Maker\u0026#39;s High?\" playlabel=\"Play: Has 3D Printing Reduced Adam Savage\u0026#39;s Maker\u0026#39;s High?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\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 is going so far into the news sphere now that Adam Savage even weighs in with perspectives from someone who has built a life around building things with his hands, keeping up with new making techniques, discovering old techniques as they combine with new.  He talks about 3d printing reviving his love of the pantograph as one automation technique eases the most difficult part of another.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"l8vxTYJbzSY\" title=\"Has 3D Printing Reduced Adam Savage\u0026#39;s Maker\u0026#39;s High?\" playlabel=\"Play: Has 3D Printing Reduced Adam Savage\u0026#39;s Maker\u0026#39;s High?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nVibe coding is going so far into the news sphere now that Adam Savage even weighs in with perspectives from someone who has built a life around building things with his hands, keeping up with new making techniques, discovering old techniques as they combine with new.  He talks about 3d printing reviving his love of the pantograph as one automation technique eases the most difficult part of another.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtu.be/l8vxTYJbzSY?t=107",
      "date_published": "2026-03-25T20:37:06Z",
      "date_modified": "2026-03-25T20:37:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "making",
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-950/",
      "url": "https://go.waylonwalker.com/thought-950/",
      "title": "💭 kubernetes is beautiful r/kubernetes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/kubernetes/comments/1rzyhip/kubernetes_is_beautiful/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.reddit.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.reddit.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKubernetes is beautiful.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubernetes is beautiful.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit · reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a fantastic progression through kuberentes concepts.  From running a pod, to making it resiliant, holding secrets, accepting traffic, and autoscaling.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/kubernetes/comments/1rzyhip/kubernetes_is_beautiful/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKubernetes is beautiful.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubernetes is beautiful.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit \u0026middot; reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a fantastic progression through kuberentes concepts.  From running a pod, to making it resiliant, holding secrets, accepting traffic, and autoscaling.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reddit.com/r/kubernetes/comments/1rzyhip/kubernetes_beautiful/",
      "date_published": "2026-03-23T21:29:40Z",
      "date_modified": "2026-03-23T21:29:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/move-zmk-keyboard-to-new-bluetooth-adapter/",
      "url": "https://go.waylonwalker.com/move-zmk-keyboard-to-new-bluetooth-adapter/",
      "title": "move zmk keyboard to new bluetooth adapter",
      "content_html": "\u003cp\u003eI’ve been having issue with my keyboard disconnecting to my main desktop for\nawhile.  Today I got a cheap bluetooh dongle in and am giving it a run this\nweek to see how things go.  The first step was to move it to the new adapter.\nI’ve never had multiple adapters installed so this was a new to me process.\u003c/p\u003e\n\u003cp\u003eI was able to do it all with the same keyboard, It did require some juggling\nbetween usb and bluetooth modes pluging and unplugging, two keyboards would be\nsimpler to reason about.\u003c/p\u003e\n\u003cp\u003eI can’t be bothered to change my brain to think about this machine on a\ndifferent zmk profile it is of absolute importance for it to remain on the same\nprofile, otherwise this would be a simple bind to another empty profile.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eWhy not use a cable on desktop?\u003c/p\u003e\n\u003cp\u003eI dont mind cable, and have used one on this setup for years, but I have\nactually been picking up and moving this keyboard and using it with\ndifferent devices.\u003c/p\u003e\n\u003cp\u003eI’ve got a big battery and performace cranked up, unless my machine is\nunder load I do not notice any key lag.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eI did it with bluetoothctl, I’m sure it could have been done with a gui like\n\u003ccode\u003eblueberry\u003c/code\u003e or \u003ccode\u003eblueman\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# list adapters\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elist\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eselect\u003c/span\u003e \u0026lt;old-adapter\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edevices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# fin the MAC address of the device 42BLOCK\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eremove \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow I plugged into usb. And \u003cstrong\u003eimportantly\u003c/strong\u003e cleared out the zmk profile.  If\nyou do not clear the profile your board does not go into pairing mode.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# switch adapters\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eselect\u003c/span\u003e \u0026lt;new-adapter\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epower on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eagent on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefault-agent\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePut 42Block in pairing mode, \u003cspan class=\"k\"\u003ethen\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epair \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etrust \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAt this pint I saw this show up in the logs, I think there was some masking\nissues or something in zmk, output kept going out usb no matter what so I\ndisconnected the keyboard and typed the passkey in, and it worked.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eagent\u003cspan class=\"o\"\u003e]\u003c/span\u003e Passkey: \u003cspan class=\"m\"\u003e540044\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBoom, it just started working right away.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econnect \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been having issue with my keyboard disconnecting to my main desktop for\nawhile.  Today I got a cheap bluetooh dongle in and am giving it a run this\nweek to see how things go.  The first step was to move it to the new adapter.\nI've never had multiple adapters installed so this was a new to me process.\n\nI was able to do it all with the same keyboard, It did require some juggling\nbetween usb and bluetooth modes pluging and unplugging, two keyboards would be\nsimpler to reason about.\n\nI can't be bothered to change my brain to think about this machine on a\ndifferent zmk profile it is of absolute importance for it to remain on the same\nprofile, otherwise this would be a simple bind to another empty profile.\n\n!!! note \"Why not use a cable on desktop?\"\n\n    I dont mind cable, and have used one on this setup for years, but I have\n    actually been picking up and moving this keyboard and using it with\n    different devices.\n\n    I've got a big battery and performace cranked up, unless my machine is\n    under load I do not notice any key lag.\n\nI did it with bluetoothctl, I'm sure it could have been done with a gui like\n`blueberry` or `blueman`.\n\n``` bash\nbluetoothctl\n# list adapters\nlist\nselect \u003cold-adapter\u003e\ndevices\n# fin the MAC address of the device 42BLOCK\nremove \u003c42BLOCK_MAC\u003e\n```\n\nNow I plugged into usb. And **importantly** cleared out the zmk profile.  If\nyou do not clear the profile your board does not go into pairing mode.\n\n``` bash\nbluetoothctl\n# switch adapters\nselect \u003cnew-adapter\u003e\npower on\nagent on\ndefault-agent\nscan on\nPut 42Block in pairing mode, then:\npair \u003c42BLOCK_MAC\u003e\ntrust \u003c42BLOCK_MAC\u003e\n```\n\nAt this pint I saw this show up in the logs, I think there was some masking\nissues or something in zmk, output kept going out usb no matter what so I\ndisconnected the keyboard and typed the passkey in, and it worked.\n\n``` bash\n[agent] Passkey: 540044\n```\n\nBoom, it just started working right away.\n\n``` bash\nbluetoothctl\nconnect \u003c42BLOCK_MAC\u003e\ninfo \u003c42BLOCK_MAC\u003e\nscan off\nexit\n```\n",
      "summary": "I've been having issue with my keyboard disconnecting to my main desktop for awhile. Today I got a cheap bluetooh dongle in and am giving it a run this week...",
      "date_published": "2026-03-23T17:59:59Z",
      "date_modified": "2026-03-23T17:59:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keeb",
        "zmk"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-949/",
      "url": "https://go.waylonwalker.com/thought-949/",
      "title": "💭 More Details Than You Probably Wanted to Know About Recent Upd...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2026/notes-site-updates/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMore Details Than You Probably Wanted to Know About Recent Updates to My Notes Site\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI love the level of thought that Jim has put into these changes and making sure that urls don’t change.  I’ve got a big change in flight to my main site and this is one of the reasons that I’ve been sitting on it so long.  I want to make sure urls arent broken, redirects work as they should, and there are no 404’s from existing urls.  Currently the new version only exists on a separate deployement \u003ca href=\"https://go.waylonwalker.com/\"\u003ehttps://go.waylonwalker.com/\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI also added the ability to “shuffle” between posts. This is mostly for myself. I like to randomly jump through notes I’ve published in the past for reoccurring inspiration\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eLove this idea and have it on my new site already as well, and have really enjoyed using it by pressing it a dozen or so times over the course of a few sessions.  It highlights that I have too many posts like stars and thoughts and I should do some weighting to main posts.  mine is at \u003ca href=\"https://go.waylonwalker.com/random/\"\u003ehttps://go.waylonwalker.com/random/\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2026/notes-site-updates/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMore Details Than You Probably Wanted to Know About Recent Updates to My Notes Site\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI love the level of thought that Jim has put into these changes and making sure that urls don't change.  I've got a big change in flight to my main site and this is one of the reasons that I've been sitting on it so long.  I want to make sure urls arent broken, redirects work as they should, and there are no 404's from existing urls.  Currently the new version only exists on a separate deployement https://go.waylonwalker.com/\n\n\u003e I also added the ability to “shuffle” between posts. This is mostly for myself. I like to randomly jump through notes I’ve published in the past for reoccurring inspiration\n\nLove this idea and have it on my new site already as well, and have really enjoyed using it by pressing it a dozen or so times over the course of a few sessions.  It highlights that I have too many posts like stars and thoughts and I should do some weighting to main posts.  mine is at https://go.waylonwalker.com/random/\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2026/notes-site-updates/",
      "date_published": "2026-03-23T12:26:22Z",
      "date_modified": "2026-03-23T12:26:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-948/",
      "url": "https://go.waylonwalker.com/thought-948/",
      "title": "💭 Notes – 06:34 Mon 23 Mar 2026 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2026-03-23T06:34Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 06:34 Mon 23 Mar 2026 — Notes – 06:34 Mon 23 Mar 2026\" loading=\"lazy\"/ data-glightbox=\"description: Notes – 06:34 Mon 23 Mar 2026 — Notes – 06:34 Mon 23 Mar 2026\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 06:34 Mon 23 Mar 2026\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 06:34 Mon 23 Mar 2026\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDoes anyone think fast-code will continue to pay the same salary? The answer isn’t to switch your brain off during your McCode shift and write a poem after work. Your job will be replaced by a Banglasdeshi slop-shop if AI improves (which is inevitable, apparently). Possibly the same sweatshop that loomed my £3 T-shirt. The Luddites didn’t accept their fate so easily.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDavid has some good points here, but I’m feeling the opposite direction a bit.  Execs have always liked keeping the PM’s and the people steering the ship close by and were willing to farm out more and more grunt work.  It feels like we are in a weird phase where there used to be a big group of people paid to write code.   A few of them are exceptionally good at it and will remain.  There will be a need for these people everywhere.  Somehow we still need people hand editing assembly code optimizations, fortran, and cobol today.  Those industries largely moved on, but a few great ones remain.  I think this fast-code slop factory is going to be a  short forgotten time in history, but no one yet knows what’s next.  We are all waiting to find out.  Just with anything there is still value in doing it by hand and understanding it at a deep level, but its quickly becoming hobby work.  The things that most people code, things like CRUD apps do not require a special skill.  They are largely replicating existing good patterns on frameworks to implement business logic that are custom to the app.  There is no way of getting around the latter.  Someone will always need to understand the business logic and be able to “sign off” and assert that it does the thing the business needs.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2026-03-23T06:34Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 06:34 Mon 23 Mar 2026 — Notes – 06:34 Mon 23 Mar 2026\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 06:34 Mon 23 Mar 2026\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 06:34 Mon 23 Mar 2026\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Does anyone think fast-code will continue to pay the same salary? The answer isn’t to switch your brain off during your McCode shift and write a poem after work. Your job will be replaced by a Banglasdeshi slop-shop if AI improves (which is inevitable, apparently). Possibly the same sweatshop that loomed my £3 T-shirt. The Luddites didn’t accept their fate so easily.\n\nDavid has some good points here, but I'm feeling the opposite direction a bit.  Execs have always liked keeping the PM's and the people steering the ship close by and were willing to farm out more and more grunt work.  It feels like we are in a weird phase where there used to be a big group of people paid to write code.   A few of them are exceptionally good at it and will remain.  There will be a need for these people everywhere.  Somehow we still need people hand editing assembly code optimizations, fortran, and cobol today.  Those industries largely moved on, but a few great ones remain.  I think this fast-code slop factory is going to be a  short forgotten time in history, but no one yet knows what's next.  We are all waiting to find out.  Just with anything there is still value in doing it by hand and understanding it at a deep level, but its quickly becoming hobby work.  The things that most people code, things like CRUD apps do not require a special skill.  They are largely replicating existing good patterns on frameworks to implement business logic that are custom to the app.  There is no way of getting around the latter.  Someone will always need to understand the business logic and be able to \"sign off\" and assert that it does the thing the business needs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/notes/2026-03-23T06:34Z/",
      "date_published": "2026-03-23T09:07:38Z",
      "date_modified": "2026-03-23T09:07:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mohebifar-tooscut/",
      "url": "https://go.waylonwalker.com/mohebifar-tooscut/",
      "title": "⭐ mohebifar tooscut",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/mohebifar/tooscut\" 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\"\u003etooscut\u003c/a\u003e by \u003ca href=\"https://github.com/mohebifar\" 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\"\u003emohebifar\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eProfessional video editing, right in your browser. Made with Rust, WebGPU, WASM, and Tanstack Start.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [tooscut](https://github.com/mohebifar/tooscut) by [mohebifar](https://github.com/mohebifar).\n\nProfessional video editing, right in your browser. Made with Rust, WebGPU, WASM, and Tanstack Start.\n",
      "summary": "Looking for inspiration? tooscut by mohebifar.",
      "date_published": "2026-03-22T22:18:23Z",
      "date_modified": "2026-03-22T22:18:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kraanzu-smassh/",
      "url": "https://go.waylonwalker.com/kraanzu-smassh/",
      "title": "⭐ kraanzu smassh",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/kraanzu\" 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\"\u003ekraanzu’s\u003c/a\u003e project \u003ca href=\"https://github.com/kraanzu/smassh\" 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\"\u003esmassh\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSmassh your Keyboard, TUI Edition\u003c/p\u003e\n",
      "content_text": "\nI like [kraanzu's](https://github.com/kraanzu) project [smassh](https://github.com/kraanzu/smassh).\n\nSmassh your Keyboard, TUI Edition\n",
      "summary": "I like kraanzu's project smassh.",
      "date_published": "2026-03-21T16:56:20Z",
      "date_modified": "2026-03-21T16:56:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kittenml-kittentts/",
      "url": "https://go.waylonwalker.com/kittenml-kittentts/",
      "title": "⭐ KittenML KittenTTS",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/KittenML/KittenTTS\" 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\"\u003eKittenTTS\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/KittenML\" 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\"\u003eKittenML\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eState-of-the-art TTS model under 25MB 😻\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [KittenTTS](https://github.com/KittenML/KittenTTS), an amazing project by [KittenML](https://github.com/KittenML). It's worth exploring!\n\n State-of-the-art TTS model under 25MB 😻 \n",
      "summary": "I'm really excited about KittenTTS, an amazing project by KittenML. It's worth exploring!",
      "date_published": "2026-03-20T03:37:04Z",
      "date_modified": "2026-03-20T03:37:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dot-dockerenv/",
      "url": "https://go.waylonwalker.com/dot-dockerenv/",
      "title": "dot dockerenv",
      "content_html": "\u003cp\u003eToday I learned that docker creates an empty \u003ccode\u003e/.dockerenv\u003c/code\u003e file to indicate that\nyou are running in a docker container.  Other runtimes like podman commonly use\n\u003ccode\u003e/run/.containerenv\u003c/code\u003e.  kubernetes uses neither of these, the most common way to\ndetect if you are running in kubernetes is to check for the presence of the\n\u003ccode\u003eKUBERNETES_SERVICE_HOST\u003c/code\u003e environment variable.  There will also be a directory\nat \u003ccode\u003e/var/run/secrets/kubernetes.io/serviceaccount\u003c/code\u003e that contains the service\naccount credentials if you are running in kubernetes.\u003c/p\u003e\n",
      "content_text": "\nToday I learned that docker creates an empty `/.dockerenv` file to indicate that\nyou are running in a docker container.  Other runtimes like podman commonly use\n`/run/.containerenv`.  kubernetes uses neither of these, the most common way to\ndetect if you are running in kubernetes is to check for the presence of the\n`KUBERNETES_SERVICE_HOST` environment variable.  There will also be a directory\nat `/var/run/secrets/kubernetes.io/serviceaccount` that contains the service\naccount credentials if you are running in kubernetes.\n\n",
      "summary": "Today I learned that docker creates an empty file to indicate that you are running in a docker container. Other runtimes like podman commonly use ....",
      "date_published": "2026-03-18T10:07:16Z",
      "date_modified": "2026-03-18T10:07:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "containers",
        "docker",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tobi-qmd/",
      "url": "https://go.waylonwalker.com/tobi-qmd/",
      "title": "⭐ tobi qmd",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/tobi/qmd\" 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\"\u003eqmd\u003c/a\u003e, created by \u003ca href=\"https://github.com/tobi\" 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\"\u003etobi\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003emini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [qmd](https://github.com/tobi/qmd), created by [tobi](https://github.com/tobi).\n\nmini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local\n",
      "summary": "If you're into interesting projects, don't miss out on qmd, created by tobi.",
      "date_published": "2026-03-17T20:39:09Z",
      "date_modified": "2026-03-17T20:39:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ratdoux-orcaslicer-fullspectrum/",
      "url": "https://go.waylonwalker.com/ratdoux-orcaslicer-fullspectrum/",
      "title": "⭐ ratdoux OrcaSlicer-FullSpectrum",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/ratdoux/OrcaSlicer-FullSpectrum\" 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\"\u003eOrcaSlicer-FullSpectrum\u003c/a\u003e by \u003ca href=\"https://github.com/ratdoux\" 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\"\u003eratdoux\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eG-code generator for Snapmaker U1 with Full Spectrum layer blending\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [OrcaSlicer-FullSpectrum](https://github.com/ratdoux/OrcaSlicer-FullSpectrum) by [ratdoux](https://github.com/ratdoux).\n\nG-code generator for Snapmaker U1 with Full Spectrum layer blending\n",
      "summary": "Looking for inspiration? OrcaSlicer-FullSpectrum by ratdoux.",
      "date_published": "2026-03-17T20:33:28Z",
      "date_modified": "2026-03-17T20:33:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-947/",
      "url": "https://go.waylonwalker.com/thought-947/",
      "title": "💭 ten year computer",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://alexwlchan.net/2026/ten-year-computer/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/alexwlchan.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/alexwlchan.net.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDreaming of a ten-year computer – alexwlchan\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ealexwlchan.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat gusto here from someone looking to fill landfills less.  Get more use from what they paid for.  Dodge some tough times in the hardware industry.  I’m going to argue that the 10 year computer is not one bit crazy right now.  No idea what the future entails, if local llms get good enough to really get so useful they feel required this could easily change.  One issue I had with the post as they are looking to get a machine for the next 10 years is they were so focused on themself that they missed the point.  They were so focused on buying something that would work for them for 10 years that they bought something brand new rather than thinking about the bigger issue of how do we get hardware to last 10+ years.  Some factor of this involves giving our devices a second life.  Two things went wrong here.  First it appears they they have a perfectly good imac with a broken screen.  I know nothing about apple/imac, assuming that the screen is toast and unrepairable, I know you can ssh into a mac this feels like good potential for server hardware.  Next they purchased a brand new mac mini.  Hardware has been good for a long time, there is no need to buy new right now, especially now.  I haven’t bought a new machine in years and most of my hardware is second hand cobbled together stuff, and has no issues.  I’ve got one machine thats 16 years old, 2 machines at 9 years, one at 8 years.  To get here they need to be repairable, designed to last, and probably no run windows as they will release something that renders them too slow or require new hardware for security that wont work.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://alexwlchan.net/2026/ten-year-computer/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDreaming of a ten-year computer – alexwlchan\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ealexwlchan.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat gusto here from someone looking to fill landfills less.  Get more use from what they paid for.  Dodge some tough times in the hardware industry.  I'm going to argue that the 10 year computer is not one bit crazy right now.  No idea what the future entails, if local llms get good enough to really get so useful they feel required this could easily change.  One issue I had with the post as they are looking to get a machine for the next 10 years is they were so focused on themself that they missed the point.  They were so focused on buying something that would work for them for 10 years that they bought something brand new rather than thinking about the bigger issue of how do we get hardware to last 10+ years.  Some factor of this involves giving our devices a second life.  Two things went wrong here.  First it appears they they have a perfectly good imac with a broken screen.  I know nothing about apple/imac, assuming that the screen is toast and unrepairable, I know you can ssh into a mac this feels like good potential for server hardware.  Next they purchased a brand new mac mini.  Hardware has been good for a long time, there is no need to buy new right now, especially now.  I haven't bought a new machine in years and most of my hardware is second hand cobbled together stuff, and has no issues.  I've got one machine thats 16 years old, 2 machines at 9 years, one at 8 years.  To get here they need to be repairable, designed to last, and probably no run windows as they will release something that renders them too slow or require new hardware for security that wont work.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://alexwlchan.net/2026/ten-year-computer/",
      "date_published": "2026-03-17T09:32:50Z",
      "date_modified": "2026-03-17T09:32:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-946/",
      "url": "https://go.waylonwalker.com/thought-946/",
      "title": "💭 The future of Coding and Code Quality - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"baIHCeccbbw\" title=\"The future of Coding and Code Quality\" playlabel=\"Play: The future of Coding and Code Quality\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eVery interesting takes from @thdxr in this interview.  A lot has been hashed out by others all over the place, but a hot take here is that code quality is higher than ever right now.  Codebases are becoming more consistent than ever.   If you are not starting with a good consistent base from the start you are poising your context and doomed to fail and have all the common failures of ai written code.  He still reads almost every PR, and will read all of the code eventually.  There are a few cases where reading the PR is not worthwhile only when its low stakes, knows that good patterns have been established and followed.  He argues that someone needs to be the expert of the code and of the product still and fears that too many people not looking at prs will fail companies.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"baIHCeccbbw\" title=\"The future of Coding and Code Quality\" playlabel=\"Play: The future of Coding and Code Quality\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nVery interesting takes from @thdxr in this interview.  A lot has been hashed out by others all over the place, but a hot take here is that code quality is higher than ever right now.  Codebases are becoming more consistent than ever.   If you are not starting with a good consistent base from the start you are poising your context and doomed to fail and have all the common failures of ai written code.  He still reads almost every PR, and will read all of the code eventually.  There are a few cases where reading the PR is not worthwhile only when its low stakes, knows that good patterns have been established and followed.  He argues that someone needs to be the expert of the code and of the product still and fears that too many people not looking at prs will fail companies.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=baIHCeccbbw",
      "date_published": "2026-03-17T09:07:41Z",
      "date_modified": "2026-03-17T09:07:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-945/",
      "url": "https://go.waylonwalker.com/thought-945/",
      "title": "💭 Do You Have Token anxiety? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ZJEnQOsMtsU\" title=\"What is wrong with us?!\" playlabel=\"Play: What is wrong with us?!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eKids are leaving the party early, not drinking, cant watch netflix without the laptop open.  They are leaving the party early to check on their agents.  I get it, that feeling that you need to eek out one more prompt, keep your agents running. if they arent running what are you even doing.  If not you 6 others are ready to pass you up.  The timeline to be first has shrunk to nothing but unachievable.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ZJEnQOsMtsU\" title=\"What is wrong with us?!\" playlabel=\"Play: What is wrong with us?!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nKids are leaving the party early, not drinking, cant watch netflix without the laptop open.  They are leaving the party early to check on their agents.  I get it, that feeling that you need to eek out one more prompt, keep your agents running. if they arent running what are you even doing.  If not you 6 others are ready to pass you up.  The timeline to be first has shrunk to nothing but unachievable.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ZJEnQOsMtsU",
      "date_published": "2026-03-15T09:27:15Z",
      "date_modified": "2026-03-15T09:27:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cyxzdev-uncodixfy/",
      "url": "https://go.waylonwalker.com/cyxzdev-uncodixfy/",
      "title": "⭐ cyxzdev Uncodixfy",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/cyxzdev/Uncodixfy\" 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\"\u003eUncodixfy\u003c/a\u003e by \u003ca href=\"https://github.com/cyxzdev\" 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\"\u003ecyxzdev\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ethe holly uncodexify instructions - letting GPT create uncodexified UI\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [Uncodixfy](https://github.com/cyxzdev/Uncodixfy) by [cyxzdev](https://github.com/cyxzdev), and it's truly impressive.\n\nthe holly uncodexify instructions - letting GPT create uncodexified UI\n",
      "summary": "I recently discovered Uncodixfy by cyxzdev, and it's truly impressive.",
      "date_published": "2026-03-13T01:26:23Z",
      "date_modified": "2026-03-13T01:26:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-944/",
      "url": "https://go.waylonwalker.com/thought-944/",
      "title": "💭 No one under 18 installs Linux",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"1HeALnI-gVg\" title=\"✂️ No one under 18 installs Linux\" playlabel=\"Play: ✂️ No one under 18 installs Linux\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e😂 Should I be concerned that My 12yo installed Arch BTW on his own?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"1HeALnI-gVg\" title=\"✂️ No one under 18 installs Linux\" playlabel=\"Play: ✂️ No one under 18 installs Linux\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n😂 Should I be concerned that My 12yo installed Arch BTW on his own?\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtube.com/clip/UgkxVmrLKcNieh6FffrnSu2-iXD8SVFzSCzj?si=rV4k2piZM3Jcq9w0",
      "date_published": "2026-03-09T11:46:15Z",
      "date_modified": "2026-03-09T11:46:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-943/",
      "url": "https://go.waylonwalker.com/thought-943/",
      "title": "💭 The web is bearable with RSS",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pluralistic.net/2026/03/07/reader-mode/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pluralistic.net.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pluralistic.net.jpg\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePluralistic: The web is bearable with RSS (07 Mar 2026) – Pluralistic: Daily links from Cory Doctorow\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epluralistic.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIt’s wild how much of a hit Google took from killing reader, almost any time I hear about killedbygoogle, reader is the top of the list.  Its the thing that we all remember being really good and the incumbants just did not match up.  Somehow we are here 13 years later still bitching about it, despite it only having a 6 year run.  You should probably get an rss reader, and follow some incredible people that make feeds.  Most sites that produce content have the ability to subscribe over rss.  Unlike @pluralistic.net, I dont read in my reader.  My reader is just a list of links out to the web and I typically read it how the author intended on their site.  I nod a long to Cory’s enshitified internet just as much as the next guy, I love text based interfaces, I despise  the bloat that js has brought on.  But I don’t believe all js is bad, I don’t turn it off, even though he has me questioning this now.  News sites kinda suck, we can agree there, but its rare that a small indie web creator has fully enshitified their site with js.  I don’t buy that.  Sub to the feeds.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pluralistic.net/2026/03/07/reader-mode/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePluralistic: The web is bearable with RSS (07 Mar 2026) – Pluralistic: Daily links from Cory Doctorow\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epluralistic.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIt's wild how much of a hit Google took from killing reader, almost any time I hear about killedbygoogle, reader is the top of the list.  Its the thing that we all remember being really good and the incumbants just did not match up.  Somehow we are here 13 years later still bitching about it, despite it only having a 6 year run.  You should probably get an rss reader, and follow some incredible people that make feeds.  Most sites that produce content have the ability to subscribe over rss.  Unlike @pluralistic.net, I dont read in my reader.  My reader is just a list of links out to the web and I typically read it how the author intended on their site.  I nod a long to Cory's enshitified internet just as much as the next guy, I love text based interfaces, I despise  the bloat that js has brought on.  But I don't believe all js is bad, I don't turn it off, even though he has me questioning this now.  News sites kinda suck, we can agree there, but its rare that a small indie web creator has fully enshitified their site with js.  I don't buy that.  Sub to the feeds.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pluralistic.net/2026/03/07/reader-mode/",
      "date_published": "2026-03-09T09:00:55Z",
      "date_modified": "2026-03-09T09:00:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-942/",
      "url": "https://go.waylonwalker.com/thought-942/",
      "title": "💭 I need a new blog to subscribe to. Know… | justin․searls․co",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justin.searls.co/takes/2026-03-08-23h18m29s/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://justin.searls.co/img/face.jpg\" alt=\"Justin Searls\n@searls — \nI need a new blog to subscribe to. Know any you think I\u0026#39;d like? E-mail me: justin@searls.co\" loading=\"lazy\"/ data-glightbox=\"description: Justin Searls\n@searls — \nI need a new blog to subscribe to. Know any you think I\u0026#39;d like? E-mail me: justin@searls.co\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJustin Searls\n@searls\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\nI need a new blog to subscribe to. Know any you think I\u0026#39;d like? E-mail me: justin@searls.co\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustin․searls․co · justin.searls.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSent Justin my list \u003ca href=\"https://go.waylonwalker.com/blogroll\"\u003ehttps://go.waylonwalker.com/blogroll\u003c/a\u003e, will soon be on the main site, but right now its only on the go subdomain.  I’ve long had reader.waylonwalker.com, but thats soon going to be wrapped into the main site as well at /reader.\u003c/p\u003e\n\u003cp\u003eI’m interested to see what good stuff Justin gets and if you have any good ones to share reply.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justin.searls.co/takes/2026-03-08-23h18m29s/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://justin.searls.co/img/face.jpg\" alt=\"Justin Searls\n@searls — \nI need a new blog to subscribe to. Know any you think I\u0026#39;d like? E-mail me: justin@searls.co\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJustin Searls\n@searls\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\nI need a new blog to subscribe to. Know any you think I\u0026#39;d like? E-mail me: justin@searls.co\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustin․searls․co \u0026middot; justin.searls.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSent Justin my list https://go.waylonwalker.com/blogroll, will soon be on the main site, but right now its only on the go subdomain.  I've long had reader.waylonwalker.com, but thats soon going to be wrapped into the main site as well at /reader.\n\nI'm interested to see what good stuff Justin gets and if you have any good ones to share reply.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://justin.searls.co/takes/2026-03-08-23h18m29s/",
      "date_published": "2026-03-09T08:31:53Z",
      "date_modified": "2026-03-09T08:31:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gh-do-i-have-a-pr/",
      "url": "https://go.waylonwalker.com/gh-do-i-have-a-pr/",
      "title": "gh do I have a pr",
      "content_html": "\u003cp\u003eIn the age of agents sometimes work gets done on so many different worktrees\nand branches its hard to tell if there is already a PR or any of them or not,\nthe great \u003ccode\u003egh\u003c/code\u003e cli has us covered.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr list --head fix/markata-go-connections-graph\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIn the age of agents sometimes work gets done on so many different worktrees\nand branches its hard to tell if there is already a PR or any of them or not,\nthe great `gh` cli has us covered.\n\n``` bash\ngh pr list --head fix/markata-go-connections-graph\n```\n",
      "summary": "In the age of agents sometimes work gets done on so many different worktrees and branches its hard to tell if there is already a PR or any of them or not,...",
      "date_published": "2026-03-02T08:47:44Z",
      "date_modified": "2026-03-02T08:47:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/version-fox-vfox/",
      "url": "https://go.waylonwalker.com/version-fox-vfox/",
      "title": "⭐ version-fox vfox",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/version-fox\" 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\"\u003eversion-fox’s\u003c/a\u003e project \u003ca href=\"https://github.com/version-fox/vfox\" 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\"\u003evfox\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA cross-platform and extendable version manager with support for Java, Node.js, Golang, Python, Flutter, .NET \u0026amp; more\u003c/p\u003e\n",
      "content_text": "\nI like [version-fox's](https://github.com/version-fox) project [vfox](https://github.com/version-fox/vfox).\n\nA cross-platform and extendable version manager with support for Java, Node.js, Golang, Python, Flutter, .NET \u0026 more\n",
      "summary": "I like version-fox's project vfox.",
      "date_published": "2026-03-02T02:57:32Z",
      "date_modified": "2026-03-02T02:57:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kohei-wada-taskdog/",
      "url": "https://go.waylonwalker.com/kohei-wada-taskdog/",
      "title": "⭐ Kohei-Wada taskdog",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/Kohei-Wada/taskdog\" 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\"\u003etaskdog\u003c/a\u003e by \u003ca href=\"https://github.com/Kohei-Wada\" 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\"\u003eKohei-Wada\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eTerminal task manager with intelligent schedule optimization.Keyboard-only. No dragging, no micromanagement.\u003c/p\u003e\n",
      "content_text": "\nJust starred [taskdog](https://github.com/Kohei-Wada/taskdog) by [Kohei-Wada](https://github.com/Kohei-Wada). It's an exciting project with a lot to offer.\n\nTerminal task manager with intelligent schedule optimization.Keyboard-only. No dragging, no micromanagement.\n",
      "summary": "Just starred taskdog by Kohei-Wada. It's an exciting project with a lot to offer.",
      "date_published": "2026-02-27T21:08:43Z",
      "date_modified": "2026-02-27T21:08:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-941/",
      "url": "https://go.waylonwalker.com/thought-941/",
      "title": "💭 jack cuts block in half",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/jack/status/2027129697092731343?s=20\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOne of the well worded shitty messages I’ve seen, good severance, help, timeline to cut off coms.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewe’re not making this decision because we’re in trouble. our business is strong. gross profit continues to grow, we continue to serve more and more customers, and profitability is improving. but something has changed. we’re already seeing that the intelligence tools we’re creating and using, paired with smaller and flatter teams, are enabling a new way of working which fundamentally changes what it means to build and run a company. and that’s accelerating rapidly.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eMuch better than the get rid of people cause AI can do the work.  Honestly I feel this though.  I was just talking with some colleages how do we divvy work in the age of agents without just constantly walking on each other.  If each of us is now an architect who is managing teams of junior agents under us it feels MUCH different than before.\u003c/p\u003e\n\u003cp\u003eI’m far from working in a large software org like this and I’m feeling it.  I only imagine that it gets worse the more people that have to orchestrate around each other.\u003c/p\u003e\n\u003cp\u003eAppreciate the honesty and transparance, but man this sucks for those impacted and the job market right now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/jack/status/2027129697092731343?s=20\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOne of the well worded shitty messages I've seen, good severance, help, timeline to cut off coms.\n\n\u003e we're not making this decision because we're in trouble. our business is strong. gross profit continues to grow, we continue to serve more and more customers, and profitability is improving. but something has changed. we're already seeing that the intelligence tools we’re creating and using, paired with smaller and flatter teams, are enabling a new way of working which fundamentally changes what it means to build and run a company. and that's accelerating rapidly.\n\nMuch better than the get rid of people cause AI can do the work.  Honestly I feel this though.  I was just talking with some colleages how do we divvy work in the age of agents without just constantly walking on each other.  If each of us is now an architect who is managing teams of junior agents under us it feels MUCH different than before.\n\nI'm far from working in a large software org like this and I'm feeling it.  I only imagine that it gets worse the more people that have to orchestrate around each other.\n\nAppreciate the honesty and transparance, but man this sucks for those impacted and the job market right now.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/jack/status/2027129697092731343?s=20",
      "date_published": "2026-02-27T11:29:10Z",
      "date_modified": "2026-02-27T11:29:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/torvalds-linux/",
      "url": "https://go.waylonwalker.com/torvalds-linux/",
      "title": "⭐ torvalds linux",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/torvalds/linux\" 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\"\u003elinux\u003c/a\u003e by \u003ca href=\"https://github.com/torvalds\" 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\"\u003etorvalds\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eLinux kernel source tree\u003c/p\u003e\n",
      "content_text": "\nJust starred [linux](https://github.com/torvalds/linux) by [torvalds](https://github.com/torvalds). It's an exciting project with a lot to offer.\n\nLinux kernel source tree\n",
      "summary": "Just starred linux by torvalds. It's an exciting project with a lot to offer.",
      "date_published": "2026-02-25T16:09:09Z",
      "date_modified": "2026-02-25T16:09:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-940/",
      "url": "https://go.waylonwalker.com/thought-940/",
      "title": "💭 FFmpeg video crop",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tools.simonwillison.net/ffmpeg-crop\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/tools.simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/tools.simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFFmpeg video crop\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etools.simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis was the inspiration for the next update in dropper that became a full clip editor.  The one that I’ve long wanted, but forgotten about.  It’s going to include this cropper, resize, image extractor, and trimmer.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tools.simonwillison.net/ffmpeg-crop\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFFmpeg video crop\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etools.simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis was the inspiration for the next update in dropper that became a full clip editor.  The one that I've long wanted, but forgotten about.  It's going to include this cropper, resize, image extractor, and trimmer.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tools.simonwillison.net/ffmpeg-crop",
      "date_published": "2026-02-25T08:29:59Z",
      "date_modified": "2026-02-25T08:29:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-939/",
      "url": "https://go.waylonwalker.com/thought-939/",
      "title": "💭 Tiny Tool Town 🏘️",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.tinytooltown.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.tinytooltown.com/og-image.png\" alt=\"Tiny Tool Town 🏘️ — A delightful showcase for free, fun \u0026amp; open source tiny tools. Stupid-delightful software made with love.\" loading=\"lazy\"/ data-glightbox=\"description: Tiny Tool Town 🏘️ — A delightful showcase for free, fun \u0026amp; open source tiny tools. Stupid-delightful software made with love.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTiny Tool Town 🏘️\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA delightful showcase for free, fun \u0026amp; open source tiny tools. Stupid-delightful software made with love.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTiny Tool Town · tinytooltown.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eLearned about this one from the @stipete \u003ca href=\"https://youtu.be/Wm7tsiJ1nIo?si=_qvZaR5SPWozBjrY\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/youtu.be.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/youtu.be.png\" class=\"has-avatar  has-avatar-before\"\u003einterview\u003c/a\u003e @scotthanselman did on YouTube.  This is proof that the internet is alive.  It’s such web 1.0 nostalgia to see that people can just build things!  Did you know that you can literally just build things and make them exist?  You don’t need users, You don’t need a big platform, you can just make something into existance.  It seems like something we have forgotten through web 2.0 where everything as become 4 major apps all linking to each other and trying to hoard all of the attention. Scroll through tehre are some really cool apps, probably nothing that has the polish you want, or is going to change your world.  What these apps have more than anything you’ve probably used in the recent years, is inspiration.  Its xyz, but the way I wanted, or with my little twist.  And no one else has to like it but me because I’m the user.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.tinytooltown.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.tinytooltown.com/og-image.png\" alt=\"Tiny Tool Town 🏘️ — A delightful showcase for free, fun \u0026amp; open source tiny tools. Stupid-delightful software made with love.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTiny Tool Town 🏘️\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA delightful showcase for free, fun \u0026amp; open source tiny tools. Stupid-delightful software made with love.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTiny Tool Town \u0026middot; tinytooltown.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLearned about this one from the @stipete [interview](https://youtu.be/Wm7tsiJ1nIo?si=_qvZaR5SPWozBjrY) @scotthanselman did on YouTube.  This is proof that the internet is alive.  It's such web 1.0 nostalgia to see that people can just build things!  Did you know that you can literally just build things and make them exist?  You don't need users, You don't need a big platform, you can just make something into existance.  It seems like something we have forgotten through web 2.0 where everything as become 4 major apps all linking to each other and trying to hoard all of the attention. Scroll through tehre are some really cool apps, probably nothing that has the polish you want, or is going to change your world.  What these apps have more than anything you've probably used in the recent years, is inspiration.  Its xyz, but the way I wanted, or with my little twist.  And no one else has to like it but me because I'm the user.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.tinytooltown.com/",
      "date_published": "2026-02-25T08:27:11Z",
      "date_modified": "2026-02-25T08:27:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-938/",
      "url": "https://go.waylonwalker.com/thought-938/",
      "title": "💭 FancyGist",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fancygist.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/og.png\" alt=\"FancyGist\" loading=\"lazy\"/ data-glightbox=\"description: FancyGist\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFancyGist\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efancygist.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI saw this in @cassido’s newsletter this week and had to give it a run.  I despise that there is no dark mode and it insists on burning my retinas 😤.  But really this is an absolute beate of a web based markdown editor, I love the command mode to press slash and it just pops out in this whimsical animation ready for me to pick what I want.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/74f0ac1e-ac50-4939-8bba-4698a8043b25.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/74f0ac1e-ac50-4939-8bba-4698a8043b25.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/74f0ac1e-ac50-4939-8bba-4698a8043b25.mp4\" type=\"video/mp4\"\u003eYour browser does not support the video tag.\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fancygist.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/og.png\" alt=\"FancyGist\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFancyGist\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efancygist.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI saw this in @cassido's newsletter this week and had to give it a run.  I despise that there is no dark mode and it insists on burning my retinas 😤.  But really this is an absolute beate of a web based markdown editor, I love the command mode to press slash and it just pops out in this whimsical animation ready for me to pick what I want.\n\n![](https://dropper.waylonwalker.com/file/74f0ac1e-ac50-4939-8bba-4698a8043b25.mp4)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fancygist.com/",
      "date_published": "2026-02-25T08:07:40Z",
      "date_modified": "2026-02-25T08:07:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-937/",
      "url": "https://go.waylonwalker.com/thought-937/",
      "title": "💭 Reply guy",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Feb/23/reply-guy/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReply guy\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe latest scourge of Twitter is AI bots that reply to your tweets with generic, banal commentary slop, often accompanied by a question to \u0026#34;drive engagement\u0026#34; and waste as much …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI had no idea there were such things as “reply guy” as a service.  I can see this as a really genuine thing where brands want to genuinely engage with their communities, quickly being taken over by slop bros to ruin everything.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Feb/23/reply-guy/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReply guy\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe latest scourge of Twitter is AI bots that reply to your tweets with generic, banal commentary slop, often accompanied by a question to \u0026#34;drive engagement\u0026#34; and waste as much …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI had no idea there were such things as \"reply guy\" as a service.  I can see this as a really genuine thing where brands want to genuinely engage with their communities, quickly being taken over by slop bros to ruin everything.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2026/Feb/23/reply-guy/#atom-everything",
      "date_published": "2026-02-23T08:39:41Z",
      "date_modified": "2026-02-23T08:39:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sass",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-936/",
      "url": "https://go.waylonwalker.com/thought-936/",
      "title": "💭 Smaller and dumber - daverupert.com",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2026/02/smaller-and-dumber/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/daverupert.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/daverupert.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSmaller and dumber\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf I can make it smaller, I should.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com · daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eImportant things to remember in the age of cheap code.  More code, not always more better.  More code mean, more risk, more maintenance, harder to change.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2026/02/smaller-and-dumber/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSmaller and dumber\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf I can make it smaller, I should.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com \u0026middot; daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nImportant things to remember in the age of cheap code.  More code, not always more better.  More code mean, more risk, more maintenance, harder to change.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daverupert.com/2026/02/smaller-and-dumber/",
      "date_published": "2026-02-23T08:36:05Z",
      "date_modified": "2026-02-23T08:36:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-935/",
      "url": "https://go.waylonwalker.com/thought-935/",
      "title": "💭 An attempt at a balanced perspective on AI - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"FC7YGG0FzZ0\" title=\"An attempt at a balanced perspective on AI\" playlabel=\"Play: An attempt at a balanced perspective on AI\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTHIS, THIS is how most people are feeling about AI right now.  Theres lots of “oh ai bad”, “but ai help”, “but ai company sleezy”.  Cassidy did a fantastic job summarizing how most of us are feeling.  Ending with well at the end of the day, I can’t do anything about the bad, the best thing I can do is learn how to embrace the good cause it aint going away any time soon.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"FC7YGG0FzZ0\" title=\"An attempt at a balanced perspective on AI\" playlabel=\"Play: An attempt at a balanced perspective on AI\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTHIS, THIS is how most people are feeling about AI right now.  Theres lots of \"oh ai bad\", \"but ai help\", \"but ai company sleezy\".  Cassidy did a fantastic job summarizing how most of us are feeling.  Ending with well at the end of the day, I can't do anything about the bad, the best thing I can do is learn how to embrace the good cause it aint going away any time soon.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=FC7YGG0FzZ0",
      "date_published": "2026-02-22T21:09:05Z",
      "date_modified": "2026-02-22T21:09:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-934/",
      "url": "https://go.waylonwalker.com/thought-934/",
      "title": "💭 Post by @castpixel.bsky.social — Bluesky",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/castpixel.bsky.social/post/3mf52azn5oc2h\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:oybl65tqxhrz2kudyddnfsll/bafkreieol42oec5cxatj3xxpkekepoyhjcxkkwcom4tzyfuiu3vk7gj7ia\" alt=\"castpixel  ⚧️⚢ (@castpixel.bsky.social) — I made a tool that turns PCB designs into 3D-printable molds. you sandwich copper tape between the parts, sand the ridges, and you have a real working PCB. no etching, no chemicals. I am losing my mind\n\u0026lt;p\u0026gt;castpixel.itch.io/pcb-forge\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: castpixel  ⚧️⚢ (@castpixel.bsky.social) — I made a tool that turns PCB designs into 3D-printable molds. you sandwich copper tape between the parts, sand the ridges, and you have a real working PCB. no etching, no chemicals. I am losing my mind\n\u0026lt;p\u0026gt;castpixel.itch.io/pcb-forge\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003ecastpixel  ⚧️⚢ (@castpixel.bsky.social)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eI made a tool that turns PCB designs into 3D-printable molds. you sandwich copper tape between the parts, sand the ridges, and you have a real working PCB. no etching, no chemicals. I am losing my …\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a wild way to build prototype pcb’s, so cool and creative.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/castpixel.bsky.social/post/3mf52azn5oc2h\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:oybl65tqxhrz2kudyddnfsll/bafkreieol42oec5cxatj3xxpkekepoyhjcxkkwcom4tzyfuiu3vk7gj7ia\" alt=\"castpixel  ⚧️⚢ (@castpixel.bsky.social) — I made a tool that turns PCB designs into 3D-printable molds. you sandwich copper tape between the parts, sand the ridges, and you have a real working PCB. no etching, no chemicals. I am losing my mind\n\ncastpixel.itch.io/pcb-forge\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecastpixel  ⚧️⚢ (@castpixel.bsky.social)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI made a tool that turns PCB designs into 3D-printable molds. you sandwich copper tape between the parts, sand the ridges, and you have a real working PCB. no etching, no chemicals. I am losing my ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a wild way to build prototype pcb's, so cool and creative.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/castpixel.bsky.social/post/3mf52azn5oc2h",
      "date_published": "2026-02-19T17:11:42Z",
      "date_modified": "2026-02-19T17:11:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "pcb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-933/",
      "url": "https://go.waylonwalker.com/thought-933/",
      "title": "💭 Session: Skate Sim on X: \"Our long-awaited Skate Core Update i...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/SessionGame/status/2024469214396838140\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHad 10 minutes to play with the new session updates this afternoon and it feels so much smoother.  I can definitely feel it even as a casual user.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/SessionGame/status/2024469214396838140\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHad 10 minutes to play with the new session updates this afternoon and it feels so much smoother.  I can definitely feel it even as a casual user.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/SessionGame/status/2024469214396838140",
      "date_published": "2026-02-19T17:10:18Z",
      "date_modified": "2026-02-19T17:10:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "session-skate-sim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-932/",
      "url": "https://go.waylonwalker.com/thought-932/",
      "title": "💭 trash on X: \"loving the state of development right now https:/...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/trashh_dev/status/2024476878015468027\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThere are so many config files right now, glad to see some standards coming in around Agents.md, but so much is still specialized to a whole host of tools that have not been standardized on yet.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/trashh_dev/status/2024476878015468027\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThere are so many config files right now, glad to see some standards coming in around Agents.md, but so much is still specialized to a whole host of tools that have not been standardized on yet.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/trashh_dev/status/2024476878015468027",
      "date_published": "2026-02-19T17:07:34Z",
      "date_modified": "2026-02-19T17:07:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-931/",
      "url": "https://go.waylonwalker.com/thought-931/",
      "title": "💭 Silksong Demastered",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nekodot.itch.io/silksong-nes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://img.itch.zone/aW1nLzI1NTY5MDUxLnBuZw==/original/4hxpLH.png\" alt=\"Silksong: Demastered by Nekodot — Hollow Knight: Silksong in the classic NES-style!\" loading=\"lazy\"/ data-glightbox=\"description: Silksong: Demastered by Nekodot — Hollow Knight: Silksong in the classic NES-style!\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSilksong: Demastered by Nekodot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHollow Knight: Silksong in the classic NES-style!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eitch.io · nekodot.itch.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is an abolute banger of a game on itch.  It nails the nes aesthetic while keeping true to the modern silksong movements.  You can play through the first boss Moss Mother, and where you start the first ascend into Bone Bottom.  I was in shock when I discovered the little climb effect hornet does when you just cant quite make a jump, the hold jump for height is on point.  Her downstrike with the hunters crest is perfect.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nekodot.itch.io/silksong-nes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://img.itch.zone/aW1nLzI1NTY5MDUxLnBuZw==/original/4hxpLH.png\" alt=\"Silksong: Demastered by Nekodot — Hollow Knight: Silksong in the classic NES-style!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSilksong: Demastered by Nekodot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHollow Knight: Silksong in the classic NES-style!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eitch.io \u0026middot; nekodot.itch.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is an abolute banger of a game on itch.  It nails the nes aesthetic while keeping true to the modern silksong movements.  You can play through the first boss Moss Mother, and where you start the first ascend into Bone Bottom.  I was in shock when I discovered the little climb effect hornet does when you just cant quite make a jump, the hold jump for height is on point.  Her downstrike with the hunters crest is perfect.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://nekodot.itch.io/silksong-nes",
      "date_published": "2026-02-17T18:20:18Z",
      "date_modified": "2026-02-17T18:20:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-930/",
      "url": "https://go.waylonwalker.com/thought-930/",
      "title": "💭 Blueskii on X: \"this underground creator named \"sN0UK\" made Qu...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/LayoutPerson/status/2023551519375900957\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWyatt would absolutely love this banger of a level.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://x.com/i/status/2023551519375900957\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://x.com/i/status/2023551519375900957\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/LayoutPerson/status/2023551519375900957\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWyatt would absolutely love this banger of a level.\n\n![](https://x.com/i/status/2023551519375900957)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/LayoutPerson/status/2023551519375900957",
      "date_published": "2026-02-17T08:02:51Z",
      "date_modified": "2026-02-17T08:02:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-929/",
      "url": "https://go.waylonwalker.com/thought-929/",
      "title": "💭 Home / X",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/2023710298201350606/photo/1\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTo the untrained eye this passes as any normal gui editor.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/86d45a22-9ed4-4f14-8070-5f0cadee9bad.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/file/86d45a22-9ed4-4f14-8070-5f0cadee9bad.webp\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/2023710298201350606/photo/1\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTo the untrained eye this passes as any normal gui editor.\n\n![](https://dropper.waylonwalker.com/file/86d45a22-9ed4-4f14-8070-5f0cadee9bad.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/dhh/status/2023710298201350606/photo/1",
      "date_published": "2026-02-17T07:58:16Z",
      "date_modified": "2026-02-17T07:58:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "terminal",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-928/",
      "url": "https://go.waylonwalker.com/thought-928/",
      "title": "💭 uvx.sh | Astral",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://uvx.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003euvx.sh | Astral\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInstall Python tools with a single command. Powered by uv.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003euvx.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eastral silently dropped a clever uvx.sh to help builders reach a wider audience, no longer does a user need to have python installed prior to installing a python cli. It does have a hard requirement on having curl or wget available.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://uvx.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003euvx.sh | Astral\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInstall Python tools with a single command. Powered by uv.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003euvx.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nastral silently dropped a clever uvx.sh to help builders reach a wider audience, no longer does a user need to have python installed prior to installing a python cli. It does have a hard requirement on having curl or wget available.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://uvx.sh/",
      "date_published": "2026-02-16T14:21:29Z",
      "date_modified": "2026-02-16T14:21:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "uv",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-927/",
      "url": "https://go.waylonwalker.com/thought-927/",
      "title": "💭 POV: You install Clawdbot on VPS - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bof8TkZkr1I\" title=\"POV: You install Clawdbot on VPS\" playlabel=\"Play: POV: You install Clawdbot on VPS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eUse a linux vps, It’s easy, just follow these simple instructions.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bof8TkZkr1I\" title=\"POV: You install Clawdbot on VPS\" playlabel=\"Play: POV: You install Clawdbot on VPS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nUse a linux vps, It's easy, just follow these simple instructions.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/bof8TkZkr1I",
      "date_published": "2026-02-16T10:22:40Z",
      "date_modified": "2026-02-16T10:22:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-926/",
      "url": "https://go.waylonwalker.com/thought-926/",
      "title": "💭 POV: Your AI Models change faster than JS Frameworks - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"vGKC9LpGnOQ\" title=\"POV: Your AI Models change faster than JS Frameworks\" playlabel=\"Play: POV: Your AI Models change faster than JS Frameworks\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWe are living through the js framework wars for agents and llms now.  We will look back on this with clarity, and wonder why we wasted time with things like graphql, and why we couldn’t see the real winners from the start.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"vGKC9LpGnOQ\" title=\"POV: Your AI Models change faster than JS Frameworks\" playlabel=\"Play: POV: Your AI Models change faster than JS Frameworks\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWe are living through the js framework wars for agents and llms now.  We will look back on this with clarity, and wonder why we wasted time with things like graphql, and why we couldn't see the real winners from the start.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/vGKC9LpGnOQ",
      "date_published": "2026-02-16T10:21:52Z",
      "date_modified": "2026-02-16T10:21:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-925/",
      "url": "https://go.waylonwalker.com/thought-925/",
      "title": "💭 OpenClaw: The Viral AI Agent that Broke the Internet - Peter S...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YFjfBk8HI5o\" title=\"OpenClaw: The Viral AI Agent that Broke the Internet - Peter Steinberger | Lex Fridman Podcast #491\" playlabel=\"Play: OpenClaw: The Viral AI Agent that Broke the Internet - Peter Steinberger | Lex Fridman Podcast #491\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eSuch a good interview @lexfridman is such a talented interview.  It’s so cool to see the other side of this.  For weeks we’ve heard about the story of the name change, we’ve seen everyone shitting on the security model, buying up all the mac minis in existance, fear mongering not to install this thing.  @steipete.me has such a cool story from the beginning talking about making this thing fun and exciting.  Giving it a personality that is not “You are absolutely right”.  The story of changing the name twice, and getting pwnd on every step the first time and nailing it the second time is incredible.  Dude is having fun trying to make the thing he wants in the world exist.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YFjfBk8HI5o\" title=\"OpenClaw: The Viral AI Agent that Broke the Internet - Peter Steinberger | Lex Fridman Podcast #491\" playlabel=\"Play: OpenClaw: The Viral AI Agent that Broke the Internet - Peter Steinberger | Lex Fridman Podcast #491\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nSuch a good interview @lexfridman is such a talented interview.  It's so cool to see the other side of this.  For weeks we've heard about the story of the name change, we've seen everyone shitting on the security model, buying up all the mac minis in existance, fear mongering not to install this thing.  @steipete.me has such a cool story from the beginning talking about making this thing fun and exciting.  Giving it a personality that is not \"You are absolutely right\".  The story of changing the name twice, and getting pwnd on every step the first time and nailing it the second time is incredible.  Dude is having fun trying to make the thing he wants in the world exist.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=YFjfBk8HI5o",
      "date_published": "2026-02-16T10:19:08Z",
      "date_modified": "2026-02-16T10:19:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "agents",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/double-gutter/",
      "url": "https://go.waylonwalker.com/double-gutter/",
      "title": "double gutter",
      "content_html": "\u003cp\u003eI keep forgetting about the double gutter problem with nested containers.  When\nyou put padding on a parent and the child also has padding, you get twice the\nspacing you wanted.\u003c/p\u003e\n\u003ch2 id=\"the-problem\"\u003eThe Problem \u003ca href=\"#the-problem\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003econtainer\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003echild\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow your content is 4rem from the edge.  Not what I meant at all.\u003c/p\u003e\n\u003ch2 id=\"the-fix\"\u003eThe Fix \u003ca href=\"#the-fix\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEither remove padding from the parent or use \u003ccode\u003ebox-sizing: border-box\u003c/code\u003e and plan\nfor it.  I usually just drop the parent padding when I realize what I have done.\u003c/p\u003e\n",
      "content_text": "\nI keep forgetting about the double gutter problem with nested containers.  When\nyou put padding on a parent and the child also has padding, you get twice the\nspacing you wanted.\n\n## The Problem\n\n```css\n.container {\n  padding: 2rem;\n}\n\n.child {\n  padding: 2rem;\n}\n```\n\nNow your content is 4rem from the edge.  Not what I meant at all.\n\n## The Fix\n\nEither remove padding from the parent or use `box-sizing: border-box` and plan\nfor it.  I usually just drop the parent padding when I realize what I have done.",
      "summary": "I keep forgetting about the double gutter problem with nested containers. When you put padding on a parent and the child also has padding, you get twice the...",
      "date_published": "2026-02-14T09:12:42Z",
      "date_modified": "2026-02-14T09:12:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-924/",
      "url": "https://go.waylonwalker.com/thought-924/",
      "title": "💭 Naya Connect | Hackaday",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hackaday.com/tag/naya-connect/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://s0.wp.com/_si/?t=eyJpbWciOiJodHRwczpcL1wvaGFja2FkYXkuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wN1wvaGFja2FkYXktbG9nby13aXRoLXRleHQtb3BlbmdyYXBoLWRlZmF1bHQtaW1hZ2UuanBnIiwidHh0IjoiSGFja2FkYXkiLCJ0ZW1wbGF0ZSI6ImhpZ2h3YXkiLCJmb250IjoiIiwiYmxvZ19pZCI6MTU2NjcwMTc3fQ.kVPxWrsIQyGdD1cPoxYvzP1mD56qtpkNpW1nAFiZiIgMQ\" alt=\"Naya Connect – Hackaday\" loading=\"lazy\"/ data-glightbox=\"description: Naya Connect – Hackaday\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNaya Connect – Hackaday\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHackaday · hackaday.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe idea of adjustable key caps to mutate your board into something that really fits you, how you type, how your fingers move, is an absolute banger.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hackaday.com/tag/naya-connect/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://s0.wp.com/_si/?t=eyJpbWciOiJodHRwczpcL1wvaGFja2FkYXkuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIwXC8wN1wvaGFja2FkYXktbG9nby13aXRoLXRleHQtb3BlbmdyYXBoLWRlZmF1bHQtaW1hZ2UuanBnIiwidHh0IjoiSGFja2FkYXkiLCJ0ZW1wbGF0ZSI6ImhpZ2h3YXkiLCJmb250IjoiIiwiYmxvZ19pZCI6MTU2NjcwMTc3fQ.kVPxWrsIQyGdD1cPoxYvzP1mD56qtpkNpW1nAFiZiIgMQ\" alt=\"Naya Connect – Hackaday\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNaya Connect – Hackaday\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHackaday \u0026middot; hackaday.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe idea of adjustable key caps to mutate your board into something that really fits you, how you type, how your fingers move, is an absolute banger.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hackaday.com/tag/naya-connect/",
      "date_published": "2026-02-12T21:39:21Z",
      "date_modified": "2026-02-12T21:39:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keeb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-923/",
      "url": "https://go.waylonwalker.com/thought-923/",
      "title": "💭 Background Patterns with CSS `corner-radius` – Frontend Master...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://frontendmasters.com/blog/background-patterns-with-css-corner-radius/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://frontendmasters.com/blog/wp-json/social-image-generator/v1/image/8505\" alt=\"Background Patterns with CSS `corner-radius` – Frontend Masters Blog — You might need to know this someday: you can style a div, put the div into SVG, then put the SVG in to CSS and use it as a repeating background.\" loading=\"lazy\"/ data-glightbox=\"description: Background Patterns with CSS `corner-radius` – Frontend Masters Blog — You might need to know this someday: you can style a div, put the div into SVG, then put the SVG in to CSS and use it as a repeating background.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackground Patterns with CSS `corner-radius` – Frontend Masters Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou might need to know this someday: you can style a div, put the div into SVG, then put the SVG in to CSS and use it as a repeating background.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efrontendmasters.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThese patterns are really good.  I like a good repeating background on a website.  Takes me back to the old days of web, but with a nice crispness that was never there on sites of old\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://frontendmasters.com/blog/background-patterns-with-css-corner-radius/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://frontendmasters.com/blog/wp-json/social-image-generator/v1/image/8505\" alt=\"Background Patterns with CSS `corner-radius` – Frontend Masters Blog — You might need to know this someday: you can style a div, put the div into SVG, then put the SVG in to CSS and use it as a repeating background.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackground Patterns with CSS `corner-radius` – Frontend Masters Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou might need to know this someday: you can style a div, put the div into SVG, then put the SVG in to CSS and use it as a repeating background.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efrontendmasters.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThese patterns are really good.  I like a good repeating background on a website.  Takes me back to the old days of web, but with a nice crispness that was never there on sites of old \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://frontendmasters.com/blog/background-patterns-with-css-corner-radius/",
      "date_published": "2026-02-10T08:41:45Z",
      "date_modified": "2026-02-10T08:41:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pydantic-monty/",
      "url": "https://go.waylonwalker.com/pydantic-monty/",
      "title": "⭐ pydantic monty",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/pydantic/monty\" 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\"\u003emonty\u003c/a\u003e by \u003ca href=\"https://github.com/pydantic\" 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\"\u003epydantic\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA minimal, secure Python interpreter written in Rust for use by AI\u003c/p\u003e\n",
      "content_text": "\nCheck out [monty](https://github.com/pydantic/monty) by [pydantic](https://github.com/pydantic). It's a well-crafted project with great potential.\n\nA minimal, secure Python interpreter written in Rust for use by AI\n",
      "summary": "Check out monty by pydantic. It's a well-crafted project with great potential.",
      "date_published": "2026-02-09T03:53:14Z",
      "date_modified": "2026-02-09T03:53:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nextlevelbuilder-ui-ux-pro-max-skill/",
      "url": "https://go.waylonwalker.com/nextlevelbuilder-ui-ux-pro-max-skill/",
      "title": "⭐ nextlevelbuilder ui-ux-pro-max-skill",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/nextlevelbuilder\" 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\"\u003enextlevelbuilder\u003c/a\u003e and their project \u003ca href=\"https://github.com/nextlevelbuilder/ui-ux-pro-max-skill\" 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\"\u003eui-ux-pro-max-skill\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn AI SKILL that provide design intelligence for building professional UI/UX multiple platforms\u003c/p\u003e\n",
      "content_text": "\nCheck out [nextlevelbuilder](https://github.com/nextlevelbuilder) and their project [ui-ux-pro-max-skill](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill).\n\nAn AI SKILL that provide design intelligence for building professional UI/UX multiple platforms\n",
      "summary": "Check out nextlevelbuilder and their project ui-ux-pro-max-skill.",
      "date_published": "2026-02-06T20:18:21Z",
      "date_modified": "2026-02-06T20:18:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vercel-labs-agent-browser/",
      "url": "https://go.waylonwalker.com/vercel-labs-agent-browser/",
      "title": "⭐ vercel-labs agent-browser",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/vercel-labs/agent-browser\" 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\"\u003eagent-browser\u003c/a\u003e, created by \u003ca href=\"https://github.com/vercel-labs\" 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\"\u003evercel-labs\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBrowser automation CLI for AI agents\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [agent-browser](https://github.com/vercel-labs/agent-browser), created by [vercel-labs](https://github.com/vercel-labs).\n\nBrowser automation CLI for AI agents\n",
      "summary": "If you're into interesting projects, don't miss out on agent-browser, created by vercel-labs.",
      "date_published": "2026-02-05T22:20:08Z",
      "date_modified": "2026-02-05T22:20:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/diff-kubernetes-manifest-with-cluster/",
      "url": "https://go.waylonwalker.com/diff-kubernetes-manifest-with-cluster/",
      "title": "diff kubernetes manifest with cluster",
      "content_html": "\u003cp\u003eLike a dufus this morning I did a hard reset on a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo for getting I was\nworking on a manifest for.  You see I generally use argo, but occasionally I\nhave no idea what I am doing or want yet and I start raw doggin it, fully aware\nthat I’m going to just nuke this namespace before getting it into a proper\nargocd.\u003c/p\u003e\n\u003cp\u003eI was overjoyed when I found out that you can diff your manifests with live\nproduction using the \u003ccode\u003ekubectl diff\u003c/code\u003e command.  It uses standard diff so you can\nbring all your fancy diff viewers you like.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# regular manifest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -f k8s/shots -n shot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# kustomize\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -k k8s -n go-waylonwalker-com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# using a fancy diff viewer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -f k8s/shots -n shot \u003cspan class=\"p\"\u003e|\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# using an even fancier diff viewer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# pinkies out for this one\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -f k8s/shots -n shot \u003cspan class=\"p\"\u003e|\u003c/span\u003e delta --diff-so-fancy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow I can get those changes back that I thought I lost, and apply updates with\nconfidence knowing what is about to change.\u003c/p\u003e\n",
      "content_text": "\nLike a dufus this morning I did a hard reset on a git repo for getting I was\nworking on a manifest for.  You see I generally use argo, but occasionally I\nhave no idea what I am doing or want yet and I start raw doggin it, fully aware\nthat I'm going to just nuke this namespace before getting it into a proper\nargocd.\n\nI was overjoyed when I found out that you can diff your manifests with live\nproduction using the `kubectl diff` command.  It uses standard diff so you can\nbring all your fancy diff viewers you like.\n\n``` bash\n# regular manifest\nkubectl diff -f k8s/shots -n shot\n# kustomize\nkubectl diff -k k8s -n go-waylonwalker-com\n# using a fancy diff viewer\nkubectl diff -f k8s/shots -n shot | delta\n# using an even fancier diff viewer\n# pinkies out for this one\nkubectl diff -f k8s/shots -n shot | delta --diff-so-fancy\n```\n\nNow I can get those changes back that I thought I lost, and apply updates with\nconfidence knowing what is about to change.\n",
      "summary": "Like a dufus this morning I did a hard reset on a git repo for getting I was working on a manifest for. You see I generally use argo, but occasionally I have...",
      "date_published": "2026-02-05T09:37:39Z",
      "date_modified": "2026-02-05T09:37:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-922/",
      "url": "https://go.waylonwalker.com/thought-922/",
      "title": "💭 The shovelware cometh",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jerodsanto.net/2026/02/the-shovelware-cometh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jerodsanto.net/share.png\" alt=\"The shovelware cometh — In September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\u0026lt;p\u0026gt;If so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: The shovelware cometh — In September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\u0026lt;p\u0026gt;If so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eThe shovelware cometh\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eIn September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eIf so many developers are so extraordinarily productive usi…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003ejerodsanto.net\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eNot surprising theirs a lag, between the models getting better, the tools getting better, and the masses getting better at using them, it takes time.  This is still quite a hockey stick.  I’m wondering how many are not posting on Show HN embarrassed they built something they know nothing about and afraid to get questions.  I have no idea how anyone would get this ratio, but if I were a betting man, Id bet the ratio of build/show went way up.  Plus we are probably getting a ton of people who have never heard of HN start building cool bespoke things for themselves and thats it, they use it, they love it, they might tell/show a friend.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jerodsanto.net/2026/02/the-shovelware-cometh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jerodsanto.net/share.png\" alt=\"The shovelware cometh — In September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\nIf so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe shovelware cometh\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\nIf so many developers are so extraordinarily productive usi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejerodsanto.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNot surprising theirs a lag, between the models getting better, the tools getting better, and the masses getting better at using them, it takes time.  This is still quite a hockey stick.  I'm wondering how many are not posting on Show HN embarrassed they built something they know nothing about and afraid to get questions.  I have no idea how anyone would get this ratio, but if I were a betting man, Id bet the ratio of build/show went way up.  Plus we are probably getting a ton of people who have never heard of HN start building cool bespoke things for themselves and thats it, they use it, they love it, they might tell/show a friend.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jerodsanto.net/2026/02/the-shovelware-cometh/",
      "date_published": "2026-02-03T21:45:51Z",
      "date_modified": "2026-02-03T21:45:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-921/",
      "url": "https://go.waylonwalker.com/thought-921/",
      "title": "💭 The shovelware cometh",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jerodsanto.net/2026/02/the-shovelware-cometh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jerodsanto.net/share.png\" alt=\"The shovelware cometh — In September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\u0026lt;p\u0026gt;If so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: The shovelware cometh — In September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\u0026lt;p\u0026gt;If so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eThe shovelware cometh\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eIn September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eIf so many developers are so extraordinarily productive usi…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003ejerodsanto.net\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eNot surprising theirs a lag, between the models getting better, the tools getting better, and the masses getting better at using them, it takes time.  This is still quite a hockey stick.  I’m wondering how many are not posting on Show HN embarrassed they built something they know nothing about and afraid to get questions.  I have no idea how anyone would get this ratio, but if I were a betting man, Id bet the ratio of build/show went way up.  Plus we are probably getting a ton of people who have never heard of HN start building cool bespoke things for themselves and thats it, they use it, they love it, they might tell/show a friend.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jerodsanto.net/2026/02/the-shovelware-cometh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jerodsanto.net/share.png\" alt=\"The shovelware cometh — In September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\nIf so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe shovelware cometh\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn September of last year, I covered a post by Mike Judge arguing that AI coding claims don’t add up, in which he asked this question:\n\nIf so many developers are so extraordinarily productive usi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejerodsanto.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNot surprising theirs a lag, between the models getting better, the tools getting better, and the masses getting better at using them, it takes time.  This is still quite a hockey stick.  I'm wondering how many are not posting on Show HN embarrassed they built something they know nothing about and afraid to get questions.  I have no idea how anyone would get this ratio, but if I were a betting man, Id bet the ratio of build/show went way up.  Plus we are probably getting a ton of people who have never heard of HN start building cool bespoke things for themselves and thats it, they use it, they love it, they might tell/show a friend.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jerodsanto.net/2026/02/the-shovelware-cometh/",
      "date_published": "2026-02-03T21:45:51Z",
      "date_modified": "2026-02-03T21:45:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-920/",
      "url": "https://go.waylonwalker.com/thought-920/",
      "title": "💭 dax on X: \"finally got around to setting up an always on openc...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/thdxr/status/2017691649384620057\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI tried this flow [of running an opencode server on tailscale] on day one of getting opencode, I wanted to prompt from my phone while were were  running lights at the theater. It kinda worked, but the ui was really bad on phone, hard to use and the experience overall–it felt buggy.  Happy to see they are making improvements and it might now be ready for some real use.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dropper.wayl.one/file/9065fcb2-5e40-479c-967e-498bc9bb6a4f.mp4\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dropper.wayl.one.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dropper.wayl.one.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://dropper.wayl.one/file/9065fcb2-5e40-479c-967e-498bc9bb6a4f.mp4\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/thdxr/status/2017691649384620057\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI tried this flow [of running an opencode server on tailscale] on day one of getting opencode, I wanted to prompt from my phone while were were  running lights at the theater. It kinda worked, but the ui was really bad on phone, hard to use and the experience overall--it felt buggy.  Happy to see they are making improvements and it might now be ready for some real use.\n\nhttps://dropper.wayl.one/file/9065fcb2-5e40-479c-967e-498bc9bb6a4f.mp4\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/thdxr/status/2017691649384620057",
      "date_published": "2026-02-03T08:18:39Z",
      "date_modified": "2026-02-03T08:18:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "ai",
        "llm",
        "opencode",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-919/",
      "url": "https://go.waylonwalker.com/thought-919/",
      "title": "💭 Short Month, Big Ideas (February 2026 Wallpapers Edition) — Sm...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.smashingmagazine.com/2026/01/desktop-wallpaper-calendars-february-2026/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://files.smashing.media/articles/desktop-wallpaper-calendars-february-2026/feb-26-eternal-tech-preview-opt.png\" alt=\"Short Month, Big Ideas (February 2026 Wallpapers Edition) — Smashing Magazine — Let’s make the most of the shortest month of the year with a new collection of desktop wallpapers that are sure to bring a smile to your face — and maybe spark your creativity, too. All of them were designed with love by the community for the community and can be downloaded for free. Happy February!\" loading=\"lazy\"/ data-glightbox=\"description: Short Month, Big Ideas (February 2026 Wallpapers Edition) — Smashing Magazine — Let’s make the most of the shortest month of the year with a new collection of desktop wallpapers that are sure to bring a smile to your face — and maybe spark your creativity, too. All of them were designed with love by the community for the community and can be downloaded for free. Happy February!\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eShort Month, Big Ideas (February 2026 Wallpapers Edition) — Smashing Magazine\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLet’s make the most of the shortest month of the year with a new collection of desktop wallpapers that are sure to bring a smile to your face — and maybe spark your creativity, too. All of them...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSmashing Magazine · smashingmagazine.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003etest\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.smashingmagazine.com/2026/01/desktop-wallpaper-calendars-february-2026/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://files.smashing.media/articles/desktop-wallpaper-calendars-february-2026/feb-26-eternal-tech-preview-opt.png\" alt=\"Short Month, Big Ideas (February 2026 Wallpapers Edition) — Smashing Magazine — Let’s make the most of the shortest month of the year with a new collection of desktop wallpapers that are sure to bring a smile to your face — and maybe spark your creativity, too. All of them were designed with love by the community for the community and can be downloaded for free. Happy February!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eShort Month, Big Ideas (February 2026 Wallpapers Edition) — Smashing Magazine\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLet’s make the most of the shortest month of the year with a new collection of desktop wallpapers that are sure to bring a smile to your face — and maybe spark your creativity, too. All of them...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSmashing Magazine \u0026middot; smashingmagazine.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ntest\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.smashingmagazine.com/2026/01/desktop-wallpaper-calendars-february-2026/",
      "date_published": "2026-02-02T08:48:03Z",
      "date_modified": "2026-02-02T08:48:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "design",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-918/",
      "url": "https://go.waylonwalker.com/thought-918/",
      "title": "💭 Peter Steinberger",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://steipete.me/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://steipete.me/peter-avatar.jpg\" alt=\"Peter Steinberger — Peter Steinberger: AI-powered tools from Swift roots to web frontiers. Every commit lands on GitHub for you to fork \u0026amp; remix.\" loading=\"lazy\"/ data-glightbox=\"description: Peter Steinberger — Peter Steinberger: AI-powered tools from Swift roots to web frontiers. Every commit lands on GitHub for you to fork \u0026amp; remix.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePeter Steinberger\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePeter Steinberger: AI-powered tools from Swift roots to web frontiers. Every commit lands on GitHub for you to fork \u0026amp; remix.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esteipete.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ePete has a ton of good posts here and actually ships a lot of product.  reccommended read.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://steipete.me/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://steipete.me/peter-avatar.jpg\" alt=\"Peter Steinberger — Peter Steinberger: AI-powered tools from Swift roots to web frontiers. Every commit lands on GitHub for you to fork \u0026amp; remix.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePeter Steinberger\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePeter Steinberger: AI-powered tools from Swift roots to web frontiers. Every commit lands on GitHub for you to fork \u0026amp; remix.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esteipete.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nPete has a ton of good posts here and actually ships a lot of product.  reccommended read.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://steipete.me/",
      "date_published": "2026-01-26T14:00:57Z",
      "date_modified": "2026-01-26T14:00:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "later",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-917/",
      "url": "https://go.waylonwalker.com/thought-917/",
      "title": "💭 Stay away from my trash! - tldraw: Build whiteboards in React ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tldraw.dev/blog/stay-away-from-my-trash\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://framerusercontent.com/images/IaSZC4CMykVaYPdgG5hZLliO4E.png?width=2400\u0026amp;height=1200\" alt=\"Stay away from my trash! - tldraw: Infinite Canvas SDK for React — The tldraw SDK provides tools, services, and APIs to build beautiful whiteboards and infinite canvas applications with real-time collaboration and a powerful React-based canvas.\" loading=\"lazy\"/ data-glightbox=\"description: Stay away from my trash! - tldraw: Infinite Canvas SDK for React — The tldraw SDK provides tools, services, and APIs to build beautiful whiteboards and infinite canvas applications with real-time collaboration and a powerful React-based canvas.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStay away from my trash! - tldraw: Infinite Canvas SDK for React\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe tldraw SDK provides tools, services, and APIs to build beautiful whiteboards and infinite canvas applications with real-time collaboration and a powerful React-based canvas.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etldraw.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eread later\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tldraw.dev/blog/stay-away-from-my-trash\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://framerusercontent.com/images/IaSZC4CMykVaYPdgG5hZLliO4E.png?width=2400\u0026amp;height=1200\" alt=\"Stay away from my trash! - tldraw: Infinite Canvas SDK for React — The tldraw SDK provides tools, services, and APIs to build beautiful whiteboards and infinite canvas applications with real-time collaboration and a powerful React-based canvas.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStay away from my trash! - tldraw: Infinite Canvas SDK for React\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe tldraw SDK provides tools, services, and APIs to build beautiful whiteboards and infinite canvas applications with real-time collaboration and a powerful React-based canvas.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etldraw.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nread later\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tldraw.dev/blog/stay-away-from-my-trash",
      "date_published": "2026-01-26T13:59:50Z",
      "date_modified": "2026-01-26T13:59:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "later",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-916/",
      "url": "https://go.waylonwalker.com/thought-916/",
      "title": "💭 I'm back from the dead",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/im-back-from-the-dead/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pype.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pype.dev.ico\"\u003e\n    \u003c/a\u003e\u003cdiv class=\"embed-card-image\"\u003e\u003ca href=\"https://pype.dev/im-back-from-the-dead/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260124140321_9abef62f.png\" alt=\"I — The flu hit me like a freight train right at the start of the year, along with\nthe most stress I\u0026#39;ve ever felt at work dropping on me at the same time, I\u0026amp;\u0026lt;a href=\" tags=\"\" x=\"\" \"=\"\" class=\"hashtag-tag glightbox\" data-tag=\"x\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\"/ data-glightbox=\"description: I — The flu hit me like a freight train right at the start of the year, along with\nthe most stress I\u0026#39;ve ever felt at work dropping on me at the same time, I\u0026amp;\u0026lt;a href=\"\u003e#x\u003c/a\u003e\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe flu hit me like a freight train right at the start of the year, along with\nthe most stress I\u0026#39;ve ever felt at work dropping on me at the same time, I\u0026amp;\u003ca href=\"/tags/x/\" class=\"hashtag-tag\" data-tag=\"x\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\"\u003e#x\u003c/a\u003e\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \n\u003c/div\u003e\n\u003cp\u003eI’m jelous… as I was getting better, I got kicked down again. cant hold a conversation without coughing.  Its hitting people from all over like crazy this year.  so glad its just the flu and not something seriously harmful for hospitalization.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/im-back-from-the-dead/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260124140321_9abef62f.png\" alt=\"I — The flu hit me like a freight train right at the start of the year, along with\nthe most stress I\u0026#39;ve ever felt at work dropping on me at the same time, I\u0026amp;\u003ca href=\"/tags/x/\" class=\"hashtag-tag\" data-tag=\"x\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#x\u003c/a\u003e\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe flu hit me like a freight train right at the start of the year, along with\nthe most stress I\u0026#39;ve ever felt at work dropping on me at the same time, I\u0026amp;\u003ca href=\"/tags/x/\" class=\"hashtag-tag\" data-tag=\"x\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#x\u003c/a\u003e\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm jelous... as I was getting better, I got kicked down again. cant hold a conversation without coughing.  Its hitting people from all over like crazy this year.  so glad its just the flu and not something seriously harmful for hospitalization.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/im-back-from-the-dead/",
      "date_published": "2026-01-25T20:48:26Z",
      "date_modified": "2026-01-25T20:48:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "note",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wilsonzlin-fastrender/",
      "url": "https://go.waylonwalker.com/wilsonzlin-fastrender/",
      "title": "⭐ wilsonzlin fastrender",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/wilsonzlin/fastrender\" 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\"\u003efastrender\u003c/a\u003e by \u003ca href=\"https://github.com/wilsonzlin\" 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\"\u003ewilsonzlin\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eExperimental new browser engine\u003c/p\u003e\n",
      "content_text": "\nThe work on [fastrender](https://github.com/wilsonzlin/fastrender) by [wilsonzlin](https://github.com/wilsonzlin).\n\nExperimental new browser engine\n",
      "summary": "The work on fastrender by wilsonzlin.",
      "date_published": "2026-01-24T03:54:07Z",
      "date_modified": "2026-01-24T03:54:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/flosch-pongo2/",
      "url": "https://go.waylonwalker.com/flosch-pongo2/",
      "title": "⭐ flosch pongo2",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/flosch\" 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\"\u003eflosch\u003c/a\u003e and their project \u003ca href=\"https://github.com/flosch/pongo2\" 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\"\u003epongo2\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDjango-syntax like template-engine for Go\u003c/p\u003e\n",
      "content_text": "\nCheck out [flosch](https://github.com/flosch) and their project [pongo2](https://github.com/flosch/pongo2).\n\nDjango-syntax like template-engine for Go\n",
      "summary": "Check out flosch and their project pongo2.",
      "date_published": "2026-01-22T23:34:17Z",
      "date_modified": "2026-01-22T23:34:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-915/",
      "url": "https://go.waylonwalker.com/thought-915/",
      "title": "💭 DockFrame - Modular USB-C Hub with Framework-Compatible Expans...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dockframe.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dockframe.hwlab.io/images/dockframe_front.png\" alt=\"DockFrame - Modular USB-C Hub with Framework-Compatible Expansion Cards — DockFrame is a modular USB-C hub that accepts Framework-compatible Expansion Cards and custom Tool Cards. Dock once, reconfigure whenever.\" loading=\"lazy\"/ data-glightbox=\"description: DockFrame - Modular USB-C Hub with Framework-Compatible Expansion Cards — DockFrame is a modular USB-C hub that accepts Framework-compatible Expansion Cards and custom Tool Cards. Dock once, reconfigure whenever.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDockFrame - Modular USB-C Hub with Framework-Compatible Expansion Cards\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDockFrame is a modular USB-C hub that accepts Framework-compatible Expansion Cards and custom Tool Cards. Dock once, reconfigure whenever.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDockFrame · dockframe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDockframe looks like a really cool concept using the framework tiles ( the connectors idk what they are called ) to build a dock.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dockframe.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dockframe.hwlab.io/images/dockframe_front.png\" alt=\"DockFrame - Modular USB-C Hub with Framework-Compatible Expansion Cards — DockFrame is a modular USB-C hub that accepts Framework-compatible Expansion Cards and custom Tool Cards. Dock once, reconfigure whenever.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDockFrame - Modular USB-C Hub with Framework-Compatible Expansion Cards\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDockFrame is a modular USB-C hub that accepts Framework-compatible Expansion Cards and custom Tool Cards. Dock once, reconfigure whenever.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDockFrame \u0026middot; dockframe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDockframe looks like a really cool concept using the framework tiles ( the connectors idk what they are called ) to build a dock.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dockframe.com/",
      "date_published": "2026-01-21T21:21:53Z",
      "date_modified": "2026-01-21T21:21:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "hardware",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/format-markdown-with-mdformat/",
      "url": "https://go.waylonwalker.com/format-markdown-with-mdformat/",
      "title": "format markdown with mdformat",
      "content_html": "\u003cp\u003eI really wish I would have got this right a few years ago. Theres a couple of\nflags I had to use to get mdformat to do hard wraps at 80 characters and not\nwreck tables. This mix of flags and plugins is workign really well for me so\nfar.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emdfmt\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    uvx \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-ruff\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-beautysh\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-web\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-config\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-gfm\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-front-matters\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-wikilink\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-simple-breaks\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        mdformat \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --wrap \u003cspan class=\"m\"\u003e80\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --end-of-line lf \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --codeformatters python \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        --codeformatters bash \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd as pre-commmit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"l\"\u003erepos\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://github.com/hukkin/mdformat\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erev\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1.0.0\u003c/span\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# pin to the version you want\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ehooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emdformat\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003ewrap\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;80\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003eend-of-line\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003elf\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003ecodeformatters\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003epython\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003ecodeformatters\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003ebash\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eadditional_dependencies\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-ruff\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-beautysh\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-web\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-config\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-gfm\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-front-matters\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-wikilink\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-simple-breaks\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI really wish I would have got this right a few years ago. Theres a couple of\nflags I had to use to get mdformat to do hard wraps at 80 characters and not\nwreck tables. This mix of flags and plugins is workign really well for me so\nfar.\n\n```bash\nmdfmt() {\n    uvx \\\n        --with \"mdformat-ruff\" \\\n        --with \"mdformat-beautysh\" \\\n        --with \"mdformat-web\" \\\n        --with \"mdformat-config\" \\\n        --with \"mdformat-gfm\" \\\n        --with \"mdformat-front-matters\" \\\n        --with \"mdformat-wikilink\" \\\n        --with \"mdformat-simple-breaks\" \\\n        mdformat \\\n        --wrap 80 \\\n        --end-of-line lf \\\n        --codeformatters python \\\n        --codeformatters bash \\\n        \"$@\"\n}\n```\n\nAnd as pre-commmit.\n\n```yaml\nrepos\n  - repo: https://github.com/hukkin/mdformat\n    rev: 1.0.0  # pin to the version you want\n    hooks:\n      - id: mdformat\n        args:\n          - --wrap\n          - \"80\"\n          - --end-of-line\n          - lf\n          - --codeformatters\n          - python\n          - --codeformatters\n          - bash\n        additional_dependencies:\n          - mdformat-ruff\n          - mdformat-beautysh\n          - mdformat-web\n          - mdformat-config\n          - mdformat-gfm\n          - mdformat-front-matters\n          - mdformat-wikilink\n          - mdformat-simple-breaks\n```\n",
      "summary": "I really wish I would have got this right a few years ago. Theres a couple of flags I had to use to get mdformat to do hard wraps at 80 characters and not...",
      "date_published": "2026-01-19T20:41:14Z",
      "date_modified": "2026-01-19T20:41:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-914/",
      "url": "https://go.waylonwalker.com/thought-914/",
      "title": "💭 make no mistakes by Beginbot | Suno",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://suno.com/song/f5821216-ea6e-49c3-98de-67880e517a89\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn2.suno.ai/image_large_f5821216-ea6e-49c3-98de-67880e517a89.jpeg\" alt=\"make no mistakes — Listen and make your own on Suno.\" loading=\"lazy\"/ data-glightbox=\"description: make no mistakes — Listen and make your own on Suno.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003emake no mistakes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eListen and make your own on Suno.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esuno.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAi prompt music, the right level of cringe to be great.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://suno.com/song/f5821216-ea6e-49c3-98de-67880e517a89\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn2.suno.ai/image_large_f5821216-ea6e-49c3-98de-67880e517a89.jpeg\" alt=\"make no mistakes — Listen and make your own on Suno.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003emake no mistakes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eListen and make your own on Suno.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esuno.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAi prompt music, the right level of cringe to be great.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://suno.com/song/f5821216-ea6e-49c3-98de-67880e517a89",
      "date_published": "2026-01-19T20:25:15Z",
      "date_modified": "2026-01-19T20:25:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-913/",
      "url": "https://go.waylonwalker.com/thought-913/",
      "title": "💭 I Hope This Email Finds You Before I Do - Last Week in AWS Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.lastweekinaws.com/blog/i-hope-this-email-finds-you-before-i-do/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.lastweekinaws.com/wp-content/uploads/2026/01/header-1768364958717.jpg\" alt=\"I Hope This Email Finds You Before I Do — I Hope This Email Finds You Before I Do\" loading=\"lazy\"/ data-glightbox=\"description: I Hope This Email Finds You Before I Do — I Hope This Email Finds You Before I Do\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI Hope This Email Finds You Before I Do\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI Hope This Email Finds You Before I Do\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLast Week in AWS · lastweekinaws.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis post was filled with real life, snark, entertainment, feelings.  I get a lot of these emails that claim they can change my SEO game if I give them 500, for a site making 0, Link partnerships from small startups.  A lot of these are so automated that if I do respond I dont even get a response.  I’ve responded to many simply asking what is this about, I get 10 others just like you a week.  Can you tell me what exactly you want and what each of us benefit from it, how did you find me.  All normal questions, they almost always result in crickets, no response, maybe its time to implement a Billie for more snark.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.lastweekinaws.com/blog/i-hope-this-email-finds-you-before-i-do/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.lastweekinaws.com/wp-content/uploads/2026/01/header-1768364958717.jpg\" alt=\"I Hope This Email Finds You Before I Do — I Hope This Email Finds You Before I Do\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI Hope This Email Finds You Before I Do\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI Hope This Email Finds You Before I Do\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLast Week in AWS \u0026middot; lastweekinaws.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis post was filled with real life, snark, entertainment, feelings.  I get a lot of these emails that claim they can change my SEO game if I give them 500, for a site making 0, Link partnerships from small startups.  A lot of these are so automated that if I do respond I dont even get a response.  I've responded to many simply asking what is this about, I get 10 others just like you a week.  Can you tell me what exactly you want and what each of us benefit from it, how did you find me.  All normal questions, they almost always result in crickets, no response, maybe its time to implement a Billie for more snark.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.lastweekinaws.com/blog/i-hope-this-email-finds-you-before-i-do/",
      "date_published": "2026-01-19T15:24:34Z",
      "date_modified": "2026-01-19T15:24:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dbreunig-whenwords/",
      "url": "https://go.waylonwalker.com/dbreunig-whenwords/",
      "title": "⭐ dbreunig whenwords",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/dbreunig\" 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\"\u003edbreunig\u003c/a\u003e and their project \u003ca href=\"https://github.com/dbreunig/whenwords\" 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\"\u003ewhenwords\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA relative time formatting library, with no code.\u003c/p\u003e\n",
      "content_text": "\nCheck out [dbreunig](https://github.com/dbreunig) and their project [whenwords](https://github.com/dbreunig/whenwords).\n\nA relative time formatting library, with no code.\n",
      "summary": "Check out dbreunig and their project whenwords.",
      "date_published": "2026-01-14T17:08:20Z",
      "date_modified": "2026-01-14T17:08:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-912/",
      "url": "https://go.waylonwalker.com/thought-912/",
      "title": "💭 Hollow Knight: Silksong by Ceen in 54:55 - Awesome Games Done ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"M9Li3gm4JCI\" title=\"Hollow Knight: Silksong by Ceen in 54:55 - Awesome Games Done Quick 2026\" playlabel=\"Play: Hollow Knight: Silksong by Ceen in 54:55 - Awesome Games Done Quick 2026\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat a goat, speedrunning silksong at a competitive pace, live, with live audience, while co hosting, and raising $2M for Prevent Cancer Foundation.  CEEN moves in ways that do not compute with my brain, everything looks so simple, things that take me so long are done in a few swipes.  Watching this it really make silkspear look OP, this thing does so much damage if you never take damage and can use it continuously without needing silk for healing.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"M9Li3gm4JCI\" title=\"Hollow Knight: Silksong by Ceen in 54:55 - Awesome Games Done Quick 2026\" playlabel=\"Play: Hollow Knight: Silksong by Ceen in 54:55 - Awesome Games Done Quick 2026\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWhat a goat, speedrunning silksong at a competitive pace, live, with live audience, while co hosting, and raising $2M for Prevent Cancer Foundation.  CEEN moves in ways that do not compute with my brain, everything looks so simple, things that take me so long are done in a few swipes.  Watching this it really make silkspear look OP, this thing does so much damage if you never take damage and can use it continuously without needing silk for healing.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=M9Li3gm4JCI",
      "date_published": "2026-01-14T02:35:01Z",
      "date_modified": "2026-01-14T02:35:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "silksong",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-910/",
      "url": "https://go.waylonwalker.com/thought-910/",
      "title": "💭 \"I shipped code I don't understand and I bet you have too\" – J...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"eIoohUmYpGI\" title=\"The Infinite Software Crisis – Jake Nations, Netflix\" playlabel=\"Play: The Infinite Software Crisis – Jake Nations, Netflix\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAbsolute banger of a conference talk, saving to come back with more notes later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"eIoohUmYpGI\" title=\"The Infinite Software Crisis – Jake Nations, Netflix\" playlabel=\"Play: The Infinite Software Crisis – Jake Nations, Netflix\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAbsolute banger of a conference talk, saving to come back with more notes later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=eIoohUmYpGI",
      "date_published": "2026-01-14T02:15:41Z",
      "date_modified": "2026-01-14T02:15:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "later",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/opencode-variants/",
      "url": "https://go.waylonwalker.com/opencode-variants/",
      "title": "opencode variants",
      "content_html": "\u003cp\u003eOpencode is changing on the daily right now, today I noticed the word \u003ccode\u003elow\u003c/code\u003e pop\nup in Orange text in my opencode window.  Looking into this they are exposing\n\u003ca href=\"https://opencode.ai/docs/models/#variants\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/opencode.ai.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/opencode.ai.ico\" class=\"has-avatar  has-avatar-before\"\u003evariants\u003c/a\u003e to the user.  This allows\nyou to change between fast or slow and thinking, the later taking more time to\nprepare before doing an action.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4\" type=\"video/mp4\"\u003eSwapping Variants in opencode\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIt looks like this toggle may have been here for awhile and I’m just now\ndiscovering it. Potentially because its a new feature of the free Zen provider.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVariants\nMany models support multiple variants with different configurations. OpenCode ships with built-in default variants for popular providers.\u003c/p\u003e\n\u003cp\u003eBuilt-in variants\nOpenCode ships with default variants for many providers:\u003c/p\u003e\n\u003cp\u003eAnthropic:\u003c/p\u003e\n\u003cp\u003ehigh - High thinking budget (default)\nmax - Maximum thinking budget\nOpenAI:\u003c/p\u003e\n\u003cp\u003eVaries by model but roughly:\u003c/p\u003e\n\u003cp\u003enone - No reasoning\nminimal - Minimal reasoning effort\nlow - Low reasoning effort\nmedium - Medium reasoning effort\nhigh - High reasoning effort\nxhigh - Extra high reasoning effort\nGoogle:\u003c/p\u003e\n\u003cp\u003elow - Lower effort/token budget\nhigh - Higher effort/token budget\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nOpencode is changing on the daily right now, today I noticed the word `low` pop\nup in Orange text in my opencode window.  Looking into this they are exposing\n[variants](https://opencode.ai/docs/models/#variants) to the user.  This allows\nyou to change between fast or slow and thinking, the later taking more time to\nprepare before doing an action.\n\n![Swapping Variants in opencode](https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4)\n\nIt looks like this toggle may have been here for awhile and I'm just now\ndiscovering it. Potentially because its a new feature of the free Zen provider.\n\n\u003e Variants\nMany models support multiple variants with different configurations. OpenCode ships with built-in default variants for popular providers.\n\u003e \n\u003e Built-in variants\n\u003e OpenCode ships with default variants for many providers:\n\u003e \n\u003e Anthropic:\n\u003e \n\u003e high - High thinking budget (default)\n\u003e max - Maximum thinking budget\n\u003e OpenAI:\n\u003e \n\u003e Varies by model but roughly:\n\u003e \n\u003e none - No reasoning\n\u003e minimal - Minimal reasoning effort\n\u003e low - Low reasoning effort\n\u003e medium - Medium reasoning effort\n\u003e high - High reasoning effort\n\u003e xhigh - Extra high reasoning effort\n\u003e Google:\n\u003e \n\u003e low - Lower effort/token budget\n\u003e high - Higher effort/token budget\n",
      "summary": "Opencode is changing on the daily right now, today I noticed the word pop up in Orange text in my opencode window. Looking into this they are exposing...",
      "date_published": "2026-01-13T08:53:36Z",
      "date_modified": "2026-01-13T08:53:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "opencode"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-909/",
      "url": "https://go.waylonwalker.com/thought-909/",
      "title": "💭 Reflections on 13 years and 1,000 posts of writing on my blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hamy.xyz/blog/2026-01_1000-blog-posts\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hamy.xyz.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hamy.xyz.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReflections on 13 years and 1,000 posts of writing on my blog - HAMY\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehamy.xyz\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe answer is I do it habitually. If there’s a big enough idea I’ve had floating around in my head and I think others might find it useful / interesting then I usually think it’s worth logging it somewhere. If I don’t, I’ll likely just keep thinking about it so might as well get it out of my head and on the internet where people can find it.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://hammy.xyz\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hammy.xyz.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hammy.xyz.png\" class=\"has-avatar  has-avatar-before\"\u003ehammy\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis is how you do it.  If you want to do something, you need to make it a habit. Something you crave, something you need.  I need to write my ideas down in this blog, it helps me index ideas for later, but more importantly it helps me flesh them out and think through real things.\u003c/p\u003e\n\u003cp\u003eCongrats on 1k, your site is awesome \u003ca href=\"https://hammy.xyz\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hammy.xyz.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hammy.xyz.png\" class=\"has-avatar  has-avatar-before\"\u003eHammy\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hamy.xyz/blog/2026-01_1000-blog-posts\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReflections on 13 years and 1,000 posts of writing on my blog - HAMY\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehamy.xyz\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e The answer is I do it habitually. If there's a big enough idea I've had floating around in my head and I think others might find it useful / interesting then I usually think it's worth logging it somewhere. If I don't, I'll likely just keep thinking about it so might as well get it out of my head and on the internet where people can find it.\n\u003e - [hammy](https://hammy.xyz)\n\nThis is how you do it.  If you want to do something, you need to make it a habit. Something you crave, something you need.  I need to write my ideas down in this blog, it helps me index ideas for later, but more importantly it helps me flesh them out and think through real things.\n\nCongrats on 1k, your site is awesome [Hammy](https://hammy.xyz)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hamy.xyz/blog/2026-01_1000-blog-posts",
      "date_published": "2026-01-13T03:15:54Z",
      "date_modified": "2026-01-13T03:15:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-908/",
      "url": "https://go.waylonwalker.com/thought-908/",
      "title": "💭 Don't fall into the anti-AI hype",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Jan/11/dont-fall-into-the-anti-ai-hype/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDon’t fall into the anti-AI hype\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m glad someone was brave enough to say this. There is a lot of anti-AI sentiment in the software development community these days. Much of it is justified, but if …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNever believe in absolutes, see what I did there.  The hype bros will take you to the extremes, ai will take your jobs in six months or be burned to the ground in six months.  How about its useful now and will be more useful in six months.  If you turned off the hype bro feed for six months you would probably be fine, in fact you would probably be better off for not capturing so much noise along the way.  AI has gone the way of next js framework, it churns fast, hype bros are always an expert that know exactly whats best for everyone.  It changes fast, what was the best last week might be dead next week.  In fact getting to know what works well for you and knowing that tool really well for a longer period will take you farther.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Jan/11/dont-fall-into-the-anti-ai-hype/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDon’t fall into the anti-AI hype\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m glad someone was brave enough to say this. There is a lot of anti-AI sentiment in the software development community these days. Much of it is justified, but if …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNever believe in absolutes, see what I did there.  The hype bros will take you to the extremes, ai will take your jobs in six months or be burned to the ground in six months.  How about its useful now and will be more useful in six months.  If you turned off the hype bro feed for six months you would probably be fine, in fact you would probably be better off for not capturing so much noise along the way.  AI has gone the way of next js framework, it churns fast, hype bros are always an expert that know exactly whats best for everyone.  It changes fast, what was the best last week might be dead next week.  In fact getting to know what works well for you and knowing that tool really well for a longer period will take you farther.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2026/Jan/11/dont-fall-into-the-anti-ai-hype/#atom-everything",
      "date_published": "2026-01-12T03:03:25Z",
      "date_modified": "2026-01-12T03:03:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-907/",
      "url": "https://go.waylonwalker.com/thought-907/",
      "title": "💭 Salesforces mistake - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"tBWenRZIgdg\" title=\"Salesforces mistake\" playlabel=\"Play: Salesforces mistake\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eSalesforce gets pwnd by the ai hype bros and killed its reputation with employees, letting them know where they truely stand with them.  4k people sounds like a lot, its probably a big chunk of savings, but was it worth the loss of reputation?  There must be a better way to give this a trial run that lets them understand this before disrupting the lives of real people right???\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"tBWenRZIgdg\" title=\"Salesforces mistake\" playlabel=\"Play: Salesforces mistake\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nSalesforce gets pwnd by the ai hype bros and killed its reputation with employees, letting them know where they truely stand with them.  4k people sounds like a lot, its probably a big chunk of savings, but was it worth the loss of reputation?  There must be a better way to give this a trial run that lets them understand this before disrupting the lives of real people right???\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/tBWenRZIgdg",
      "date_published": "2026-01-12T02:52:55Z",
      "date_modified": "2026-01-12T02:52:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-906/",
      "url": "https://go.waylonwalker.com/thought-906/",
      "title": "💭 Diffs, from Pierre",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://diffs.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://diffs.com/opengraph-image.png?opengraph-image.0pawm-tthjkhk.png?dpl=dpl_25LP27vR2HeFHmE32UamCcQ28PUT\" alt=\"Diffs, from Pierre — An open source diff and file rendering library by The Pierre Computer Company.\" loading=\"lazy\"/ data-glightbox=\"description: Diffs, from Pierre — An open source diff and file rendering library by The Pierre Computer Company.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDiffs, from Pierre\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn open source diff and file rendering library by The Pierre Computer Company.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ediffs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis looks like a really nice and performant diffing library that supports vanilla and react, with a lot of options.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://diffs.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://diffs.com/opengraph-image.png?opengraph-image.0pawm-tthjkhk.png?dpl=dpl_25LP27vR2HeFHmE32UamCcQ28PUT\" alt=\"Diffs, from Pierre — An open source diff and file rendering library by The Pierre Computer Company.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDiffs, from Pierre\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn open source diff and file rendering library by The Pierre Computer Company.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ediffs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis looks like a really nice and performant diffing library that supports vanilla and react, with a lot of options.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://diffs.com/",
      "date_published": "2026-01-10T23:28:59Z",
      "date_modified": "2026-01-10T23:28:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-905/",
      "url": "https://go.waylonwalker.com/thought-905/",
      "title": "💭 Oxide and Friends 1/5/2026 -- Predictions 2026!! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"lVDhQMiAbR8\" title=\"✂️ Job of typing code into a computer in 6 years\" playlabel=\"Play: ✂️ Job of typing code into a computer in 6 years\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI thought this was an interesting take from Simon.  I’ve been hearing him consistently say there will be more demand for software engineering in the future.  More companies will have the ability and need to deal with software applications, but fewer of us will be hand editing any code.  I thought this was an interesting interaction in the clip.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUh Simon, what do you got for us?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI’ve just got the one. I think the act\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eof the the the job of being paid money to type code into a computer Yeah.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewill go the same way as punching punch cards.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eOkay.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI do I think in\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003esix years time I do not think it will anyone will be paid to 80:56\njust do the thing where you type the code.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eJust type the code. Okay.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI\nthink software engineering will still be an enormous career. I just think the\nsoftware engineers won’t be spending multiple hours of their day in a text\neditor typing out syntax. 81:09\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt will look like punching cards. I think\nso. Yeah.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYeah. Interesting. In uh in six years. Um and but software\nengineering still very much exists.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI believe so. I I hope so. [laughter] I\nvery much hope so because I think\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003ethe um the challenge of being a software\n81:23 engineer is not remembering\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003ehow if what what if what for loops look\nlike. It is understanding what computers can do and how to turn fuzzy human\nrequirements into actual like working software. And that’s that’s what we’re\nfor. And I think we’ll still be doing that just a lot more of it in a lot more\nambitious scale.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAnd then Okay. Do you Does the software engineer though\ndeals with code? I mean they I mean the code is being written.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI think\nthey probably look at it occasionally.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eOkay. Only occasionally a little\nbit. So I met 81:53\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWho debugs it?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUm I I hate to say it, the agents\ndebug it themselves.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eOkay. Who debugs your device driver that either works\nor doesn’t? I like\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eworking on this programming language like I’m doing my\nown codegen and like\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eclaude is happy to pull out GDB and just like\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"lVDhQMiAbR8\" title=\"✂️ Job of typing code into a computer in 6 years\" playlabel=\"Play: ✂️ Job of typing code into a computer in 6 years\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI thought this was an interesting take from Simon.  I've been hearing him consistently say there will be more demand for software engineering in the future.  More companies will have the ability and need to deal with software applications, but fewer of us will be hand editing any code.  I thought this was an interesting interaction in the clip.\n\n\u003e Uh Simon, what do you got for us? \n\n\u003e I've just got the one. I think the act\n\n\n\u003e of the the the job of being paid money to type code into a computer Yeah.\n\n\n\u003e will go the same way as punching punch cards. \n\n\u003e Okay. \n\n\u003e I do I think in\n\n\n\u003e six years time I do not think it will anyone will be paid to 80:56\njust do the thing where you type the code. \n\n\u003e Just type the code. Okay. \n\n\u003e I\nthink software engineering will still be an enormous career. I just think the\nsoftware engineers won't be spending multiple hours of their day in a text\neditor typing out syntax. 81:09 \n\n\u003e It will look like punching cards. I think\nso. Yeah. \n\n\u003e Yeah. Interesting. In uh in six years. Um and but software\nengineering still very much exists. \n\n\u003e I believe so. I I hope so. [laughter] I\nvery much hope so because I think \n\n\u003e the um the challenge of being a software\n81:23 engineer is not remembering \n\n\u003e how if what what if what for loops look\nlike. It is understanding what computers can do and how to turn fuzzy human\nrequirements into actual like working software. And that's that's what we're\nfor. And I think we'll still be doing that just a lot more of it in a lot more\nambitious scale. \n\n\u003e And then Okay. Do you Does the software engineer though\ndeals with code? I mean they I mean the code is being written. \n\n\u003e I think\nthey probably look at it occasionally. \n\n\u003e Okay. Only occasionally a little\nbit. So I met 81:53 \n\n\u003e Who debugs it? \n\n\u003e Um I I hate to say it, the agents\ndebug it themselves. \n\n\u003e Okay. Who debugs your device driver that either works\nor doesn't? I like \n\n\u003e working on this programming language like I'm doing my\nown codegen and like \n\n\u003e claude is happy to pull out GDB and just like\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/clip/UgkxKSVMasWf0UpGaRVRqeBmn9C5Oh1syH2Q",
      "date_published": "2026-01-09T21:41:43Z",
      "date_modified": "2026-01-09T21:41:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/opencode-init-prompt/",
      "url": "https://go.waylonwalker.com/opencode-init-prompt/",
      "title": "opencode init prompt",
      "content_html": "\u003cp\u003eThis is opencode’s init prompt.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePlease analyze this codebase and create an AGENTS.md file containing:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e Build/lint/test commands - especially for running a single test\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e Code style guidelines including imports, formatting, types, naming conventions, error handling, etc.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe file you create will be given to agentic coding agents (such as yourself) that operate in this repository. Make it about 150 lines long.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIf there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include them.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIf there\u0026#39;s already an AGENTS.md, improve it if it\u0026#39;s located in \u0026lt;dir\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\nThis is opencode's init prompt.\n\n``` markdown\nPlease analyze this codebase and create an AGENTS.md file containing:\n1. Build/lint/test commands - especially for running a single test\n2. Code style guidelines including imports, formatting, types, naming conventions, error handling, etc.\nThe file you create will be given to agentic coding agents (such as yourself) that operate in this repository. Make it about 150 lines long.\nIf there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include them.\nIf there's already an AGENTS.md, improve it if it's located in \u003cdir\u003e\n```\n",
      "summary": "This is opencode's init prompt.",
      "date_published": "2026-01-09T13:32:12Z",
      "date_modified": "2026-01-09T13:32:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pog/",
      "url": "https://go.waylonwalker.com/pog/",
      "title": "POG",
      "content_html": "\u003cp\u003e\u003cstrong\u003ePOG\u003c/strong\u003e: \u003cstrong\u003eP\u003c/strong\u003elay \u003cstrong\u003eO\u003c/strong\u003ef the \u003cstrong\u003eG\u003c/strong\u003eame - used to express shock or excitement\nafter a noteworthy moment.\u003c/p\u003e\n",
      "content_text": "\n**POG**: **P**lay **O**f the **G**ame - used to express shock or excitement\nafter a noteworthy moment.\n",
      "summary": "**: **lay **f the **ame - used to express shock or excitement after a noteworthy moment.",
      "date_published": "2026-01-08T20:17:27Z",
      "date_modified": "2026-01-08T20:17:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "glossary"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-904/",
      "url": "https://go.waylonwalker.com/thought-904/",
      "title": "💭 There's an Actual Reason You Can't Recycle Plastic - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"325HdQe4WM4\" title=\"There\u0026#39;s an Actual Reason You Can\u0026#39;t Recycle Plastic\" playlabel=\"Play: There\u0026#39;s an Actual Reason You Can\u0026#39;t Recycle Plastic\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eIn all of the documentaries I’ve seen on how hard it is to recycle plastic, how hard it is to separate all the small pieces from each other, how expensive it is, dirty it is, how just plain ineffective we are at doing it I’ve never seen this angle.  In a nutshell the other side of the equation is that as we pull natural gas out of shale is that we pull ethylene out as a byproduct.  We don’t even ask for it, it just comes with the methane gas that we are going for.  So as we drill, Frack, and mine this out to heat our homes and create electricity we are stuck with all of this ethylene.  It’s terrible for the environment, just like methane it’s a rough greenhouse gas.  Companies are allowed to flare off a certain amount, they can push some down the pipe, but are still left with tons leftover that they practically give away.  Turns out that this stuff is very cheap and very much wants to be turned into plastic.  Very clean food grade plastic, very easily and cheaply compared to recycling.  Excess is a big problem that needs solutions, but it has hard problems at both ends of the situation that don’t make it easy for anyone trying to take care of it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"325HdQe4WM4\" title=\"There\u0026#39;s an Actual Reason You Can\u0026#39;t Recycle Plastic\" playlabel=\"Play: There\u0026#39;s an Actual Reason You Can\u0026#39;t Recycle Plastic\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nIn all of the documentaries I've seen on how hard it is to recycle plastic, how hard it is to separate all the small pieces from each other, how expensive it is, dirty it is, how just plain ineffective we are at doing it I've never seen this angle.  In a nutshell the other side of the equation is that as we pull natural gas out of shale is that we pull ethylene out as a byproduct.  We don't even ask for it, it just comes with the methane gas that we are going for.  So as we drill, Frack, and mine this out to heat our homes and create electricity we are stuck with all of this ethylene.  It's terrible for the environment, just like methane it's a rough greenhouse gas.  Companies are allowed to flare off a certain amount, they can push some down the pipe, but are still left with tons leftover that they practically give away.  Turns out that this stuff is very cheap and very much wants to be turned into plastic.  Very clean food grade plastic, very easily and cheaply compared to recycling.  Excess is a big problem that needs solutions, but it has hard problems at both ends of the situation that don't make it easy for anyone trying to take care of it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=325HdQe4WM4",
      "date_published": "2026-01-08T03:16:18Z",
      "date_modified": "2026-01-08T03:16:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "environment",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-903/",
      "url": "https://go.waylonwalker.com/thought-903/",
      "title": "💭 feat: add llms.txt endpoint for LLM-optimized documentation by...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tailwindlabs/tailwindcss.com/pull/2388#issuecomment-3717222957\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/d1a3efccfb3d0d35a0b5e964bd197c3f81615743a1ebcc02f07cb5c45742233f/tailwindlabs/tailwindcss.com/pull/2388\" alt=\"feat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com — Add /llms.txt endpoint that serves a concatenated, text-only version of all Tailwind CSS documentation pages optimized for Large Language Model consumption.\n\u0026lt;p\u0026gt;Extract text from MDX files, removing J…\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: feat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com — Add /llms.txt endpoint that serves a concatenated, text-only version of all Tailwind CSS documentation pages optimized for Large Language Model consumption.\n\u0026lt;p\u0026gt;Extract text from MDX files, removing J…\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003efeat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eAdd /llms.txt endpoint that serves a concatenated, text-only version of all Tailwind CSS documentation pages optimized for Large Language Model consumption.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eExtract text from MDX files, removing J…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn this one is getting some reach, I’ve seen it from \u003ca href=\"https://simonwillison.net/2026/Jan/7/adam-wathan/#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\"\u003eSimon Willison\u003c/a\u003e and \u003ca href=\"https://justin.searls.co/takes/2026-01-07-14h15m44s/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/justin.searls.co.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/justin.searls.co.ico\" class=\"has-avatar  has-avatar-before\"\u003eJustin Searls\u003c/a\u003e and \u003ca href=\"https://www.youtube.com/watch?v=luhgjBrRulk\" 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\"\u003et3.gg\u003c/a\u003e.  I feel for Adam, He has built a fantastic product that the world is running with, something we all needed.  Something that everyone laughs at turns their nose up “ppft I don’t need that” the first time they see it, but once they try people get it, and a lot of them like it and keep it.  But its something that no one really wants to pay for, no matter how big of products get built on it.  As we see more and more features coming to css, its not stopping, the work will always be there.  I really hope to see something happen to tailwind to keep it afloat. massive growth and revenue down 80% does not help.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tailwindlabs/tailwindcss.com/pull/2388#issuecomment-3717222957\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/d1a3efccfb3d0d35a0b5e964bd197c3f81615743a1ebcc02f07cb5c45742233f/tailwindlabs/tailwindcss.com/pull/2388\" alt=\"feat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com — Add /llms.txt endpoint that serves a concatenated, text-only version of all Tailwind CSS documentation pages optimized for Large Language Model consumption.\n\nExtract text from MDX files, removing J...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efeat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAdd /llms.txt endpoint that serves a concatenated, text-only version of all Tailwind CSS documentation pages optimized for Large Language Model consumption.\n\nExtract text from MDX files, removing J...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn this one is getting some reach, I've seen it from [Simon Willison](https://simonwillison.net/2026/Jan/7/adam-wathan/#atom-everything) and [Justin Searls](https://justin.searls.co/takes/2026-01-07-14h15m44s/) and [t3.gg](https://www.youtube.com/watch?v=luhgjBrRulk).  I feel for Adam, He has built a fantastic product that the world is running with, something we all needed.  Something that everyone laughs at turns their nose up \"ppft I don't need that\" the first time they see it, but once they try people get it, and a lot of them like it and keep it.  But its something that no one really wants to pay for, no matter how big of products get built on it.  As we see more and more features coming to css, its not stopping, the work will always be there.  I really hope to see something happen to tailwind to keep it afloat. massive growth and revenue down 80% does not help. \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/tailwindlabs/tailwindcss.com/pull/2388#issuecomment-3717222957",
      "date_published": "2026-01-08T01:22:02Z",
      "date_modified": "2026-01-08T01:22:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "tailwindcss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rune-admonition/",
      "url": "https://go.waylonwalker.com/rune-admonition/",
      "title": "Rune Admonition",
      "content_html": "\u003clink rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/\u003e\n\u003clink rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"\"/\u003e\n\u003clink href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+Runic\u0026amp;display=swap\" rel=\"stylesheet\"/\u003e\n\u003cstyle\u003e\n.admonition .rune {\n}\n\u003c/style\u003e\n\u003cp\u003e!!! Rune\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eᚨᛚᛚᚨᛁ ᛗᚨᚾᚾᚨ ᚠᚱᛖᛁ\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e!!! Rune\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ehi hello\n\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv class=\"admonition tip\"\u003e\n\u003cp class=\"admonition-title\"\u003eTip\u003c/p\u003e\n\u003cp\u003eHere’s a tip\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003clink rel=\"preconnect\" href=\"https://fonts.googleapis.com\"\u003e\n\u003clink rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin\u003e\n\u003clink href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+Runic\u0026display=swap\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n.admonition .rune {\n}\n\u003c/style\u003e\n\n\n!!! Rune\n\n    ᚨᛚᛚᚨᛁ ᛗᚨᚾᚾᚨ ᚠᚱᛖᛁ\n\n!!! Rune\n\n    hi hello\n\n!!! tip\n\n    Here's a tip\n",
      "date_published": "2026-01-07T18:18:52Z",
      "date_modified": "2026-01-07T18:18:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meta",
        "blog"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-902/",
      "url": "https://go.waylonwalker.com/thought-902/",
      "title": "💭 Photoshop for text — Steph Ango",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stephango.com/photoshop-for-text\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://stephango.com/assets/covers/photoshop-for-text.png\" alt=\"Photoshop for text — In the near future, transforming text over an entire document will become as commonplace as filtering images.\" loading=\"lazy\"/ data-glightbox=\"description: Photoshop for text — In the near future, transforming text over an entire document will become as commonplace as filtering images.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePhotoshop for text\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn the near future, transforming text over an entire document will become as commonplace as filtering images.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSteph Ango · stephango.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWhile the non deterministic nature of llms scare the heck out of me in the sense of just cutting it loose on my writing.  letting it go through all of my files and just edit them.  I do like the idea of mundane tools like “desaturate”, “Gaussian blur”, evolving out of it for text.  I don’t yet see this with the tools we have now, but it will be interesting to see them evolve.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stephango.com/photoshop-for-text\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://stephango.com/assets/covers/photoshop-for-text.png\" alt=\"Photoshop for text — In the near future, transforming text over an entire document will become as commonplace as filtering images.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePhotoshop for text\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn the near future, transforming text over an entire document will become as commonplace as filtering images.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSteph Ango \u0026middot; stephango.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWhile the non deterministic nature of llms scare the heck out of me in the sense of just cutting it loose on my writing.  letting it go through all of my files and just edit them.  I do like the idea of mundane tools like \"desaturate\", \"Gaussian blur\", evolving out of it for text.  I don't yet see this with the tools we have now, but it will be interesting to see them evolve.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stephango.com/photoshop-for-text",
      "date_published": "2026-01-06T02:48:34Z",
      "date_modified": "2026-01-06T02:48:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "writing",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-901/",
      "url": "https://go.waylonwalker.com/thought-901/",
      "title": "💭 File over app — Steph Ango",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stephango.com/file-over-app\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://stephango.com/assets/covers/file-over-app.png\" alt=\"File over app — If you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you...\" loading=\"lazy\"/ data-glightbox=\"description: File over app — If you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFile over app\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSteph Ango · stephango.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003efile over app is a fantastic philosophy laid out well and concisely documented very well in this post.  The idea is that tools will change, we will want to use different tools, different editors, different computers over time.  What’s likely to outlast everything is plain text files that we can interact with a wide variety of tools.  Not encrypted in dedicated formats that die with our tools, but in plain text where a computer from 2160 is likey as capable of reading the file as one from 1960 would be.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stephango.com/file-over-app\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://stephango.com/assets/covers/file-over-app.png\" alt=\"File over app — If you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFile over app\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSteph Ango \u0026middot; stephango.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nfile over app is a fantastic philosophy laid out well and concisely documented very well in this post.  The idea is that tools will change, we will want to use different tools, different editors, different computers over time.  What's likely to outlast everything is plain text files that we can interact with a wide variety of tools.  Not encrypted in dedicated formats that die with our tools, but in plain text where a computer from 2160 is likey as capable of reading the file as one from 1960 would be.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stephango.com/file-over-app",
      "date_published": "2026-01-05T18:54:06Z",
      "date_modified": "2026-01-05T18:54:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "writing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tpope-vim-speeddating/",
      "url": "https://go.waylonwalker.com/tpope-vim-speeddating/",
      "title": "⭐ tpope vim-speeddating",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/tpope/vim-speeddating\" 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\"\u003evim-speeddating\u003c/a\u003e by \u003ca href=\"https://github.com/tpope\" 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\"\u003etpope\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003espeeddating.vim: use CTRL-A/CTRL-X to increment dates, times, and more\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [vim-speeddating](https://github.com/tpope/vim-speeddating) by [tpope](https://github.com/tpope), and it's truly impressive.\n\nspeeddating.vim: use CTRL-A/CTRL-X to increment dates, times, and more\n",
      "summary": "I recently discovered vim-speeddating by tpope, and it's truly impressive.",
      "date_published": "2026-01-04T23:10:42Z",
      "date_modified": "2026-01-04T23:10:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jakoolit-wallpaper-bank/",
      "url": "https://go.waylonwalker.com/jakoolit-wallpaper-bank/",
      "title": "⭐ JaKooLit Wallpaper-Bank",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/JaKooLit\" 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\"\u003eJaKooLit\u003c/a\u003e and their project \u003ca href=\"https://github.com/JaKooLit/Wallpaper-Bank\" 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\"\u003eWallpaper-Bank\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAdditional wallpapers which will be offered to users for my hyprland scripts\u003c/p\u003e\n",
      "content_text": "\nCheck out [JaKooLit](https://github.com/JaKooLit) and their project [Wallpaper-Bank](https://github.com/JaKooLit/Wallpaper-Bank).\n\nAdditional wallpapers which will be offered to users for my hyprland scripts\n",
      "summary": "Check out JaKooLit and their project Wallpaper-Bank.",
      "date_published": "2026-01-04T21:41:57Z",
      "date_modified": "2026-01-04T21:41:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/til/tpope-vim-speeddating/",
      "url": "https://go.waylonwalker.com/til/tpope-vim-speeddating/",
      "title": "tpope vim-speeddating",
      "content_html": "\u003cp\u003eToday I discovered \u003ca href=\"https://github.com/tpope/vim-speeddating\" 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\"\u003evim-speeddating\u003c/a\u003e\nby tpope.  I’m sure I’ve seen years ago but it did not click for my workflow\nuntil today.  I often go through pictures from my phone for the past few days\nand make \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 posts, but I want to date them to about when the image was\ntaken most of the time.  This allows me to quickly bump days up and down using\n\u003ccode\u003ec-a\u003c/code\u003e and \u003ccode\u003ec-x\u003c/code\u003e even around the new year.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4\" type=\"video/mp4\"\u003eYour browser does not support the video tag.\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSound on, listen to those new switches.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nToday I discovered [vim-speeddating](https://github.com/tpope/vim-speeddating)\nby tpope.  I'm sure I've seen years ago but it did not click for my workflow\nuntil today.  I often go through pictures from my phone for the past few days\nand make \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 posts, but I want to date them to about when the image was\ntaken most of the time.  This allows me to quickly bump days up and down using\n`c-a` and `c-x` even around the new year.\n\n![](https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4)\n\n\u003e Sound on, listen to those new switches.\n\n\n",
      "summary": "Today I discovered vim-speeddating by tpope. I'm sure I've seen years ago but it did not click for my workflow until today. I often go through pictures from...",
      "date_published": "2026-01-04T16:59:33Z",
      "date_modified": "2026-01-04T16:59:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-900/",
      "url": "https://go.waylonwalker.com/thought-900/",
      "title": "💭 The most popular blogs of Hacker News in 2025",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Jan/2/most-popular-blogs-of-hacker-news/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe most popular blogs of Hacker News in 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMichael Lynch maintains HN Popularity Contest, a site that tracks personal blogs on Hacker News and scores them based on how well they perform on that platform. The engine behind …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCongrats Simon!  Well deserved metric for the level of content that he produces, Its remarkable the amount of high quality posts that come out of Simon Willison.  Also this looks like a really great resource to find other high quality blogs that I have not read before.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2026/Jan/2/most-popular-blogs-of-hacker-news/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe most popular blogs of Hacker News in 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMichael Lynch maintains HN Popularity Contest, a site that tracks personal blogs on Hacker News and scores them based on how well they perform on that platform. The engine behind …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCongrats Simon!  Well deserved metric for the level of content that he produces, Its remarkable the amount of high quality posts that come out of Simon Willison.  Also this looks like a really great resource to find other high quality blogs that I have not read before.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2026/Jan/2/most-popular-blogs-of-hacker-news/#atom-everything",
      "date_published": "2026-01-03T18:14:32Z",
      "date_modified": "2026-01-03T18:14:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/steveyegge-gastown/",
      "url": "https://go.waylonwalker.com/steveyegge-gastown/",
      "title": "⭐ steveyegge gastown",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/steveyegge/gastown\" 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\"\u003egastown\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/steveyegge\" 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\"\u003esteveyegge\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eGas Town - multi-agent workspace manager\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [gastown](https://github.com/steveyegge/gastown), an amazing project by [steveyegge](https://github.com/steveyegge). It's worth exploring!\n\nGas Town - multi-agent workspace manager\n",
      "summary": "I'm really excited about gastown, an amazing project by steveyegge. It's worth exploring!",
      "date_published": "2026-01-02T18:43:02Z",
      "date_modified": "2026-01-02T18:43:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/light-mode-screen-recording-css/",
      "url": "https://go.waylonwalker.com/light-mode-screen-recording-css/",
      "title": "light mode screen recording css",
      "content_html": "\u003cp\u003eYesterday I wrote about a way to do \u003ca href=\"/light-mode-screen-recording/\" class=\"wikilink\" data-title=\"light mode screen recording\" data-description=\"I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...\" data-date=\"2026-01-01\" data-preview=\"I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...\"\u003elight mode screen recording\u003c/a\u003e to\nconvert to light mode from dark mode with ffmpeg.  I was wondering if it could\nbe done entirely on the front end for web applications.  Turns out you can.\nI’m sure there are limited wikis and site builders that don’t allow adding\nstyle like this, but it works if you can.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003evideo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003econtrols\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003evideo\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls=\"\" style=\"filter: invert(1) hue-rotate(0deg) contrast(1.2) saturate(1.1);\"\u003e\u003c/video\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0 deg hue rotate\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls=\"\" style=\"filter: invert(1) hue-rotate(90deg) contrast(1.2) saturate(1.1);\"\u003e\u003c/video\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e90 deg hue rotate\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls=\"\" style=\"filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);\"\u003e\u003c/video\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e180 deg hue rotate\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls=\"\" style=\"filter: invert(1) hue-rotate(270deg) contrast(1.2) saturate(1.1);\"\u003e\u003c/video\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e270 deg hue rotate\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nYesterday I wrote about a way to do \u003ca href=\"/light-mode-screen-recording/\" class=\"wikilink\" data-title=\"light mode screen recording\" data-description=\"I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...\" data-date=\"2026-01-01\"\u003elight mode screen recording\u003c/a\u003e to\nconvert to light mode from dark mode with ffmpeg.  I was wondering if it could\nbe done entirely on the front end for web applications.  Turns out you can.\nI'm sure there are limited wikis and site builders that don't allow adding\nstyle like this, but it works if you can.\n\n``` html\n\u003cvideo\n    src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\"\n    controls\n    style=\"filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);\"\n    \u003e\n\u003c/video\u003e\n```\n\n\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls style=\"filter: invert(1) hue-rotate(0deg) contrast(1.2) saturate(1.1);\" \u003e\u003c/video\u003e\n\n\u003e 0 deg hue rotate\n\n\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls style=\"filter: invert(1) hue-rotate(90deg) contrast(1.2) saturate(1.1);\" \u003e\u003c/video\u003e\n\n\u003e 90 deg hue rotate\n\n\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls style=\"filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);\" \u003e\u003c/video\u003e\n\n\u003e 180 deg hue rotate\n\n\u003cvideo src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800\" controls style=\"filter: invert(1) hue-rotate(270deg) contrast(1.2) saturate(1.1);\" \u003e\u003c/video\u003e\n\n\u003e 270 deg hue rotate\n\n",
      "summary": "Yesterday I wrote about a way to do light-mode-screen-recording to convert to light mode from dark mode with ffmpeg. I was wondering if it could be done...",
      "date_published": "2026-01-02T10:29:10Z",
      "date_modified": "2026-01-02T10:29:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-99/",
      "url": "https://go.waylonwalker.com/theprimeagen-99/",
      "title": "⭐ ThePrimeagen 99",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ThePrimeagen/99\" 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\"\u003e99\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNeovim AI agent done right\u003c/p\u003e\n",
      "content_text": "\nCheck out [99](https://github.com/ThePrimeagen/99) by [ThePrimeagen](https://github.com/ThePrimeagen). It's a well-crafted project with great potential.\n\nNeovim AI agent done right\n",
      "summary": "Check out 99 by ThePrimeagen. It's a well-crafted project with great potential.",
      "date_published": "2026-01-02T04:36:11Z",
      "date_modified": "2026-01-02T04:36:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-899/",
      "url": "https://go.waylonwalker.com/thought-899/",
      "title": "💭 Convert a video from dark mode to light mode with FFmpeg!",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/ffmpeg-dark-light/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/ffmpeg-dark-light.png\" alt=\"Convert a video from dark mode to light mode with FFmpeg! — Here\" loading=\"lazy\"/ data-glightbox=\"description: Convert a video from dark mode to light mode with FFmpeg! — Here\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eConvert a video from dark mode to light mode with FFmpeg!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHere\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eConverting video from dark mode to light mode after the fact is a pretty great idea, I’m surprised at how well it does.  Its definitely not perfect, but looks really good.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/ffmpeg-dark-light/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/ffmpeg-dark-light.png\" alt=\"Convert a video from dark mode to light mode with FFmpeg! — Here\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eConvert a video from dark mode to light mode with FFmpeg!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHere\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nConverting video from dark mode to light mode after the fact is a pretty great idea, I'm surprised at how well it does.  Its definitely not perfect, but looks really good.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/ffmpeg-dark-light/",
      "date_published": "2026-01-01T18:00:56Z",
      "date_modified": "2026-01-01T18:00:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "ffmpeg",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/light-mode-screen-recording/",
      "url": "https://go.waylonwalker.com/light-mode-screen-recording/",
      "title": "light mode screen recording",
      "content_html": "\u003cp\u003eI saw this tip from\n\u003ca href=\"https://cassidoo.co/post/ffmpeg-dark-light/\" 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\"\u003eCassidoo\u003c/a\u003e\nand had to try it out for myself.  I kicked on a\nscreen recording right from where my terminal\nwas, converted it, and it actually looks pretty\ngood.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003effmpeg \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   -i screenrecording-2026-01-01_10-10-49.mp4 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   -vf \u003cspan class=\"s2\"\u003e\u0026#34;negate,hue=h=180,eq=contrast=1.2:saturation=1.1\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   screenrecording-2026-01-01_10-10-49-light.mp4\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4\" type=\"video/mp4\"\u003eYour browser does not support the video tag.\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDark Mode\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.mp4\" type=\"video/mp4\"\u003eYour browser does not support the video tag.\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLight Mode\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThere are a few unsettling things about it, but\noverall I feel like it was a success.\u003c/p\u003e\n",
      "content_text": "\n\n\nI saw this tip from\n[Cassidoo](https://cassidoo.co/post/ffmpeg-dark-light/)\nand had to try it out for myself.  I kicked on a\nscreen recording right from where my terminal\nwas, converted it, and it actually looks pretty\ngood.\n\n\n``` bash\nffmpeg \\\n   -i screenrecording-2026-01-01_10-10-49.mp4 \\\n   -vf \"negate,hue=h=180,eq=contrast=1.2:saturation=1.1\" \\\n   screenrecording-2026-01-01_10-10-49-light.mp4\n```\n\n![](https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4)\n\n\u003e Dark Mode\n\n![](https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.mp4)\n\n\u003e Light Mode\n\nThere are a few unsettling things about it, but\noverall I feel like it was a success.\n\n",
      "summary": "I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...",
      "date_published": "2026-01-01T10:14:17Z",
      "date_modified": "2026-01-01T10:14:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ffmpeg",
        "dev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-898/",
      "url": "https://go.waylonwalker.com/thought-898/",
      "title": "💭 RAM Prices Are Getting Worse - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"R5B0fjG55Fw\" title=\"RAM Prices Are Getting Worse\" playlabel=\"Play: RAM Prices Are Getting Worse\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI actually like linus’s take here.  My parents dropped $4k (~$8k in todays money) on a computer when I was a kid, (which turned into something too $$ to let me touch at that point).  I played some educational games that no one else has heard of and I’ve long forgotten along with an early ciivilization game.  It was e-waste in 2 years we maybe kept it 5, and it was barely working.  Contrast this to my PC now I spent $2k on 3 years ago refurb from 2017, and it has no signs of age from me, does everything I need it to.  Ram crisis sucks, the outright reason behind it sucks.  But on the bright side you can still get a baller build for less than you could late 90s without inflation.  The industry is not there for consumers right now, we had better times, but its still not bad times.  Keep the hope alive that good times will come.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"R5B0fjG55Fw\" title=\"RAM Prices Are Getting Worse\" playlabel=\"Play: RAM Prices Are Getting Worse\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI actually like linus's take here.  My parents dropped $4k (~$8k in todays money) on a computer when I was a kid, (which turned into something too $$ to let me touch at that point).  I played some educational games that no one else has heard of and I've long forgotten along with an early ciivilization game.  It was e-waste in 2 years we maybe kept it 5, and it was barely working.  Contrast this to my PC now I spent $2k on 3 years ago refurb from 2017, and it has no signs of age from me, does everything I need it to.  Ram crisis sucks, the outright reason behind it sucks.  But on the bright side you can still get a baller build for less than you could late 90s without inflation.  The industry is not there for consumers right now, we had better times, but its still not bad times.  Keep the hope alive that good times will come.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=R5B0fjG55Fw",
      "date_published": "2025-12-24T02:34:55Z",
      "date_modified": "2025-12-24T02:34:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "pc",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-897/",
      "url": "https://go.waylonwalker.com/thought-897/",
      "title": "💭 Smartphones are black holes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kerkour.com/smartphones-blackhole\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://kerkour.com/icon-256.png\" alt=\"Smartphones are black holes — They can bend spacetime without you even realizing it. People often get offended when I tell them that I don\u0026amp;#39;t have a phone, thinking that I\u0026amp;#39;m lying and I just\" loading=\"lazy\"/ data-glightbox=\"description: Smartphones are black holes — They can bend spacetime without you even realizing it. People often get offended when I tell them that I don\u0026amp;#39;t have a phone, thinking that I\u0026amp;#39;m lying and I just\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSmartphones are black holes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThey can bend spacetime without you even realizing it. People often get offended when I tell them that I don\u0026amp;#39;t have a phone, thinking that I\u0026amp;#39;m lying and I just\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSylvain Kerkour · kerkour.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis sounds great…. I’m sick AF right now and dont want to do anything but watch YouTube, and let opencode do my work.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kerkour.com/smartphones-blackhole\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://kerkour.com/icon-256.png\" alt=\"Smartphones are black holes — They can bend spacetime without you even realizing it. People often get offended when I tell them that I don\u0026amp;#39;t have a phone, thinking that I\u0026amp;#39;m lying and I just\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSmartphones are black holes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThey can bend spacetime without you even realizing it. People often get offended when I tell them that I don\u0026amp;#39;t have a phone, thinking that I\u0026amp;#39;m lying and I just\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSylvain Kerkour \u0026middot; kerkour.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis sounds great.... I'm sick AF right now and dont want to do anything but watch YouTube, and let opencode do my work.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kerkour.com/smartphones-blackhole",
      "date_published": "2025-12-24T02:29:01Z",
      "date_modified": "2025-12-24T02:29:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "social-media",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jdx-usage/",
      "url": "https://go.waylonwalker.com/jdx-usage/",
      "title": "⭐ jdx usage",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/jdx/usage\" 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\"\u003eusage\u003c/a\u003e by \u003ca href=\"https://github.com/jdx\" 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\"\u003ejdx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA specification for CLIs\u003c/p\u003e\n",
      "content_text": "\nThe work on [usage](https://github.com/jdx/usage) by [jdx](https://github.com/jdx).\n\nA specification for CLIs\n",
      "summary": "The work on usage by jdx.",
      "date_published": "2025-12-22T16:42:40Z",
      "date_modified": "2025-12-22T16:42:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jdx-pitchfork/",
      "url": "https://go.waylonwalker.com/jdx-pitchfork/",
      "title": "⭐ jdx pitchfork",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/jdx/pitchfork\" 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\"\u003epitchfork\u003c/a\u003e from \u003ca href=\"https://github.com/jdx\" 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\"\u003ejdx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDaemons with DX\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pitchfork](https://github.com/jdx/pitchfork) from [jdx](https://github.com/jdx).\n\nDaemons with DX\n",
      "summary": "I'm impressed by pitchfork from jdx.",
      "date_published": "2025-12-22T16:42:37Z",
      "date_modified": "2025-12-22T16:42:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-896/",
      "url": "https://go.waylonwalker.com/thought-896/",
      "title": "💭 Using stderr/stdout correctly - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"XDAfpzjBYJQ\" title=\"Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools\" playlabel=\"Play: Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYeah there’s some basics, you know things you might expect like using standard error and standard out correctly. One thing I’ll say on that because I think this is commonly misunderstood, standard error is not for errors, it’s for any information that isn’t part of the normal output. So you know often times that’s warnings and errors, but it might just be progress information. You know anytime that you just need to have something go to the user that’s what it’s there for.\u0026#34; (6:15 - 6:42)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI’ve definitely done this sin in my own tooling before, and it does make things harder to use.  I think I still take err/out at face value.  I really like the translation Jeff gave here, one is for normal output, i.e. what the user asked for and the other is extra information.  So if I wanted to list something and pipe it into something else, stdout only captures the list, thats it.  if you have a bunch of information about config warnings, showing environment, are you sure questions, none of that is captured.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"XDAfpzjBYJQ\" title=\"Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools\" playlabel=\"Play: Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n\u003e Yeah there's some basics, you know things you might expect like using standard error and standard out correctly. One thing I'll say on that because I think this is commonly misunderstood, standard error is not for errors, it's for any information that isn't part of the normal output. So you know often times that's warnings and errors, but it might just be progress information. You know anytime that you just need to have something go to the user that's what it's there for.\" (6:15 - 6:42)\n\nI've definitely done this sin in my own tooling before, and it does make things harder to use.  I think I still take err/out at face value.  I really like the translation Jeff gave here, one is for normal output, i.e. what the user asked for and the other is extra information.  So if I wanted to list something and pipe it into something else, stdout only captures the list, thats it.  if you have a bunch of information about config warnings, showing environment, are you sure questions, none of that is captured.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtu.be/XDAfpzjBYJQ?t=353",
      "date_published": "2025-12-22T15:35:30Z",
      "date_modified": "2025-12-22T15:35:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/big-slow-diskcache/",
      "url": "https://go.waylonwalker.com/big-slow-diskcache/",
      "title": "big slow diskcache",
      "content_text": "\n",
      "date_published": "2025-12-22T14:12:26Z",
      "date_modified": "2025-12-22T14:12:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/youtube-gemini-is-actually-useful/",
      "url": "https://go.waylonwalker.com/youtube-gemini-is-actually-useful/",
      "title": "YouTube Gemini is Actually Useful",
      "content_html": "\u003cp\u003eI’ve found Gemini to be very useful lately, especially for finding information\nwithin long form content.\u003c/p\u003e\n\u003cp\u003eWhen writing \u003ca href=\"https://thoughts.waylonwalker.com/post/896\" 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\"\u003ethought-896\u003c/a\u003e, I\nwanted to use a direct quote from Jeff Dickey, Gemini popped it out very\nquickly.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egive me a quote from jeff just before the timestamp I\u0026#39;m at the interviewer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003easked what makes a good cli and he started talking about stdout/stderr\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn another case, my wife and I are huge Good Eats fans.  Alton Brown taught us\nhow to cook during college and on.  We watched every single good eats episode\nnearly 10 years after they aired.  He is back with some updates to those those\nshows on his Youtube.  Gemini gives very good detailed responses with\ntimestamps.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAlton Brown had a recent YouTube video for cooking turkey. Can you get the\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einstructions from the video?\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've found Gemini to be very useful lately, especially for finding information\nwithin long form content.\n\nWhen writing [thought-896](https://thoughts.waylonwalker.com/post/896), I\nwanted to use a direct quote from Jeff Dickey, Gemini popped it out very\nquickly.\n\n``` md\ngive me a quote from jeff just before the timestamp I'm at the interviewer\nasked what makes a good cli and he started talking about stdout/stderr\n```\n\nIn another case, my wife and I are huge Good Eats fans.  Alton Brown taught us\nhow to cook during college and on.  We watched every single good eats episode\nnearly 10 years after they aired.  He is back with some updates to those those\nshows on his Youtube.  Gemini gives very good detailed responses with\ntimestamps.\n\n``` md\nAlton Brown had a recent YouTube video for cooking turkey. Can you get the\ninstructions from the video?\n```\n\n",
      "summary": "I've found Gemini to be very useful lately, especially for finding information within long form content.",
      "date_published": "2025-12-22T10:09:55Z",
      "date_modified": "2025-12-22T10:09:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jdx-mise/",
      "url": "https://go.waylonwalker.com/jdx-mise/",
      "title": "⭐ jdx mise",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/jdx/mise\" 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\"\u003emise\u003c/a\u003e by \u003ca href=\"https://github.com/jdx\" 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\"\u003ejdx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003edev tools, env vars, task runner\u003c/p\u003e\n",
      "content_text": "\nThe work on [mise](https://github.com/jdx/mise) by [jdx](https://github.com/jdx).\n\ndev tools, env vars, task runner\n",
      "summary": "The work on mise by jdx.",
      "date_published": "2025-12-21T16:18:10Z",
      "date_modified": "2025-12-21T16:18:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/maxteabag-sqlit/",
      "url": "https://go.waylonwalker.com/maxteabag-sqlit/",
      "title": "⭐ Maxteabag sqlit",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Maxteabag\" 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\"\u003eMaxteabag\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/Maxteabag/sqlit\" 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\"\u003esqlit\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA user friendly TUI for SQL databases. Written in python. Supports SQL server, Mysql, PostreSQL and SQLite, Turso and more.\u003c/p\u003e\n",
      "content_text": "\n[Maxteabag](https://github.com/Maxteabag) has done a fantastic job with [sqlit](https://github.com/Maxteabag/sqlit). Highly recommend taking a look.\n\nA user friendly TUI for SQL databases. Written in python. Supports SQL server, Mysql, PostreSQL and SQLite, Turso and more.\n",
      "summary": "Maxteabag has done a fantastic job with sqlit. Highly recommend taking a look.",
      "date_published": "2025-12-21T05:47:39Z",
      "date_modified": "2025-12-21T05:47:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/webinstall-webi-installers/",
      "url": "https://go.waylonwalker.com/webinstall-webi-installers/",
      "title": "⭐ webinstall webi-installers",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/webinstall/webi-installers\" 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\"\u003ewebi-installers\u003c/a\u003e by \u003ca href=\"https://github.com/webinstall\" 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\"\u003ewebinstall\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003ePrimary and community-submitted packages for webinstall.dev\u003c/p\u003e\n",
      "content_text": "\n[webi-installers](https://github.com/webinstall/webi-installers) by [webinstall](https://github.com/webinstall) is a game-changer in its space. Excited to see how it evolves.\n\nPrimary and community-submitted packages for webinstall.dev\n",
      "summary": "webi-installers by webinstall is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-12-20T19:52:27Z",
      "date_modified": "2025-12-20T19:52:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-895/",
      "url": "https://go.waylonwalker.com/thought-895/",
      "title": "💭 You Might Also Like: My Notes Blog - Jim Nielsen’s Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/you-might-also-like-my-notes-blog/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYou Might Also Like: My Notes Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI really like a good link blog, it’s the old timers version of a reaction video.  It gives me new posts to discover from other writers, and gives additional perspectives from ones I trust enough to add to my RSS.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt’s nice to have a place where I can jot down a few notes, fire off my reaction, and nobody can respond to it lol. At least, not in any easy, friction-less way. You’d have to go out of your way to read my commentary, find my contact info, and fire off a message (critiquing or praising). That’s how I like it. Cuts through the noise.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDitto Jim.  I’ve oddly found mine more useful to search than blog posts, zettlekaten, notes, whatever you want to call them.  For me writing something down makes it more concrete in my brain that I’m less likely to need to go reference, but I often need to re read or references posts from others, this is where \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 comes in handy for me\u003c/p\u003e\n\u003cp\u003eLike Jim I have a bunch of \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 you can subscribe to if you want some or all of my stuff, but I aggregate everything to the same root site.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/you-might-also-like-my-notes-blog/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYou Might Also Like: My Notes Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI really like a good link blog, it's the old timers version of a reaction video.  It gives me new posts to discover from other writers, and gives additional perspectives from ones I trust enough to add to my RSS.\n\n\u003e It’s nice to have a place where I can jot down a few notes, fire off my reaction, and nobody can respond to it lol. At least, not in any easy, friction-less way. You’d have to go out of your way to read my commentary, find my contact info, and fire off a message (critiquing or praising). That’s how I like it. Cuts through the noise.\n\nDitto Jim.  I've oddly found mine more useful to search than blog posts, zettlekaten, notes, whatever you want to call them.  For me writing something down makes it more concrete in my brain that I'm less likely to need to go reference, but I often need to re read or references posts from others, this is where \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 comes in handy for me \n\nLike Jim I have a bunch of \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 you can subscribe to if you want some or all of my stuff, but I aggregate everything to the same root site.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2025/you-might-also-like-my-notes-blog/",
      "date_published": "2025-12-19T16:11:31Z",
      "date_modified": "2025-12-19T16:11:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nginx-accepts-markdown/",
      "url": "https://go.waylonwalker.com/nginx-accepts-markdown/",
      "title": "nginx accepts markdown",
      "content_text": "\n",
      "date_published": "2025-12-18T15:31:49Z",
      "date_modified": "2025-12-18T15:31:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-894/",
      "url": "https://go.waylonwalker.com/thought-894/",
      "title": "💭 “You should never build a CMS” | Sanity",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.sanity.io/blog/you-should-never-build-a-cms\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.sanity.io/static/images/opengraph/social.png\" alt=\"“You should never build a CMS” | Sanity — Lee Robinson migrated cursor.com off Sanity. He made good points. Here\u0026#39;s what he missed.\" loading=\"lazy\"/ data-glightbox=\"description: “You should never build a CMS” | Sanity — Lee Robinson migrated cursor.com off Sanity. He made good points. Here\u0026#39;s what he missed.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e“You should never build a CMS” | Sanity\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLee Robinson migrated cursor.com off Sanity. He made good points. Here\u0026#39;s what he missed.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSanity.io · sanity.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSuch a good breakdown of the leerob article, that is hitting everywhere right now.  Feels like sanity was just a bit late to getting things right and it would have just worked for them how leerob was trying to use it, but MCP sucked so he jumped.\u003c/p\u003e\n\u003cp\u003eReading their loose descriptions of a CMS, its an interesting realization to realize I’m rolling my own cms.  I kinda feel like theres a few inspiration features to take from here, but I have no regrets.  As a developer I like being able to build my own tools, I like being able to search and edit from nvim, and not have to write GROQ queries, and transforms.  There were some really good points here that as I get more and more content on my personal site, I do kinda feel it.  I’m surprised there is not more tooling that does some of these things for piles of markdown.\u003c/p\u003e\n\u003cp\u003epinning this to re-read later, feels like a lot of good tidbits here.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.sanity.io/blog/you-should-never-build-a-cms\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.sanity.io/static/images/opengraph/social.png\" alt=\"“You should never build a CMS” | Sanity — Lee Robinson migrated cursor.com off Sanity. He made good points. Here\u0026#39;s what he missed.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e“You should never build a CMS” | Sanity\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLee Robinson migrated cursor.com off Sanity. He made good points. Here\u0026#39;s what he missed.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSanity.io \u0026middot; sanity.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSuch a good breakdown of the leerob article, that is hitting everywhere right now.  Feels like sanity was just a bit late to getting things right and it would have just worked for them how leerob was trying to use it, but MCP sucked so he jumped.\n\nReading their loose descriptions of a CMS, its an interesting realization to realize I'm rolling my own cms.  I kinda feel like theres a few inspiration features to take from here, but I have no regrets.  As a developer I like being able to build my own tools, I like being able to search and edit from nvim, and not have to write GROQ queries, and transforms.  There were some really good points here that as I get more and more content on my personal site, I do kinda feel it.  I'm surprised there is not more tooling that does some of these things for piles of markdown.\n\npinning this to re-read later, feels like a lot of good tidbits here.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.sanity.io/blog/you-should-never-build-a-cms",
      "date_published": "2025-12-17T15:21:41Z",
      "date_modified": "2025-12-17T15:21:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "markdown",
        "cms",
        "later",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-893/",
      "url": "https://go.waylonwalker.com/thought-893/",
      "title": "💭 The Github Tax (I can't believe they actually did this...) - Y...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"xTSar1SEmIU\" title=\"The Github Tax (I can\u0026#39;t believe they actually did this...)\" playlabel=\"Play: The Github Tax (I can\u0026#39;t believe they actually did this...)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eIt really feels like M$ is coming down hard on GH lately to make some unfavorable decisions for users.  Maybe there is good reason for all of these changes from a business perspective, I can’t judge that.  But right now there are some really great alternatives out there.  I’m so grateful for what forgejo and gittea offer, and at the same time seeing the community get split up from GH is sad.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"xTSar1SEmIU\" title=\"The Github Tax (I can\u0026#39;t believe they actually did this...)\" playlabel=\"Play: The Github Tax (I can\u0026#39;t believe they actually did this...)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nIt really feels like M$ is coming down hard on GH lately to make some unfavorable decisions for users.  Maybe there is good reason for all of these changes from a business perspective, I can't judge that.  But right now there are some really great alternatives out there.  I'm so grateful for what forgejo and gittea offer, and at the same time seeing the community get split up from GH is sad.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=xTSar1SEmIU",
      "date_published": "2025-12-17T15:04:09Z",
      "date_modified": "2025-12-17T15:04:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-892/",
      "url": "https://go.waylonwalker.com/thought-892/",
      "title": "💭 Hollow Knight: Silksong - Sea of Sorrow Teaser",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qDFEeeLy6ws\" title=\"Hollow Knight: Silksong - Sea of Sorrow Teaser\" playlabel=\"Play: Hollow Knight: Silksong - Sea of Sorrow Teaser\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eSilksong DLC announcement already, we waited 8 years for the game, and are getting DLC’s months after launch.  Dudes I haven’t even finished the game get, maybe not even half way.  It’s amazing.  Its amazing that these three make such a kick ass game with great art, story, voice, gameplay, and now drop a free dlc in 2026.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qDFEeeLy6ws\" title=\"Hollow Knight: Silksong - Sea of Sorrow Teaser\" playlabel=\"Play: Hollow Knight: Silksong - Sea of Sorrow Teaser\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nSilksong DLC announcement already, we waited 8 years for the game, and are getting DLC's months after launch.  Dudes I haven't even finished the game get, maybe not even half way.  It's amazing.  Its amazing that these three make such a kick ass game with great art, story, voice, gameplay, and now drop a free dlc in 2026.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=qDFEeeLy6ws",
      "date_published": "2025-12-16T04:28:37Z",
      "date_modified": "2025-12-16T04:28:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/numbered-posts-in-obsidian/",
      "url": "https://go.waylonwalker.com/numbered-posts-in-obsidian/",
      "title": "numbered posts in obsidian",
      "content_html": "\u003cp\u003eI’ve been using this one for awhile now, I have a post type that I only edit\nfrom my phone, but I have all the post numbered.  I set up a template in\nobsidian for using templater, the template goes right in the static site repo,\nI point templater to the templates directory and this has been working pretty\nseamlessly for awhile.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate: \u0026lt;% tp.date.now(\u0026#34;YYYY-MM-DD HH:mm:ss\u0026#34;) %\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etemplateKey: myposttype\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epublished: true\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etags:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e myposttype\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;%*\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econst folder = \u0026#34;pages/myposttype\u0026#34;;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// get all files in the vault, keep only those inside the folder\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econst files = app.vault.getFiles().filter(f =\u0026gt; f.path.startsWith(folder + \u0026#34;/\u0026#34;));\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// extract numeric suffixes from filenames like myposttype-123.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econst nums = files.map(f =\u0026gt; {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  const m = f.basename.match(/^myposttype-(\\d+)$/);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  return m ? parseInt(m[1], 10) : null;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}).filter(n =\u0026gt; n !== null);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// next number (start at 1 if none exist)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econst next = (nums.length ? Math.max(...nums) : 0) + 1;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// include the .md extension when moving\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econst newPath = \u003cspan class=\"sb\"\u003e`${folder}/myposttype-${next}`\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eawait tp.file.move(newPath);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e%\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been using this one for awhile now, I have a post type that I only edit\nfrom my phone, but I have all the post numbered.  I set up a template in\nobsidian for using templater, the template goes right in the static site repo,\nI point templater to the templates directory and this has been working pretty\nseamlessly for awhile.\n\n``` md\n---\ndate: \u003c% tp.date.now(\"YYYY-MM-DD HH:mm:ss\") %\u003e\ntemplateKey: myposttype\npublished: true\ntags:\n- myposttype\n\u003c%*\nconst folder = \"pages/myposttype\";\n\n// get all files in the vault, keep only those inside the folder\nconst files = app.vault.getFiles().filter(f =\u003e f.path.startsWith(folder + \"/\"));\n\n// extract numeric suffixes from filenames like myposttype-123.md\nconst nums = files.map(f =\u003e {\n  const m = f.basename.match(/^myposttype-(\\d+)$/);\n  return m ? parseInt(m[1], 10) : null;\n}).filter(n =\u003e n !== null);\n\n// next number (start at 1 if none exist)\nconst next = (nums.length ? Math.max(...nums) : 0) + 1;\n\n// include the .md extension when moving\nconst newPath = `${folder}/myposttype-${next}`;\nawait tp.file.move(newPath);\n%\u003e\n---\n```\n",
      "summary": "I've been using this one for awhile now, I have a post type that I only edit from my phone, but I have all the post numbered. I set up a template in obsidian...",
      "date_published": "2025-12-13T22:28:28Z",
      "date_modified": "2025-12-13T22:28:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "obsidian"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-891/",
      "url": "https://go.waylonwalker.com/thought-891/",
      "title": "💭 AI, DevOps, and Kubernetes: Kelsey Hightower on What’s Next - ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"HdUbTyvrfKo\" title=\"AI, DevOps, and Kubernetes: Kelsey Hightower on What’s Next\" playlabel=\"Play: AI, DevOps, and Kubernetes: Kelsey Hightower on What’s Next\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eKelsey has a really good lightbulb moment here about platform engineering.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“if you had to do all the deployments for the entire company what questions would you ask of the development team?”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThat’s your api, your platform, this is your product as a platform engineer.  It’s not images, docker, terraform, hcl, yaml, kubernetes, It’s building out the right api for your company to deploy its products effectively.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=HdUbTyvrfKo\u0026amp;t=429s\" 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\"\u003ehttps://www.youtube.com/watch?v=HdUbTyvrfKo\u0026amp;t=429s\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003etimestamped\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"HdUbTyvrfKo\" title=\"AI, DevOps, and Kubernetes: Kelsey Hightower on What’s Next\" playlabel=\"Play: AI, DevOps, and Kubernetes: Kelsey Hightower on What’s Next\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nKelsey has a really good lightbulb moment here about platform engineering.\n\n\u003e \"if you had to do all the deployments for the entire company what questions would you ask of the development team?\"\n\nThat's your api, your platform, this is your product as a platform engineer.  It's not images, docker, terraform, hcl, yaml, kubernetes, It's building out the right api for your company to deploy its products effectively.\n\nhttps://www.youtube.com/watch?v=HdUbTyvrfKo\u0026t=429s\n\n\u003e timestamped\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=HdUbTyvrfKo",
      "date_published": "2025-12-13T04:07:15Z",
      "date_modified": "2025-12-13T04:07:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/andrii-kryvoviaz-slink/",
      "url": "https://go.waylonwalker.com/andrii-kryvoviaz-slink/",
      "title": "⭐ andrii-kryvoviaz slink",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/andrii-kryvoviaz\" 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\"\u003eandrii-kryvoviaz\u003c/a\u003e and their project \u003ca href=\"https://github.com/andrii-kryvoviaz/slink\" 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\"\u003eslink\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\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 image sharing service\u003c/p\u003e\n",
      "content_text": "\nCheck out [andrii-kryvoviaz](https://github.com/andrii-kryvoviaz) and their project [slink](https://github.com/andrii-kryvoviaz/slink).\n\nSelf-hosted image sharing service\n",
      "summary": "Check out andrii-kryvoviaz and their project slink.",
      "date_published": "2025-12-12T13:40:24Z",
      "date_modified": "2025-12-12T13:40:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-name-status/",
      "url": "https://go.waylonwalker.com/git-name-status/",
      "title": "git name status",
      "content_html": "\u003cp\u003e\u003ccode\u003e--name-status\u003c/code\u003e is a great way to see what files have changed in a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e diff\nalongside the status code.  I recently used this in a script to create a report\nof new and modified files during a build.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit diff --name-status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit diff --name-status origin/main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit diff --name-status --staged\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit diff --name-status \u003cspan class=\"s1\"\u003e\u0026#39;HEAD@{3 days ago}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n`--name-status` is a great way to see what files have changed in a git diff\nalongside the status code.  I recently used this in a script to create a report\nof new and modified files during a build.\n\n``` bash\ngit diff --name-status\ngit diff --name-status origin/main\ngit diff --name-status --staged\ngit diff --name-status 'HEAD@{3 days ago}'\n```\n",
      "summary": "is a great way to see what files have changed in a git diff alongside the status code. I recently used this in a script to create a report of new and...",
      "date_published": "2025-12-12T07:53:57Z",
      "date_modified": "2025-12-12T07:53:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/minecraft-server-memory/",
      "url": "https://go.waylonwalker.com/minecraft-server-memory/",
      "title": "minecraft server memory",
      "content_html": "\u003cp\u003eI learned to today that setting \u003ccode\u003eMEMORY\u003c/code\u003e on your minecraft server causes the\nJVM to egregiously allocate all of that memory.  Not setting it causes slow\ndowns and potential crashes, but setting \u003ccode\u003eINIT_MEMORY\u003c/code\u003e and \u003ccode\u003eMAX_MEMORY\u003c/code\u003e gives\nus the best of both worlds.  It is allowed to use more, but does not gobble it\nall up on startup.\u003c/p\u003e\n\u003cp\u003eIn this economy we need to save all the memory we can!\u003c/p\u003e\n\u003cp\u003eHere is a non-working snippet for a minecraft server deployment in kubernetes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edungeon\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eitzg/minecraft-server\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eEULA\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eINIT_MEMORY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;512M\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eMAX_MEMORY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;3G\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eand in docker compose\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edungeon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eitzg/minecraft-server\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eEULA\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eINIT_MEMORY\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;512M\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eMAX_MEMORY\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;3G\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI learned to today that setting `MEMORY` on your minecraft server causes the\nJVM to egregiously allocate all of that memory.  Not setting it causes slow\ndowns and potential crashes, but setting `INIT_MEMORY` and `MAX_MEMORY` gives\nus the best of both worlds.  It is allowed to use more, but does not gobble it\nall up on startup.\n\nIn this economy we need to save all the memory we can!\n\nHere is a non-working snippet for a minecraft server deployment in kubernetes.\n\n``` yaml\n      containers:\n        - name: dungeon\n          image: itzg/minecraft-server\n          env:\n            - name: EULA\n              value: \"true\"\n            - name: INIT_MEMORY\n              value: \"512M\"\n            - name: MAX_MEMORY\n              value: \"3G\"\n```\n\nand in docker compose\n\n``` yaml\n  dungeon:\n    image: itzg/minecraft-server\n    environment:\n      EULA: \"true\"\n      INIT_MEMORY: \"512M\"\n      MAX_MEMORY: \"3G\"\n```\n",
      "summary": "I learned to today that setting on your minecraft server causes the JVM to egregiously allocate all of that memory. Not setting it causes slow downs and...",
      "date_published": "2025-12-10T08:46:36Z",
      "date_modified": "2025-12-10T08:46:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "compose",
        "docker",
        "homelab",
        "minecraft"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-890/",
      "url": "https://go.waylonwalker.com/thought-890/",
      "title": "💭 Why is Everyone So Wrong About AI Water Use?? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"H_c6MWk7PQc\" title=\"Why is Everyone So Wrong About AI Water Use??\" playlabel=\"Play: Why is Everyone So Wrong About AI Water Use??\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI did not realize all the places to be considered as AI water usage.  Hank goes deep highlighting all of the sources he is aware of, most reports leave off a lot of these sources, some reports go maybe too far adding sources that may not make sense depending on the question you are asking.\u003c/p\u003e\n\u003cp\u003eAs someone that runs computers with gpus in their house, and watching LTT make AIO installs on GPUs I’ve wondered what would AI use water for, now I understand that its a lot. No where near agriculture, but a lot.\u003c/p\u003e\n\u003cp\u003eUnlike running a gpu in your house, potentially with a closed loop AIO, data centers are filled with hardware making heat and it all must go somewhere.  Current technology has this done with evaporative cooling, i.e. its not a closed loop, the water goes into the sky.\u003c/p\u003e\n\u003cp\u003eHe goes on to point out that its not just the data center, using water, but also chip fab and power plants.\u003c/p\u003e\n\u003cp\u003eSomething I hadn’t put a lot of thought into is the type of water.  While a lot of agriculture and power applications do not use municipal water, a lot of data centers do, putting excess strain on water treatment.\u003c/p\u003e\n\u003cp\u003eSomething I find interesting is that Altman is doing the same thing here that he does on his financial numbers.  Stating they use almost nothing on inference.  Missing training, missing training for models that turned out to be a flop and never made it anywhere, but they learned how to make better models from it.  Missing chip fab, construction, transportation, and power.  The way report numbers bases on a small subset of their entire business feels wrong.\u003c/p\u003e\n\u003cp\u003eAnyways Hank does a great job at saying this is not a simple answer, its complicated.  Things are moving so fast that its hard to be accurate, its hard for infrastructure to keep up.  There’s a lot more to think about than the water use on a single query.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"H_c6MWk7PQc\" title=\"Why is Everyone So Wrong About AI Water Use??\" playlabel=\"Play: Why is Everyone So Wrong About AI Water Use??\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI did not realize all the places to be considered as AI water usage.  Hank goes deep highlighting all of the sources he is aware of, most reports leave off a lot of these sources, some reports go maybe too far adding sources that may not make sense depending on the question you are asking.\n\nAs someone that runs computers with gpus in their house, and watching LTT make AIO installs on GPUs I've wondered what would AI use water for, now I understand that its a lot. No where near agriculture, but a lot.\n\nUnlike running a gpu in your house, potentially with a closed loop AIO, data centers are filled with hardware making heat and it all must go somewhere.  Current technology has this done with evaporative cooling, i.e. its not a closed loop, the water goes into the sky.\n\nHe goes on to point out that its not just the data center, using water, but also chip fab and power plants.\n\nSomething I hadn't put a lot of thought into is the type of water.  While a lot of agriculture and power applications do not use municipal water, a lot of data centers do, putting excess strain on water treatment.\n\nSomething I find interesting is that Altman is doing the same thing here that he does on his financial numbers.  Stating they use almost nothing on inference.  Missing training, missing training for models that turned out to be a flop and never made it anywhere, but they learned how to make better models from it.  Missing chip fab, construction, transportation, and power.  The way report numbers bases on a small subset of their entire business feels wrong.\n\nAnyways Hank does a great job at saying this is not a simple answer, its complicated.  Things are moving so fast that its hard to be accurate, its hard for infrastructure to keep up.  There's a lot more to think about than the water use on a single query.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=H_c6MWk7PQc",
      "date_published": "2025-12-09T14:39:18Z",
      "date_modified": "2025-12-09T14:39:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-889/",
      "url": "https://go.waylonwalker.com/thought-889/",
      "title": "💭 Notes – 05:09 Tue 9 Dec 2025 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-12-09T05:09Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 05:09 Tue 9 Dec 2025 — Notes – 05:09 Tue 9 Dec 2025\" loading=\"lazy\"/ data-glightbox=\"description: Notes – 05:09 Tue 9 Dec 2025 — Notes – 05:09 Tue 9 Dec 2025\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 05:09 Tue 9 Dec 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 05:09 Tue 9 Dec 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAge verification hitting bluesky?? At least its not yet requiring your govt issued id or anything, but stepping that direction.  I don’t know how I feel about age checks, does it actually protect kids when parents aren’t involved?  I can’t say anything there, but it really does feel like its about ready to hurt the rest of us, requiring us to whip out ids and personal data for anything done online.  This is a real problem that is hard to solve, and reasons why it has not been solved yet.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-12-09T05:09Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 05:09 Tue 9 Dec 2025 — Notes – 05:09 Tue 9 Dec 2025\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 05:09 Tue 9 Dec 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 05:09 Tue 9 Dec 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAge verification hitting bluesky?? At least its not yet requiring your govt issued id or anything, but stepping that direction.  I don't know how I feel about age checks, does it actually protect kids when parents aren't involved?  I can't say anything there, but it really does feel like its about ready to hurt the rest of us, requiring us to whip out ids and personal data for anything done online.  This is a real problem that is hard to solve, and reasons why it has not been solved yet.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/notes/2025-12-09T05:09Z/",
      "date_published": "2025-12-09T14:08:20Z",
      "date_modified": "2025-12-09T14:08:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "social",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-888/",
      "url": "https://go.waylonwalker.com/thought-888/",
      "title": "💭 Deprecations via warnings don’t work for Python libraries",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Dec/9/deprecations-via-warnings/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeprecations via warnings don’t work for Python libraries\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSeth Larson reports that urllib3 2.6.0 released on the 5th of December and finally removed the HTTPResponse.getheaders() and HTTPResponse.getheader(name, default) methods, which have been marked as...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDeprecation warnings are so easy to miss, ignore, become numb to.  Creating tools and processes to catch and address these issues is important.  I’m surprised such big projects let deprecations just hang around for years.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Dec/9/deprecations-via-warnings/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeprecations via warnings don’t work for Python libraries\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSeth Larson reports that urllib3 2.6.0 released on the 5th of December and finally removed the HTTPResponse.getheaders() and HTTPResponse.getheader(name, default) methods, which have been marked as...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDeprecation warnings are so easy to miss, ignore, become numb to.  Creating tools and processes to catch and address these issues is important.  I'm surprised such big projects let deprecations just hang around for years.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Dec/9/deprecations-via-warnings/#atom-everything",
      "date_published": "2025-12-09T14:01:29Z",
      "date_modified": "2025-12-09T14:01:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-887/",
      "url": "https://go.waylonwalker.com/thought-887/",
      "title": "💭 A quote from Claude",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Dec/9/claude/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Claude\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI found the problem and it\u0026#39;s really bad. Looking at your log, here\u0026#39;s the catastrophic command that was run: rm -rf tests/ patches/ plan/ ~/ See that ~/ at the …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003edamn this is a rough one.  A users entire home directory removed by claude code from an rm command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm -rf tests/ patches/ plan/ ~/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eReading the first half of that command it LGTM.  If you had approved rm, you are hosed.  If  this is inside a larger script its running, you really gotta read close.  This one still feels pretty obvious, but I can imagine some bash doing some nasty things I miss if I read it and understand it let alone glance at it.\u003c/p\u003e\n\u003cp\u003eI’ll take this as a reminder that I really need to be paying full-ass attention to agents, and moving towards a better sandbox for them, something in docker, maybe something like distrobox that is a magic wrapper over podman that just gives you the things you need for what it does.  Something that starts up with access to start web servers, run agentic cli of choice, see project, \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e commit.  It feels like the right thing has a lot of what distrobox does, but distrobox has too much and would be prone to this using it as I’ve used it in the past.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Dec/9/claude/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Claude\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI found the problem and it\u0026#39;s really bad. Looking at your log, here\u0026#39;s the catastrophic command that was run: rm -rf tests/ patches/ plan/ ~/ See that ~/ at the …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ndamn this is a rough one.  A users entire home directory removed by claude code from an rm command.\n\n``` bash\nrm -rf tests/ patches/ plan/ ~/\n```\n\nReading the first half of that command it LGTM.  If you had approved rm, you are hosed.  If  this is inside a larger script its running, you really gotta read close.  This one still feels pretty obvious, but I can imagine some bash doing some nasty things I miss if I read it and understand it let alone glance at it.\n\n\nI'll take this as a reminder that I really need to be paying full-ass attention to agents, and moving towards a better sandbox for them, something in docker, maybe something like distrobox that is a magic wrapper over podman that just gives you the things you need for what it does.  Something that starts up with access to start web servers, run agentic cli of choice, see project, git commit.  It feels like the right thing has a lot of what distrobox does, but distrobox has too much and would be prone to this using it as I've used it in the past.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Dec/9/claude/#atom-everything",
      "date_published": "2025-12-09T13:56:30Z",
      "date_modified": "2025-12-09T13:56:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/og/",
      "url": "https://go.waylonwalker.com/og/",
      "title": "og",
      "content_html": "\u003cp\u003eOG is short for open graph, a set of standard meta tags that are used for\nsocial media sharing.  This is what tells other websites how to describe and\ndisplay your site when shared on social media, text messages, or discord.\u003c/p\u003e\n",
      "content_text": "\nOG is short for open graph, a set of standard meta tags that are used for\nsocial media sharing.  This is what tells other websites how to describe and\ndisplay your site when shared on social media, text messages, or discord.\n\n\n",
      "summary": "OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...",
      "date_published": "2025-12-09T12:49:21Z",
      "date_modified": "2025-12-09T12:49:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/web-snow-fall/",
      "url": "https://go.waylonwalker.com/web-snow-fall/",
      "title": "web snow fall",
      "content_html": "\u003cp\u003eI found snow-fall component from\n\u003ca href=\"https://www.zachleat.com/web/snow-fall/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.zachleat.com.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.zachleat.com.jpg\" class=\"has-avatar  has-avatar-before\"\u003ezachleat\u003c/a\u003e, and its beautiful… to\nme.  I like the way it looks, its simple and whimsical.\u003c/p\u003e\n\u003ch2 id=\"install\"\u003eInstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere is an npm package \u003ccode\u003e@zachleat/snow-fall\u003c/code\u003e if that’s your thing.  I like\nvendoring in small things like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI generally save it in my justfile so that I remember how I got it and how to\nupdate…. yaya I could use npm, but I don’t for no build sites.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eget-snowfall:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"usage\"\u003eUsage \u003ca href=\"#usage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow add the component to your page.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026lt;!-- This belongs somewhere inside \u0026lt;head\u0026gt; --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;module\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;snow-fall.js\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"c\"\u003e\u0026lt;!-- Adjust the src to your path --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026lt;!-- This belongs somewhere inside \u0026lt;body\u0026gt; --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026lt;!-- Anything before will be below the snow. --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003esnow-fall\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003esnow-fall\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026lt;!-- Anything after will show above the snow. --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI found snow-fall component from\n[zachleat](https://www.zachleat.com/web/snow-fall/), and its beautiful... to\nme.  I like the way it looks, its simple and whimsical.\n\n## Install\n\nThere is an npm package `@zachleat/snow-fall` if that's your thing.  I like\nvendoring in small things like this.\n\n``` bash\ncurl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js\n```\n\nI generally save it in my justfile so that I remember how I got it and how to\nupdate.... yaya I could use npm, but I don't for no build sites.\n\n``` bash\nget-snowfall:\n    curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js\n```\n\n## Usage\n\nNow add the component to your page.\n\n``` html\n\u003c!-- This belongs somewhere inside \u003chead\u003e --\u003e\n\u003cscript type=\"module\" src=\"snow-fall.js\"\u003e\u003c/script\u003e \u003c!-- Adjust the src to your path --\u003e\n\n\u003c!-- This belongs somewhere inside \u003cbody\u003e --\u003e\n\u003c!-- Anything before will be below the snow. --\u003e\n\u003csnow-fall\u003e\u003c/snow-fall\u003e\n\u003c!-- Anything after will show above the snow. --\u003e\n```\n",
      "summary": "I found snow-fall component from zachleat, and its beautiful... to me. I like the way it looks, its simple and whimsical.",
      "date_published": "2025-12-09T10:21:17Z",
      "date_modified": "2025-12-09T10:21:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/check-your-kubeconfig-expire-time/",
      "url": "https://go.waylonwalker.com/check-your-kubeconfig-expire-time/",
      "title": "check your kubeconfig expire time",
      "content_html": "\u003cp\u003eToday I learned an important lesson that you should periodically check on your\nkubeconfigs expiration date.  It’s easy to do.  You can ask for the\nclient-certificate-data from your kubeconfig, decode it, and use openssl to get\nthe expiration date.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl config view --raw -o \u003cspan class=\"nv\"\u003ejsonpath\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;{.users[0].user.client-certificate-data}\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e base64 -d 2\u0026gt;/dev/null \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e openssl x509 -noout -dates\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis will only work for the first user, if you have more than one user or\ncontext defined in your kubeconfig you will need to adjust.\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\nToday I learned an important lesson that you should periodically check on your\nkubeconfigs expiration date.  It's easy to do.  You can ask for the\nclient-certificate-data from your kubeconfig, decode it, and use openssl to get\nthe expiration date.\n\n``` bash\nkubectl config view --raw -o jsonpath='{.users[0].user.client-certificate-data}' \\\n  | base64 -d 2\u003e/dev/null \\\n  | openssl x509 -noout -dates\n```\n\n!!! Note\n\n    This will only work for the first user, if you have more than one user or\n    context defined in your kubeconfig you will need to adjust.\n",
      "summary": "Today I learned an important lesson that you should periodically check on your kubeconfigs expiration date. It's easy to do. You can ask for the...",
      "date_published": "2025-12-08T20:59:27Z",
      "date_modified": "2025-12-08T20:59:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubenetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-886/",
      "url": "https://go.waylonwalker.com/thought-886/",
      "title": "💭 3d Printing a Geared Vice - Will It work? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"9z8XdJnQp1A\" title=\"3d Printing a Geared Vice - Will It work?\" playlabel=\"Play: 3d Printing a Geared Vice - Will It work?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis looks like a really good low cost option for some workholding.  There is never a shortage of workholding in the shop and everything has a place.  Having something low cost that you can have a bunch of makes a lot of sense.  Maybe you still need a super scucum unit for really clamping the shit out of something, but this easily covers most use cases in a garage workshop.  I want to build it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"9z8XdJnQp1A\" title=\"3d Printing a Geared Vice - Will It work?\" playlabel=\"Play: 3d Printing a Geared Vice - Will It work?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis looks like a really good low cost option for some workholding.  There is never a shortage of workholding in the shop and everything has a place.  Having something low cost that you can have a bunch of makes a lot of sense.  Maybe you still need a super scucum unit for really clamping the shit out of something, but this easily covers most use cases in a garage workshop.  I want to build it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=9z8XdJnQp1A",
      "date_published": "2025-12-07T21:28:39Z",
      "date_modified": "2025-12-07T21:28:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "woodworking",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-885/",
      "url": "https://go.waylonwalker.com/thought-885/",
      "title": "💭 Steam Machine CAN Start at $399 with THIS SKU! | Cut Down Yiel...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"v1JN8nCD1JM\" title=\"Steam Machine Barebones Edition: Choice Born From Desperation! | Cut Down Yields\" playlabel=\"Play: Steam Machine Barebones Edition: Choice Born From Desperation! | Cut Down Yields\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eMoore’s Law is Dead pitches a pretty ingenious sku for the new gabecube aka steam machine.  I fully support repairability and ewaste reduction. most of these components have not had \u003cstrong\u003eMAJOR\u003c/strong\u003e improvements in years, hence his channel name.  There is a possibility here that Valve could ship with their unique hardware, (apu, psu, case, ports, networking) and let you bring your own ssd and ram from an old device that you might not use anymore.  I love this idea.  At the same time it feels like entering the star wars universe where there are no more new manufacturing and everything is cobbled together from old hardware made long ago.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"v1JN8nCD1JM\" title=\"Steam Machine Barebones Edition: Choice Born From Desperation! | Cut Down Yields\" playlabel=\"Play: Steam Machine Barebones Edition: Choice Born From Desperation! | Cut Down Yields\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nMoore's Law is Dead pitches a pretty ingenious sku for the new gabecube aka steam machine.  I fully support repairability and ewaste reduction. most of these components have not had **MAJOR** improvements in years, hence his channel name.  There is a possibility here that Valve could ship with their unique hardware, (apu, psu, case, ports, networking) and let you bring your own ssd and ram from an old device that you might not use anymore.  I love this idea.  At the same time it feels like entering the star wars universe where there are no more new manufacturing and everything is cobbled together from old hardware made long ago.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=v1JN8nCD1JM",
      "date_published": "2025-12-07T17:24:50Z",
      "date_modified": "2025-12-07T17:24:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gh-auth-switch/",
      "url": "https://go.waylonwalker.com/gh-auth-switch/",
      "title": "gh auth switch",
      "content_html": "\u003cp\u003eWhen using two GitHub accounts the gh cli gives very easy \u003ccode\u003egh auth switch\u003c/code\u003e workflow from the cli.\u003c/p\u003e\n\u003cdiv class=\"admonition hint\"\u003e\n\u003cp class=\"admonition-title\"\u003efrom the docs\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003egh auth switch –help\nSwitch the active account for a GitHub host.\u003c/p\u003e\n\u003cp\u003eThis command changes the authentication configuration that will\nbe used when running commands targeting the specified GitHub host.\u003c/p\u003e\n\u003cp\u003eIf the specified host has two accounts, the active account will be switched\nautomatically. If there are more than two accounts, disambiguation will be\nrequired either through the \u003ccode\u003e--user\u003c/code\u003e flag or an interactive prompt.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# list accounts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh auth status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# switch accounds (interactive if more than 2, i\u0026#39;ve never seen this personally)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh auth switch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nWhen using two GitHub accounts the gh cli gives very easy `gh auth switch` workflow from the cli.\n\n!!! hint from the docs\n\n  gh auth switch --help\n  Switch the active account for a GitHub host.\n\n  This command changes the authentication configuration that will\n  be used when running commands targeting the specified GitHub host.\n\n  If the specified host has two accounts, the active account will be switched\n  automatically. If there are more than two accounts, disambiguation will be\n  required either through the `--user` flag or an interactive prompt.\n\n``` bash\n# list accounts\ngh auth status\n# switch accounds (interactive if more than 2, i've never seen this personally)\ngh auth switch\n```\n",
      "summary": "When using two GitHub accounts the gh cli gives very easy workflow from the cli.",
      "date_published": "2025-12-07T10:55:55Z",
      "date_modified": "2025-12-07T10:55:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gh",
        "cli",
        "github"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/basecamp-fizzy/",
      "url": "https://go.waylonwalker.com/basecamp-fizzy/",
      "title": "⭐ basecamp fizzy",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/basecamp\" 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\"\u003ebasecamp\u003c/a\u003e and their project \u003ca href=\"https://github.com/basecamp/fizzy\" 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\"\u003efizzy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eKanban as it should be. Not as it has been.\u003c/p\u003e\n",
      "content_text": "\nCheck out [basecamp](https://github.com/basecamp) and their project [fizzy](https://github.com/basecamp/fizzy).\n\nKanban as it should be. Not as it has been.\n",
      "summary": "Check out basecamp and their project fizzy.",
      "date_published": "2025-12-07T05:04:49Z",
      "date_modified": "2025-12-07T05:04:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-884/",
      "url": "https://go.waylonwalker.com/thought-884/",
      "title": "💭 You’ll own NOTHING and be happy? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"S45rLuY48w4\" title=\"You’ll own NOTHING and be happy?\" playlabel=\"Play: You’ll own NOTHING and be happy?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat a heart breaking video to listen to.  I’m trying to do a better job of being positive right now.  I’m trying to look at the world in what I have control over (not much more than my attitude about it).  AI is killing so much right now I’m trying to look at it as the good tools the engineers made it to be.  Ownership is dying around every goddamn corner.  Hats off to Edison, this guy gets it.  We need more companies like this taking a stand for the average person who wants to make it out there.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"S45rLuY48w4\" title=\"You’ll own NOTHING and be happy?\" playlabel=\"Play: You’ll own NOTHING and be happy?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWhat a heart breaking video to listen to.  I'm trying to do a better job of being positive right now.  I'm trying to look at the world in what I have control over (not much more than my attitude about it).  AI is killing so much right now I'm trying to look at it as the good tools the engineers made it to be.  Ownership is dying around every goddamn corner.  Hats off to Edison, this guy gets it.  We need more companies like this taking a stand for the average person who wants to make it out there.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=S45rLuY48w4",
      "date_published": "2025-12-06T21:33:15Z",
      "date_modified": "2025-12-06T21:33:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-883/",
      "url": "https://go.waylonwalker.com/thought-883/",
      "title": "💭 The Secret of the AWS Outage | The Standup - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"r3bPmtEP9SQ\" title=\"The Secret of the AWS Outage | The Standup\" playlabel=\"Play: The Secret of the AWS Outage | The Standup\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat a great campfire story Casey stumbled into.  Whether any of this is true few will ever know, but its very reasonable that a race condition and a stalled job to apply configuration caused by someone who left the company 10 years ago caused an outage.  I find it hilarious that they call this guy he answers, yup I still know the password, but how do I know you’re legit, I’m not just handing out the password.  Casey did a stand up job telling this story.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"r3bPmtEP9SQ\" title=\"The Secret of the AWS Outage | The Standup\" playlabel=\"Play: The Secret of the AWS Outage | The Standup\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWhat a great campfire story Casey stumbled into.  Whether any of this is true few will ever know, but its very reasonable that a race condition and a stalled job to apply configuration caused by someone who left the company 10 years ago caused an outage.  I find it hilarious that they call this guy he answers, yup I still know the password, but how do I know you're legit, I'm not just handing out the password.  Casey did a stand up job telling this story.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=r3bPmtEP9SQ",
      "date_published": "2025-12-06T21:29:48Z",
      "date_modified": "2025-12-06T21:29:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cloud",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-882/",
      "url": "https://go.waylonwalker.com/thought-882/",
      "title": "💭 Building the PERFECT Linux PC with Linus Torvalds - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"mfv0V1SxbNA\" title=\"Building the PERFECT Linux PC with Linus Torvalds\" playlabel=\"Play: Building the PERFECT Linux PC with Linus Torvalds\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eLinus is \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 like the rest of us.  This is such an unexpectedly mild take from him.  I expected some threat to the mother of the vibe coder, but he gave a pretty great middle of the road take.  The industry sucks, it smells off, we know a lot wrong with it, it feels like theres a lot more wrong than we know.  But the tools that its making are really good when used in the right ways.  They are not a replacement for anything, they are assistive.  They can lift someone from not knowing how to code to making a small webapp for their use.  Someone who wants to write backend and give them a decent front end, someone who whats to write front end and give them a decent backend.\u003c/p\u003e\n\u003cp\u003eGreat take from someone with more experience than most can ever dream of having, worth a listen.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"mfv0V1SxbNA\" title=\"Building the PERFECT Linux PC with Linus Torvalds\" playlabel=\"Play: Building the PERFECT Linux PC with Linus Torvalds\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nLinus is \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 like the rest of us.  This is such an unexpectedly mild take from him.  I expected some threat to the mother of the vibe coder, but he gave a pretty great middle of the road take.  The industry sucks, it smells off, we know a lot wrong with it, it feels like theres a lot more wrong than we know.  But the tools that its making are really good when used in the right ways.  They are not a replacement for anything, they are assistive.  They can lift someone from not knowing how to code to making a small webapp for their use.  Someone who wants to write backend and give them a decent front end, someone who whats to write front end and give them a decent backend.\n\nGreat take from someone with more experience than most can ever dream of having, worth a listen.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=mfv0V1SxbNA",
      "date_published": "2025-12-06T21:23:37Z",
      "date_modified": "2025-12-06T21:23:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/setup-bambu-studio-in-distrobox/",
      "url": "https://go.waylonwalker.com/setup-bambu-studio-in-distrobox/",
      "title": "setup bambu-studio in distrobox",
      "content_html": "\u003cp\u003e\u003ca href=\"/gpus-are-awesome/\" class=\"wikilink\" data-title=\"gpus are awesome\" data-description=\"GPU\u0026#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...\" data-date=\"2025-12-03\" data-preview=\"GPU\u0026#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...\"\u003egpus are awesome\u003c/a\u003e and I need one for Bambu Studio to be usable in a\ndistrobox.  Adding the \u003ccode\u003e--nvidia\u003c/code\u003e flag to \u003ccode\u003edistrobox create\u003c/code\u003e bind mounts the\nnvidia \u003ccode\u003e/dev/\u003c/code\u003e devices and sets up the necessary environment variables.  Once\nwe are in there are a couple of packages to install to make it work.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edistrobox create --name bambu-studio --image archlinux:latest --nvidia\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edistrobox enter bambu-studio\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S nvidia-utils lib32-nvidia-utils vulkan-icd-loader\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envidia-smi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eglxinfo \u003cspan class=\"p\"\u003e|\u003c/span\u003e gprep OpenGL\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -Syu --needed base-devel git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://aur.archlinux.org/paru-bin.git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e paru-bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emakepkg -si\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S bambustudio-bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebambu-studio\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edistrobox-export --app bambu-studio\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\u003ca href=\"/gpus-are-awesome/\" class=\"wikilink\" data-title=\"gpus are awesome\" data-description=\"GPU\u0026#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...\" data-date=\"2025-12-03\"\u003egpus are awesome\u003c/a\u003e and I need one for Bambu Studio to be usable in a\ndistrobox.  Adding the `--nvidia` flag to `distrobox create` bind mounts the\nnvidia `/dev/` devices and sets up the necessary environment variables.  Once\nwe are in there are a couple of packages to install to make it work.\n\n``` bash\ndistrobox create --name bambu-studio --image archlinux:latest --nvidia\ndistrobox enter bambu-studio\nsudo pacman -S nvidia-utils lib32-nvidia-utils vulkan-icd-loader\nnvidia-smi\nglxinfo | gprep OpenGL\nsudo pacman -Syu --needed base-devel git\ngit clone https://aur.archlinux.org/paru-bin.git\ncd paru-bin\nmakepkg -si\nparu -S bambustudio-bin\n\nbambu-studio\n\ndistrobox-export --app bambu-studio\n```\n\n",
      "summary": "gpus-are-awesome and I need one for Bambu Studio to be usable in a distrobox. Adding the flag to bind mounts the nvidia devices and sets up the necessary...",
      "date_published": "2025-12-06T21:17:39Z",
      "date_modified": "2025-12-06T21:17:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zeioth-garbage-day-nvim/",
      "url": "https://go.waylonwalker.com/zeioth-garbage-day-nvim/",
      "title": "⭐ Zeioth garbage-day.nvim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Zeioth/garbage-day.nvim\" 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\"\u003egarbage-day.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/Zeioth\" 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\"\u003eZeioth\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eGarbage collector that stops inactive LSP clients to free RAM\u003c/p\u003e\n",
      "content_text": "\nCheck out [garbage-day.nvim](https://github.com/Zeioth/garbage-day.nvim) by [Zeioth](https://github.com/Zeioth). It's a well-crafted project with great potential.\n\nGarbage collector that stops inactive LSP clients to free RAM\n",
      "summary": "Check out garbage-day.nvim by Zeioth. It's a well-crafted project with great potential.",
      "date_published": "2025-12-06T17:04:13Z",
      "date_modified": "2025-12-06T17:04:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-881/",
      "url": "https://go.waylonwalker.com/thought-881/",
      "title": "💭 snow-fall Web Component—zachleat.com",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.zachleat.com/web/snow-fall/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://screenshot.11ty.app/https%3A%2F%2Fwww.zachleat.com%2Fopengraph%2Fweb%2Fsnow-fall%2F%3Fcache%3D_20251031/opengraph/\" alt=\"snow-fall Web Component—zachleat.com — A post by Zach Leatherman (zachleat)\" loading=\"lazy\"/ data-glightbox=\"description: snow-fall Web Component—zachleat.com — A post by Zach Leatherman (zachleat)\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esnow-fall Web Component—zachleat.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA post by Zach Leatherman (zachleat)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eZach Leatherman · zachleat.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a very fun way to add some whimsy to your site, added it to mine immediately when I saw it.  This is what digital gardens are for, Fun, entertainment, and self-exxpression.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.zachleat.com/web/snow-fall/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://screenshot.11ty.app/https%3A%2F%2Fwww.zachleat.com%2Fopengraph%2Fweb%2Fsnow-fall%2F%3Fcache%3D_20251031/opengraph/\" alt=\"snow-fall Web Component—zachleat.com — A post by Zach Leatherman (zachleat)\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esnow-fall Web Component—zachleat.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA post by Zach Leatherman (zachleat)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eZach Leatherman \u0026middot; zachleat.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a very fun way to add some whimsy to your site, added it to mine immediately when I saw it.  This is what digital gardens are for, Fun, entertainment, and self-exxpression.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.zachleat.com/web/snow-fall/",
      "date_published": "2025-12-06T15:25:11Z",
      "date_modified": "2025-12-06T15:25:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-880/",
      "url": "https://go.waylonwalker.com/thought-880/",
      "title": "💭 The 3D Printed Ball Vise Every Creative Should Own - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bQhVKB64r4U\" title=\"The 3D Printed Ball Vise Every Creative Should Own\" playlabel=\"Play: The 3D Printed Ball Vise Every Creative Should Own\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis ball vise Idea is incredible and I want one.  Its a heavy workholding unit that can accept a variety of tools and manipulate things to a lot of angles while working on them.  This looks really good for painting miniatures soldering or generally working on small 3d printed parts that I do.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bQhVKB64r4U\" title=\"The 3D Printed Ball Vise Every Creative Should Own\" playlabel=\"Play: The 3D Printed Ball Vise Every Creative Should Own\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis ball vise Idea is incredible and I want one.  Its a heavy workholding unit that can accept a variety of tools and manipulate things to a lot of angles while working on them.  This looks really good for painting miniatures soldering or generally working on small 3d printed parts that I do.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=bQhVKB64r4U",
      "date_published": "2025-12-06T15:22:45Z",
      "date_modified": "2025-12-06T15:22:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/k3s-system-upgrade-minor-by-minor/",
      "url": "https://go.waylonwalker.com/k3s-system-upgrade-minor-by-minor/",
      "title": "k3s system-upgrade minor by minor",
      "content_html": "\u003cp\u003eThe k3s system-upgrade controller is a fantastic tool for upgrading k3s\nautomatically.  It has done a fantastic job for me every time I’ve used it.\nToday I ran it on a cluster that needed to upgrade several minors and I\nlearned that the controller does not pick up on changes to the channel url if\nyou change from minor to minor.\u003c/p\u003e\n\u003cp\u003eThe solution I came up with was to name the plan with the version it supports.\nThen on each patch upgrade, change both the plan name and the channel.  I use\ngitops with argocd, it automcatically cleaned up old plans, created new plans,\nand the system-upgrade-controller picked up the plan and started applying\nimmediately.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Server plan\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupgrade.cattle.io/v1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ePlan\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eserver-plan-v1.33\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# \u0026lt;- This is important if you want to change the channel name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003esystem-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003econcurrency\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecordon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enodeSelector\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ematchExpressions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003enode-role.kubernetes.io/control-plane\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eoperator\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eIn\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003evalues\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eserviceAccountName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003esystem-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eupgrade\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003erancher/k3s-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003echannel\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://update.k3s.io/v1-release/channels/v1.33\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# Agent plan\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupgrade.cattle.io/v1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ePlan\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eagent-plan-v1.33\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# \u0026lt;- This is important if you want to change the channel name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003esystem-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003econcurrency\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecordon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enodeSelector\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ematchExpressions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003enode-role.kubernetes.io/control-plane\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eoperator\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDoesNotExist\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eprepare\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"l\"\u003eprepare\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"l\"\u003eserver-plan\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003erancher/k3s-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eserviceAccountName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003esystem-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eupgrade\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003erancher/k3s-upgrade\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003echannel\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://update.k3s.io/v1-release/channels/v1.33\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI’d love to see a better way if you have a way to upgrade through minors, or\nmanually control the minor of your cluster let me know.\u003c/p\u003e\n",
      "content_text": "\nThe k3s system-upgrade controller is a fantastic tool for upgrading k3s\nautomatically.  It has done a fantastic job for me every time I've used it.\nToday I ran it on a cluster that needed to upgrade several minors and I\nlearned that the controller does not pick up on changes to the channel url if\nyou change from minor to minor.  \n\nThe solution I came up with was to name the plan with the version it supports.\nThen on each patch upgrade, change both the plan name and the channel.  I use\ngitops with argocd, it automcatically cleaned up old plans, created new plans,\nand the system-upgrade-controller picked up the plan and started applying\nimmediately.\n\n\n``` yaml\n# Server plan\napiVersion: upgrade.cattle.io/v1\nkind: Plan\nmetadata:\n  name: server-plan-v1.33 # \u003c- This is important if you want to change the channel name\n  namespace: system-upgrade\nspec:\n  concurrency: 1\n  cordon: true\n  nodeSelector:\n    matchExpressions:\n    - key: node-role.kubernetes.io/control-plane\n      operator: In\n      values:\n      - \"true\"\n  serviceAccountName: system-upgrade\n  upgrade:\n    image: rancher/k3s-upgrade\n  channel: https://update.k3s.io/v1-release/channels/v1.33\n---\n# Agent plan\napiVersion: upgrade.cattle.io/v1\nkind: Plan\nmetadata:\n  name: agent-plan-v1.33 # \u003c- This is important if you want to change the channel name\n  namespace: system-upgrade\nspec:\n  concurrency: 1\n  cordon: true\n  nodeSelector:\n    matchExpressions:\n    - key: node-role.kubernetes.io/control-plane\n      operator: DoesNotExist\n  prepare:\n    args:\n    - prepare\n    - server-plan\n    image: rancher/k3s-upgrade\n  serviceAccountName: system-upgrade\n  upgrade:\n    image: rancher/k3s-upgrade\n  channel: https://update.k3s.io/v1-release/channels/v1.33\n```\n\nI'd love to see a better way if you have a way to upgrade through minors, or\nmanually control the minor of your cluster let me know.\n",
      "summary": "The k3s system-upgrade controller is a fantastic tool for upgrading k3s automatically. It has done a fantastic job for me every time I've used it. Today I...",
      "date_published": "2025-12-05T09:25:39Z",
      "date_modified": "2025-12-05T09:25:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "k3s",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-879/",
      "url": "https://go.waylonwalker.com/thought-879/",
      "title": "💭 Deleting Code for Performance – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/12/04/deleting-code-for-performance/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2025-12-04-deleting-code-for-performance.png\" alt=\"Deleting Code for Performance — The one where I clean up an asynchronous mess\" loading=\"lazy\"/ data-glightbox=\"description: Deleting Code for Performance — The one where I clean up an asynchronous mess\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeleting Code for Performance\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I clean up an asynchronous mess\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI did not realize that David’s site was built on a homegrown Static Site Generator.  As someone who also does this myself I appreciate the effort.  I build my site on \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.  It started as a project to learn a set of tools and has become a project that I depend on everywhere and cant put down.  It’s a great tool, but you probably shouldn’t use it.  Anyways, I feel this \u003cstrong\u003ereally\u003c/strong\u003e shows on David’s site. His site is filled with custom features that make it very unique, one off, and always a pleasure to read.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/12/04/deleting-code-for-performance/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2025-12-04-deleting-code-for-performance.png\" alt=\"Deleting Code for Performance — The one where I clean up an asynchronous mess\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeleting Code for Performance\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I clean up an asynchronous mess\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI did not realize that David's site was built on a homegrown Static Site Generator.  As someone who also does this myself I appreciate the effort.  I build my site on \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.  It started as a project to learn a set of tools and has become a project that I depend on everywhere and cant put down.  It's a great tool, but you probably shouldn't use it.  Anyways, I feel this **really** shows on David's site. His site is filled with custom features that make it very unique, one off, and always a pleasure to read.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2025/12/04/deleting-code-for-performance/",
      "date_published": "2025-12-04T16:12:19Z",
      "date_modified": "2025-12-04T16:12:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/searlsco-posse_party/",
      "url": "https://go.waylonwalker.com/searlsco-posse_party/",
      "title": "⭐ searlsco posse_party",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/searlsco/posse_party\" 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\"\u003eposse_party\u003c/a\u003e by \u003ca href=\"https://github.com/searlsco\" 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\"\u003esearlsco\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eQuit social media by posting more\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [posse_party](https://github.com/searlsco/posse_party) by [searlsco](https://github.com/searlsco), and it's truly impressive.\n\nQuit social media by posting more\n",
      "summary": "I recently discovered posse_party by searlsco, and it's truly impressive.",
      "date_published": "2025-12-03T03:22:49Z",
      "date_modified": "2025-12-03T03:22:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-877/",
      "url": "https://go.waylonwalker.com/thought-877/",
      "title": "💭 Self-hosting Github",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"MhZQTnfo8Ok\" title=\"Self-hosting Github\" playlabel=\"Play: Self-hosting Github\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eNiche companies will rise from the ashes.  Companies that want to build good products for customers.  Companies that will get hundreds of users.  They will treat them right and make enough money to support themselves, maybe.\u003c/p\u003e\n\u003cp\u003eAlongside them we will \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 host\u003c/a\u003e.  We will run our own services out of our basement.  There will be downtime, but its ok.  We will enjoy ourselves. We will tell everyone how much better it is BTW\u003c/p\u003e\n\u003cp\u003eNext to that is a firehose of shit piling back into the circular snakes mouth as all of your data flows freely between any company that can get their hands on it.  These companies will spend and make money hand over fist. Most people will continue to use these services until enough is enough and unplug from everything.\u003c/p\u003e\n\u003cp\u003eIn this world I don’t see how we sustain the amount of engineers we have created.  Small companies run lean, small, and allow slow organic growth happen.\u003c/p\u003e\n\u003cp\u003eIt will be interesting to see play out.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/file/95ae2a95-308b-4d1d-bff8-8ce6194db132.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/file/95ae2a95-308b-4d1d-bff8-8ce6194db132.webp\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"MhZQTnfo8Ok\" title=\"Self-hosting Github\" playlabel=\"Play: Self-hosting Github\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nNiche companies will rise from the ashes.  Companies that want to build good products for customers.  Companies that will get hundreds of users.  They will treat them right and make enough money to support themselves, maybe.\n\nAlongside them we will self host.  We will run our own services out of our basement.  There will be downtime, but its ok.  We will enjoy ourselves. We will tell everyone how much better it is BTW\n\nNext to that is a firehose of shit piling back into the circular snakes mouth as all of your data flows freely between any company that can get their hands on it.  These companies will spend and make money hand over fist. Most people will continue to use these services until enough is enough and unplug from everything.\n\nIn this world I don't see how we sustain the amount of engineers we have created.  Small companies run lean, small, and allow slow organic growth happen.\n\nIt will be interesting to see play out.\n\n![](https://dropper.wayl.one/file/95ae2a95-308b-4d1d-bff8-8ce6194db132.webp)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/MhZQTnfo8Ok",
      "date_published": "2025-12-02T03:45:10Z",
      "date_modified": "2025-12-02T03:45:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-hosting",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zerolu-awesome-nanobanana-pro/",
      "url": "https://go.waylonwalker.com/zerolu-awesome-nanobanana-pro/",
      "title": "⭐ ZeroLu awesome-nanobanana-pro",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/ZeroLu/awesome-nanobanana-pro\" 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\"\u003eawesome-nanobanana-pro\u003c/a\u003e from \u003ca href=\"https://github.com/ZeroLu\" 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\"\u003eZeroLu\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🚀 An awesome list of curated Nano Banana pro prompts and examples. Your go-to resource for mastering prompt engineering and exploring the creative potential of the Nano banana pro(Nano banana 2) AI image model.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [awesome-nanobanana-pro](https://github.com/ZeroLu/awesome-nanobanana-pro) from [ZeroLu](https://github.com/ZeroLu).\n\n🚀 An awesome list of curated Nano Banana pro prompts and examples. Your go-to resource for mastering prompt engineering and exploring the creative potential of the Nano banana pro(Nano banana 2) AI image model.\n",
      "summary": "I'm impressed by awesome-nanobanana-pro from ZeroLu.",
      "date_published": "2025-12-02T02:38:25Z",
      "date_modified": "2025-12-02T02:38:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-876/",
      "url": "https://go.waylonwalker.com/thought-876/",
      "title": "💭 Malicious Traffic and Static Sites - Jim Nielsen’s Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/malicious-traffic-on-static-sites/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMalicious Traffic and Static Sites\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThese look like fun endpoints to add anti-maliciously, give good stuff for the sleezy things to read.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/malicious-traffic-on-static-sites/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMalicious Traffic and Static Sites\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThese look like fun endpoints to add anti-maliciously, give good stuff for the sleezy things to read.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2025/malicious-traffic-on-static-sites/",
      "date_published": "2025-12-01T21:41:03Z",
      "date_modified": "2025-12-01T21:41:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-875/",
      "url": "https://go.waylonwalker.com/thought-875/",
      "title": "💭 A ChatGPT prompt equals about 5.1 seconds of Netflix",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Nov/29/chatgpt-netflix\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA ChatGPT prompt equals about 5.1 seconds of Netflix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn June 2025 Sam Altman claimed about ChatGPT that \u0026#34;the average query uses about 0.34 watt-hours\u0026#34;. In March 2020 George Kamiya of the International Energy Agency estimated that \u0026#34;streaming a …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis feels very promising for the future as we enter a world that is more and more dependent on AI that inference is so cheap.  I did not understand the scale to how much cheaper inference is compared to training.  As we get better with training I imagine this gets significantly better as well.  I know they all claim to be profitable on inference, but scrolling through Simon’s feed here you see several articles on the stark difference.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Nov/29/chatgpt-netflix\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA ChatGPT prompt equals about 5.1 seconds of Netflix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn June 2025 Sam Altman claimed about ChatGPT that \u0026#34;the average query uses about 0.34 watt-hours\u0026#34;. In March 2020 George Kamiya of the International Energy Agency estimated that \u0026#34;streaming a …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis feels very promising for the future as we enter a world that is more and more dependent on AI that inference is so cheap.  I did not understand the scale to how much cheaper inference is compared to training.  As we get better with training I imagine this gets significantly better as well.  I know they all claim to be profitable on inference, but scrolling through Simon's feed here you see several articles on the stark difference.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Nov/29/chatgpt-netflix",
      "date_published": "2025-12-01T21:34:30Z",
      "date_modified": "2025-12-01T21:34:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-874/",
      "url": "https://go.waylonwalker.com/thought-874/",
      "title": "💭 A pretty good email scam",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/email-settings-scam/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/email-settings-scam.png\" alt=\"A pretty good email scam — How I helped family recover from a clever email scam that hid behind sneaky account settings\" loading=\"lazy\"/ data-glightbox=\"description: A pretty good email scam — How I helped family recover from a clever email scam that hid behind sneaky account settings\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA pretty good email scam\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow I helped family recover from a clever email scam that hid behind sneaky account settings\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003escams suck.  This is a good story, sorry to hear that it happened to a real person.  If you or anyone in your family has a compromised email, add these to your checklist to fix.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eautomatic forwards\u003c/li\u003e\n\u003cli\u003e2-factor email\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/email-settings-scam/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/email-settings-scam.png\" alt=\"A pretty good email scam — How I helped family recover from a clever email scam that hid behind sneaky account settings\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA pretty good email scam\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow I helped family recover from a clever email scam that hid behind sneaky account settings\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nscams suck.  This is a good story, sorry to hear that it happened to a real person.  If you or anyone in your family has a compromised email, add these to your checklist to fix. \n\n* automatic forwards\n* 2-factor email\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/email-settings-scam/",
      "date_published": "2025-12-01T18:22:02Z",
      "date_modified": "2025-12-01T18:22:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-873/",
      "url": "https://go.waylonwalker.com/thought-873/",
      "title": "💭 2025-11-27 Notes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/2025-11-27-notes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"2025-11-27 Notes | Nic Payne — yesterday: [[2025-11-26-notes]] Big Changes Got my workspaces script in working order It\u0026#39;s not quite configurable yet This will allow an easy way to setup\" loading=\"lazy\"/ data-glightbox=\"description: 2025-11-27 Notes | Nic Payne — yesterday: [[2025-11-26-notes]] Big Changes Got my workspaces script in working order It\u0026#39;s not quite configurable yet This will allow an easy way to setup\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e2025-11-27 Notes | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eyesterday: [[2025-11-26-notes]] Big Changes Got my workspaces script in working order It\u0026#39;s not quite configurable yet This will allow an easy way to setup \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNic is also building out a similar workspaces script.  This feels like such a great thing to have ai work on fully customized tools for your personal workflow.  Also Nice shout out!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/2025-11-27-notes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"2025-11-27 Notes | Nic Payne — yesterday: [[2025-11-26-notes]] Big Changes Got my workspaces script in working order It\u0026#39;s not quite configurable yet This will allow an easy way to setup\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e2025-11-27 Notes | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eyesterday: [[2025-11-26-notes]] Big Changes Got my workspaces script in working order It\u0026#39;s not quite configurable yet This will allow an easy way to setup \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNic is also building out a similar workspaces script.  This feels like such a great thing to have ai work on fully customized tools for your personal workflow.  Also Nice shout out!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/2025-11-27-notes/",
      "date_published": "2025-12-01T17:28:13Z",
      "date_modified": "2025-12-01T17:28:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/freika-dawarich/",
      "url": "https://go.waylonwalker.com/freika-dawarich/",
      "title": "⭐ Freika dawarich",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Freika/dawarich\" 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\"\u003edawarich\u003c/a\u003e by \u003ca href=\"https://github.com/Freika\" 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\"\u003eFreika\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eYour favorite self-hostable alternative to Google Timeline (Google Location History)\u003c/p\u003e\n",
      "content_text": "\nCheck out [dawarich](https://github.com/Freika/dawarich) by [Freika](https://github.com/Freika). It's a well-crafted project with great potential.\n\nYour favorite self-hostable alternative to Google Timeline (Google Location History)\n",
      "summary": "Check out dawarich by Freika. It's a well-crafted project with great potential.",
      "date_published": "2025-12-01T14:15:22Z",
      "date_modified": "2025-12-01T14:15:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-872/",
      "url": "https://go.waylonwalker.com/thought-872/",
      "title": "💭 K8s Diagram Builder - Free Visual Kubernetes Architecture Desi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"http://k8sdiagram.fun/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://k8sdiagram.fun/banner.png\" alt=\"K8s Diagram Builder - Visual Kubernetes YAML Generator — Free Kubernetes diagram builder with drag-and-drop design. Auto-generate production-ready YAML for Ingress, Services, Deployments, ConfigMaps, Secrets \u0026amp; more. No signup required.\" loading=\"lazy\"/ data-glightbox=\"description: K8s Diagram Builder - Visual Kubernetes YAML Generator — Free Kubernetes diagram builder with drag-and-drop design. Auto-generate production-ready YAML for Ingress, Services, Deployments, ConfigMaps, Secrets \u0026amp; more. No signup required.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eK8s Diagram Builder - Visual Kubernetes YAML Generator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFree Kubernetes diagram builder with drag-and-drop design. Auto-generate production-ready YAML for Ingress, Services, Deployments, ConfigMaps, Secrets \u0026amp; more. No signup required.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eK8s Diagram Builder · k8sdiagram.fun\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis looks like great prototyping tool for k8s. I too often ask ai to get me going with the things I need.  I’ve used k8s long enough that I can generally remember all the things I need, roughly where they go, would probably forget a few things and need to iterate, but I cannot remember exactly what goes where and need examples at a minimum.  I need to give this a go from desktop and see if it will work for me.  Right now looking through mobile looks promising.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"http://k8sdiagram.fun/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://k8sdiagram.fun/banner.png\" alt=\"K8s Diagram Builder - Visual Kubernetes YAML Generator — Free Kubernetes diagram builder with drag-and-drop design. Auto-generate production-ready YAML for Ingress, Services, Deployments, ConfigMaps, Secrets \u0026amp; more. No signup required.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eK8s Diagram Builder - Visual Kubernetes YAML Generator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFree Kubernetes diagram builder with drag-and-drop design. Auto-generate production-ready YAML for Ingress, Services, Deployments, ConfigMaps, Secrets \u0026amp; more. No signup required.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eK8s Diagram Builder \u0026middot; k8sdiagram.fun\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis looks like great prototyping tool for k8s. I too often ask ai to get me going with the things I need.  I've used k8s long enough that I can generally remember all the things I need, roughly where they go, would probably forget a few things and need to iterate, but I cannot remember exactly what goes where and need examples at a minimum.  I need to give this a go from desktop and see if it will work for me.  Right now looking through mobile looks promising.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!http://k8sdiagram.fun/",
      "date_published": "2025-12-01T14:10:55Z",
      "date_modified": "2025-12-01T14:10:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/chr15m-runprompt/",
      "url": "https://go.waylonwalker.com/chr15m-runprompt/",
      "title": "⭐ chr15m runprompt",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/chr15m\" 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\"\u003echr15m\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/chr15m/runprompt\" 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\"\u003erunprompt\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eRun LLM prompts from your shell\u003c/p\u003e\n",
      "content_text": "\n[chr15m](https://github.com/chr15m) has done a fantastic job with [runprompt](https://github.com/chr15m/runprompt). Highly recommend taking a look.\n\nRun LLM prompts from your shell\n",
      "summary": "chr15m has done a fantastic job with runprompt. Highly recommend taking a look.",
      "date_published": "2025-11-28T19:33:57Z",
      "date_modified": "2025-11-28T19:33:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/columns-env-var/",
      "url": "https://go.waylonwalker.com/columns-env-var/",
      "title": "COLUMNS env var",
      "content_html": "\u003cp\u003esetting \u003ccode\u003eCOLUMNS\u003c/code\u003e env var to a number greater than 0 will make the terminal resize to that number of columns.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eCOLUMNS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e80\u003c/span\u003e uvx --from rich-cli rich myscript.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eNot all programs respct the \u003ccode\u003eCOLUMNS\u003c/code\u003e env var, but rich does, and a lot of\nstuff I’m building uses rich.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eI discovered this when I was trying to make a low effort readme generated from\nthe code, but did not depend on the size of terminal it was ran on.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# justfile\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;# Workspaces\u0026#34;\u003c/span\u003e \u0026gt; README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;``` bash\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eCOLUMNS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e80\u003c/span\u003e ./workspaces.py --help \u0026gt;\u0026gt; README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;```\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; README.md\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nsetting `COLUMNS` env var to a number greater than 0 will make the terminal resize to that number of columns.\n\n``` bash\nCOLUMNS=80 uvx --from rich-cli rich myscript.py\n```\n\n!!! NOTE\n\n    Not all programs respct the `COLUMNS` env var, but rich does, and a lot of\n    stuff I'm building uses rich.\n\nI discovered this when I was trying to make a low effort readme generated from\nthe code, but did not depend on the size of terminal it was ran on.\n\n``` bash\n# justfile\nreadme:\n    echo \"# Workspaces\" \u003e README.md\n    echo \"\" \u003e\u003e README.md\n    echo '``` bash' \u003e\u003e README.md\n    COLUMNS=80 ./workspaces.py --help \u003e\u003e README.md\n    echo '```' \u003e\u003e README.md\n```\n",
      "summary": "setting env var to a number greater than 0 will make the terminal resize to that number of columns.",
      "date_published": "2025-11-26T13:24:38Z",
      "date_modified": "2025-11-26T13:24:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "bash",
        "terminal"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/grafana-alloy-scenarios/",
      "url": "https://go.waylonwalker.com/grafana-alloy-scenarios/",
      "title": "⭐ grafana alloy-scenarios",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/grafana/alloy-scenarios\" 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\"\u003ealloy-scenarios\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/grafana\" 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\"\u003egrafana\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA collection of working Alloy scenarios\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [alloy-scenarios](https://github.com/grafana/alloy-scenarios), an amazing project by [grafana](https://github.com/grafana). It's worth exploring!\n\nA collection of working Alloy scenarios\n",
      "summary": "I'm really excited about alloy-scenarios, an amazing project by grafana. It's worth exploring!",
      "date_published": "2025-11-24T02:04:24Z",
      "date_modified": "2025-11-24T02:04:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tea-login-flag/",
      "url": "https://go.waylonwalker.com/tea-login-flag/",
      "title": "tea login flag",
      "content_html": "\u003cp\u003eThe tea command for gitea (used by forgejo) has a flag for login.  With gitea\nyou can have multiple accounts logged in.  When you try to run a command such\nas \u003ccode\u003erepo create\u003c/code\u003e it will prompt you which login to use, but I learned that you\ncan bake it in to all of them with \u003ccode\u003e--login \u0026lt;login-name\u0026gt;\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tea repo create --name deleteme --description \u003cspan class=\"s1\"\u003e\u0026#39;for example\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e┃ NOTE: no gitea login detected, whether falling back to login \u003cspan class=\"s1\"\u003e\u0026#39;git.waylonwalker.com\u0026#39;\u003c/span\u003e?\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/11dc820d-1680-414c-9624-cd970b057a74.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/file/11dc820d-1680-414c-9624-cd970b057a74.webp\" alt=\"image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?\"/ data-glightbox=\"description: image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etea repo create --name deleteme --description \u003cspan class=\"s1\"\u003e\u0026#39;for example\u0026#39;\u003c/span\u003e --login git.wayl.one\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThe tea command for gitea (used by forgejo) has a flag for login.  With gitea\nyou can have multiple accounts logged in.  When you try to run a command such\nas `repo create` it will prompt you which login to use, but I learned that you\ncan bake it in to all of them with `--login \u003clogin-name\u003e`\n\n``` bash\n❯ tea repo create --name deleteme --description 'for example'\n┃ NOTE: no gitea login detected, whether falling back to login 'git.waylonwalker.com'?\n```\n\n![image showing message NOTE: no gitea login detected, whether falling back to login 'git.waylonwalker.com'?](https://dropper.waylonwalker.com/file/11dc820d-1680-414c-9624-cd970b057a74.webp)\n\n``` bash\ntea repo create --name deleteme --description 'for example' --login git.wayl.one\n```\n",
      "summary": "The tea command for gitea (used by forgejo) has a flag for login. With gitea you can have multiple accounts logged in. When you try to run a command such as...",
      "date_published": "2025-11-23T21:09:36Z",
      "date_modified": "2025-11-23T21:09:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "git",
        "gitea",
        "forgejo"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-wyattbubbylee-com/",
      "url": "https://go.waylonwalker.com/waylonwalker-wyattbubbylee-com/",
      "title": "⭐ WaylonWalker wyattbubbylee.com",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/WaylonWalker/wyattbubbylee.com\" 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\"\u003ewyattbubbylee.com\u003c/a\u003e by \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/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [wyattbubbylee.com](https://github.com/WaylonWalker/wyattbubbylee.com) by [WaylonWalker](https://github.com/WaylonWalker).\n\nNo description available.\n",
      "summary": "Looking for inspiration? wyattbubbylee.com by WaylonWalker.",
      "date_published": "2025-11-23T17:08:03Z",
      "date_modified": "2025-11-23T17:08:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-qmk_firmware/",
      "url": "https://go.waylonwalker.com/waylonwalker-qmk_firmware/",
      "title": "⭐ WaylonWalker qmk_firmware",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/WaylonWalker/qmk_firmware\" 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\"\u003eqmk_firmware\u003c/a\u003e, created by \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/p\u003e\n\u003cp\u003eOpen-source keyboard firmware for Atmel AVR and Arm USB families\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [qmk_firmware](https://github.com/WaylonWalker/qmk_firmware), created by [WaylonWalker](https://github.com/WaylonWalker).\n\nOpen-source keyboard firmware for Atmel AVR and Arm USB families\n",
      "summary": "If you're into interesting projects, don't miss out on qmk_firmware, created by WaylonWalker.",
      "date_published": "2025-11-23T17:08:01Z",
      "date_modified": "2025-11-23T17:08:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/octelium-octelium/",
      "url": "https://go.waylonwalker.com/octelium-octelium/",
      "title": "⭐ octelium octelium",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/octelium/octelium\" 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\"\u003eoctelium\u003c/a\u003e by \u003ca href=\"https://github.com/octelium\" 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\"\u003eoctelium\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA next-gen FOSS \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 unified zero trust secure access platform that can operate as a remote access VPN, a ZTNA platform, API/AI/MCP gateway, a PaaS, an ngrok-alternative and a \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 infrastructure.\u003c/p\u003e\n",
      "content_text": "\nCheck out [octelium](https://github.com/octelium/octelium) by [octelium](https://github.com/octelium). It's a well-crafted project with great potential.\n\nA next-gen FOSS self-hosted unified zero trust secure access platform that can operate as a remote access VPN, a ZTNA platform, API/AI/MCP gateway, a PaaS, an ngrok-alternative and a homelab infrastructure.\n",
      "summary": "Check out octelium by octelium. It's a well-crafted project with great potential.",
      "date_published": "2025-11-20T01:02:04Z",
      "date_modified": "2025-11-20T01:02:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-870/",
      "url": "https://go.waylonwalker.com/thought-870/",
      "title": "💭 Microsoft keeps losing - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"AyuMdNoL1Vs\" title=\"Microsoft keeps losing\" playlabel=\"Play: Microsoft keeps losing\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e👏👏👏preach it prime!  M$ continues to prove that they are not making products for you something else is affoot and shit you don’t want is shoved down your throat and forced on you.\u003c/p\u003e\n\u003cp\u003ePrime points out that the agentic is prompt injected itself😂.  Rather than making a better os experience it’s assuming you are stupid and need everything done for you.  But what I don’t get here in the text scaling example.  Why the F does it not just fix it for me.  When I ask the machine to make text bigger it puts a flashy circle where to click.  This is a one time setup for someone who gives no fucks to remember how to do it.  Why is the machine doing this weird hand holding watching us do it’s work rather than just doing it? I like the pattern when you change display setting it gives you a counter that reverts everything if for some reason shit is so bad you can’t even see it.  Do that, not this help me click bs.\u003c/p\u003e\n\u003cp\u003eNow in parallel we have steam making Linux desktop better and better.  Allowing you to just access the hardware you own to do what you want to do with it.  Providing a fantastic hands off out of the box experience for the price of the hardware.  No ongoing fees, no upgrade cycle, soft lock, aribraray cutoff date, tpm bs requirements.  Good stuff as it was supposed to be created.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"AyuMdNoL1Vs\" title=\"Microsoft keeps losing\" playlabel=\"Play: Microsoft keeps losing\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n👏👏👏preach it prime!  M$ continues to prove that they are not making products for you something else is affoot and shit you don't want is shoved down your throat and forced on you.\n\nPrime points out that the agentic is prompt injected itself😂.  Rather than making a better os experience it's assuming you are stupid and need everything done for you.  But what I don't get here in the text scaling example.  Why the F does it not just fix it for me.  When I ask the machine to make text bigger it puts a flashy circle where to click.  This is a one time setup for someone who gives no fucks to remember how to do it.  Why is the machine doing this weird hand holding watching us do it's work rather than just doing it? I like the pattern when you change display setting it gives you a counter that reverts everything if for some reason shit is so bad you can't even see it.  Do that, not this help me click bs.\n\nNow in parallel we have steam making Linux desktop better and better.  Allowing you to just access the hardware you own to do what you want to do with it.  Providing a fantastic hands off out of the box experience for the price of the hardware.  No ongoing fees, no upgrade cycle, soft lock, aribraray cutoff date, tpm bs requirements.  Good stuff as it was supposed to be created.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtu.be/AyuMdNoL1Vs?si=QQ3BoV33nXR_TPnC",
      "date_published": "2025-11-15T17:51:23Z",
      "date_modified": "2025-11-15T17:51:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-869/",
      "url": "https://go.waylonwalker.com/thought-869/",
      "title": "💭 PETaflop cluster - Justin Garrison",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justingarrison.com/blog/petaflop-cluster/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://justingarrison.com/img/petaflop-banner.jpg\" alt=\"PETaflop cluster — AI is a pain in the back.\" loading=\"lazy\"/ data-glightbox=\"description: PETaflop cluster — AI is a pain in the back.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePETaflop cluster\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI is a pain in the back.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e Justin Garrison · justingarrison.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJustin makes the coolest kubernetes clusters wishing I could see it in the flesh at Kubecon.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justingarrison.com/blog/petaflop-cluster/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://justingarrison.com/img/petaflop-banner.jpg\" alt=\"PETaflop cluster — AI is a pain in the back.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePETaflop cluster\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI is a pain in the back.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e Justin Garrison \u0026middot; justingarrison.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJustin makes the coolest kubernetes clusters wishing I could see it in the flesh at Kubecon.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://justingarrison.com/blog/petaflop-cluster/",
      "date_published": "2025-11-12T17:44:41Z",
      "date_modified": "2025-11-12T17:44:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-868/",
      "url": "https://go.waylonwalker.com/thought-868/",
      "title": "💭 ChatGPT made me delusional",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"VRjgNgJms3Q\" title=\"ChatGPT made me delusional\" playlabel=\"Play: ChatGPT made me delusional\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAbsolutely banger of a video, what a wild idea to send gippity a bit off course and just see how far off the rails it will go.  Dude did a banger of an edit on it.  I’ll admit that I listened to the whole thing, but did not watch much, saving here as I might go back when I have time to really watch it.  It was really weird how easy it was for chat to say something that could be true, but nearly no chance of it actually happening over and over and just keep it going down this dark spiral of conspiracies.  It was ready to electrocute him and separate him from anyone who had a chance of being a non believer.  At any moment was ready to say that those closest to him might be his problem.  gipity is not your friend, or your therapist.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"VRjgNgJms3Q\" title=\"ChatGPT made me delusional\" playlabel=\"Play: ChatGPT made me delusional\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAbsolutely banger of a video, what a wild idea to send gippity a bit off course and just see how far off the rails it will go.  Dude did a banger of an edit on it.  I'll admit that I listened to the whole thing, but did not watch much, saving here as I might go back when I have time to really watch it.  It was really weird how easy it was for chat to say something that could be true, but nearly no chance of it actually happening over and over and just keep it going down this dark spiral of conspiracies.  It was ready to electrocute him and separate him from anyone who had a chance of being a non believer.  At any moment was ready to say that those closest to him might be his problem.  gipity is not your friend, or your therapist.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=VRjgNgJms3Q",
      "date_published": "2025-11-12T02:35:21Z",
      "date_modified": "2025-11-12T02:35:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/side-effect-of-just-stars/",
      "url": "https://go.waylonwalker.com/side-effect-of-just-stars/",
      "title": "side effect of just stars",
      "content_html": "\u003cp\u003eI found an interesting side effect of manually running my script to generate [[\nstars ]] posts is that you get notified when one gets renamed.  Today I noticed\nthat Ned Batchelder created a coveragepy org.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/cf6dd0cc-5a74-40bf-8512-f62471ea1e56.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/cf6dd0cc-5a74-40bf-8512-f62471ea1e56.png\" alt=\"screenshot-2025-11-12T03-33-12-967Z.png\"/ data-glightbox=\"description: screenshot-2025-11-12T03-33-12-967Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI found an interesting side effect of manually running my script to generate [[\nstars ]] posts is that you get notified when one gets renamed.  Today I noticed\nthat Ned Batchelder created a coveragepy org.\n\n![screenshot-2025-11-12T03-33-12-967Z.png](https://dropper.waylonwalker.com/api/file/cf6dd0cc-5a74-40bf-8512-f62471ea1e56.png)\n",
      "summary": "I found an interesting side effect of manually running my script to generate stars posts is that you get notified when one gets renamed. Today I noticed that...",
      "date_published": "2025-11-11T21:33:33Z",
      "date_modified": "2025-11-11T21:33:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pydantic-settings-alias-choices/",
      "url": "https://go.waylonwalker.com/pydantic-settings-alias-choices/",
      "title": "pydantic settings alias choices",
      "content_html": "\u003cp\u003eToday I learned how to use AliasChoices with pydantic settings to setup common\naliases for the same field.  I’m bad about remembering these things, and hate\nlooking up the docs.  I like things to be intuitive and just do the thing I\nwant it to do.  Especially when they get configured through something like yaml\nand do not have a direct lsp look up right from my editor.  I figured out how\nto support what might be common aliases for a storage directory.  These can be\nset up as environment variables and used by config.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eAliasChoices\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic_settings\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseSettings\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eSettings\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseSettings\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estorage_dir\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003evalidation_alias\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eAliasChoices\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;STORAGE_DIR\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;STORAGE_DIRECTORY\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;STORAGE_PATH\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;STORAGE_PATHNAME\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;DROPPER_STORAGE_DIR\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;DROPPER_STORAGE_DIRECTORY\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;DROPPER_STORAGE_PATH\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;DROPPER_STORAGE_PATHNAME\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Directory for stored files\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I learned how to use AliasChoices with pydantic settings to setup common\naliases for the same field.  I'm bad about remembering these things, and hate\nlooking up the docs.  I like things to be intuitive and just do the thing I\nwant it to do.  Especially when they get configured through something like yaml\nand do not have a direct lsp look up right from my editor.  I figured out how\nto support what might be common aliases for a storage directory.  These can be\nset up as environment variables and used by config.\n\n``` python\nfrom pathlib import Path\n\nfrom pydantic import Field\nfrom pydantic import AliasChoices\nfrom pydantic_settings import BaseSettings\n\nclass Settings(BaseSettings):\n    storage_dir: Path | None = Field(\n        default=None,\n        validation_alias=AliasChoices(\n            \"STORAGE_DIR\", \"STORAGE_DIRECTORY\", \"STORAGE_PATH\", \"STORAGE_PATHNAME\",\n            \"DROPPER_STORAGE_DIR\", \"DROPPER_STORAGE_DIRECTORY\", \"DROPPER_STORAGE_PATH\", \"DROPPER_STORAGE_PATHNAME\",\n        ),\n        description=\"Directory for stored files\",\n    )\n```\n",
      "summary": "Today I learned how to use AliasChoices with pydantic settings to setup common aliases for the same field. I'm bad about remembering these things, and hate...",
      "date_published": "2025-11-11T21:23:58Z",
      "date_modified": "2025-11-11T21:23:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-867/",
      "url": "https://go.waylonwalker.com/thought-867/",
      "title": "💭 Post | LinkedIn",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.linkedin.com/posts/anton-martyniuk_mark-zuckerberg-scaled-facebook-in-2005-activity-7393550498584371201-iqDA/?utm_source=share\u0026amp;utm_medium=member_desktop\u0026amp;rcm=ACoAACM7I2cBosNBb12iAVlY0IZbLYYHgFOyIg4\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media.licdn.com/dms/image/v2/D4E22AQFEJ1tbZxs6oQ/feedshare-shrink_2048_1536/B4EZpsq0GuKcAw-/0/1762759756836?e=2147483647\u0026amp;v=beta\u0026amp;t=CXkiq2DeYEFB2pt_zf5-0U9ekCJ2Vc1O4umxI5IC5lo\" alt=\"Mark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\n\u0026lt;p\u0026gt;No fancy orchestration.\nNo distributed event streams.\nNo cloud-native… | Anton Martyniuk | 270 comments — Mark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;No fancy orchestration.\nNo distributed event streams.\nNo cloud-native anything.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;Modern devs love to over-engineer.\nWe build as if our projects will scale to 1 million users tomorrow.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;But here\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Mark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\n\u0026lt;p\u0026gt;No fancy orchestration.\nNo distributed event streams.\nNo cloud-native… | Anton Martyniuk | 270 comments — Mark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;No fancy orchestration.\nNo distributed event streams.\nNo cloud-native anything.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;Modern devs love to over-engineer.\nWe build as if our projects will scale to 1 million users tomorrow.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;But here\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eMark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eNo fancy orchestration.\nNo distributed event streams.\nNo cloud-native… | Anton Martyniuk | 270 comments\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eMark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eNo fancy orchestration.\nNo distributed event streams.\nNo cloud-native anyth…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eLinkedIn · linkedin.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eLean on your skills and your goals. If your goals are to have fun, use whatever you want. If you are looking for a job, Lean on tech that bridges the gap between your resume and the job you want. If you want to build a good product use the tech you are best at. No one in their right mind would throw away 20 years of tech progression because Zuck built facebook ftping php to a server.\u003c/p\u003e\n\u003cp\u003eThe sentiment in this post is fine at best the picture feels triggering and oversimplies  way too much.  If you like kubernetes \u003ca href=\"/just-fucking-use-kubernetes/\" class=\"wikilink\" data-title=\"just fucking use kubernetes\" data-description=\"You want to run containers?\" data-date=\"2025-07-01\" data-preview=\"You want to run containers?\"\u003ejust fucking use kubernetes\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis topic deserves a full on post, maybe later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.linkedin.com/posts/anton-martyniuk_mark-zuckerberg-scaled-facebook-in-2005-activity-7393550498584371201-iqDA/?utm_source=share\u0026amp;utm_medium=member_desktop\u0026amp;rcm=ACoAACM7I2cBosNBb12iAVlY0IZbLYYHgFOyIg4\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media.licdn.com/dms/image/v2/D4E22AQFEJ1tbZxs6oQ/feedshare-shrink_2048_1536/B4EZpsq0GuKcAw-/0/1762759756836?e=2147483647\u0026amp;v=beta\u0026amp;t=CXkiq2DeYEFB2pt_zf5-0U9ekCJ2Vc1O4umxI5IC5lo\" alt=\"Mark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\n\nNo fancy orchestration.\nNo distributed event streams.\nNo cloud-native… | Anton Martyniuk | 270 comments — Mark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\n\nNo fancy orchestration.\nNo distributed event streams.\nNo cloud-native anything.\n\nModern devs love to over-engineer.\nWe build as if our projects will scale to 1 million users tomorrow.\n\nBut here\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\n\nNo fancy orchestration.\nNo distributed event streams.\nNo cloud-native… | Anton Martyniuk | 270 comments\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMark Zuckerberg scaled Facebook in 2005 - without Kubernetes, Serverless Functions, Redis, Managed Auth, Rust, or Kafka.\n\nNo fancy orchestration.\nNo distributed event streams.\nNo cloud-native anyth...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLinkedIn \u0026middot; linkedin.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLean on your skills and your goals. If your goals are to have fun, use whatever you want. If you are looking for a job, Lean on tech that bridges the gap between your resume and the job you want. If you want to build a good product use the tech you are best at. No one in their right mind would throw away 20 years of tech progression because Zuck built facebook ftping php to a server.\n\nThe sentiment in this post is fine at best the picture feels triggering and oversimplies  way too much.  If you like kubernetes \u003ca href=\"/just-fucking-use-kubernetes/\" class=\"wikilink\" data-title=\"just fucking use kubernetes\" data-description=\"You want to run containers?\" data-date=\"2025-07-01\"\u003ejust fucking use kubernetes\u003c/a\u003e.\n\nThis topic deserves a full on post, maybe later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.linkedin.com/posts/anton-martyniuk_source=share\u0026utm_desktop\u0026rcm=ACoAACM7I2cBosNBb12iAVlY0IZbLYYHgFOyIg4",
      "date_published": "2025-11-11T02:43:05Z",
      "date_modified": "2025-11-11T02:43:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-866/",
      "url": "https://go.waylonwalker.com/thought-866/",
      "title": "💭 Ford Thinks We're Cooked, I agree- YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"TyCR8YpvqhE\" title=\"Ford Thinks We\u0026#39;re Cooked, I Agree\" playlabel=\"Play: Ford Thinks We\u0026#39;re Cooked, I Agree\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAre we cooked?  Are we?  Yes the consumers are cooked there are no more affordable cars with basic shit that you need to go point a to point b.  Ford make us cars we can afford and you won’t be cooked by this dumb shit.  If you can market it?\u003c/p\u003e\n\u003cp\u003eMost people don’t care what sticker price is and only the monthly payment.  This is why we are cooked.  We stopped caring that these things cost way too much.  I’m probably in a small minority that just want an affordable reliable vehicle and could care less about features past climate control.  I don’t use them.  My phone has maps and music I don’t need a screen in my vehicle for anything.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"TyCR8YpvqhE\" title=\"Ford Thinks We\u0026#39;re Cooked, I Agree\" playlabel=\"Play: Ford Thinks We\u0026#39;re Cooked, I Agree\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAre we cooked?  Are we?  Yes the consumers are cooked there are no more affordable cars with basic shit that you need to go point a to point b.  Ford make us cars we can afford and you won't be cooked by this dumb shit.  If you can market it?  \n\nMost people don't care what sticker price is and only the monthly payment.  This is why we are cooked.  We stopped caring that these things cost way too much.  I'm probably in a small minority that just want an affordable reliable vehicle and could care less about features past climate control.  I don't use them.  My phone has maps and music I don't need a screen in my vehicle for anything.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtu.be/TyCR8YpvqhE?si=VmV389UaBzGbjdO-",
      "date_published": "2025-11-06T16:35:18Z",
      "date_modified": "2025-11-06T16:35:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "automotive",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/skardyy-mcat/",
      "url": "https://go.waylonwalker.com/skardyy-mcat/",
      "title": "⭐ Skardyy mcat",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Skardyy/mcat\" 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\"\u003emcat\u003c/a\u003e by \u003ca href=\"https://github.com/Skardyy\" 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\"\u003eSkardyy\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eTerminal image, video, directory, and Markdown viewer\u003c/p\u003e\n",
      "content_text": "\n[mcat](https://github.com/Skardyy/mcat) by [Skardyy](https://github.com/Skardyy) is a game-changer in its space. Excited to see how it evolves.\n\nTerminal image, video, directory, and Markdown viewer\n",
      "summary": "mcat by Skardyy is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-11-04T23:36:51Z",
      "date_modified": "2025-11-04T23:36:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-865/",
      "url": "https://go.waylonwalker.com/thought-865/",
      "title": "💭 I refuse to change the way I play… 😂🔥 #comedy #videogames #min...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2TUER4JftGA\" title=\"I refuse to change the way I play… 😂🔥 #comedy #videogames \u0026lt;a href=\" tags=\"\" minecraft=\"\" \"=\"\" class=\"hashtag-tag\" data-tag=\"minecraft\" data-count=\"28\" data-reading-time=\"32\" data-reading-time-text=\"32 minutes\"\u003e#minecraft\u0026#34; playlabel=\u0026#34;Play: I refuse to change the way I play… 😂🔥 #comedy #videogames \u003ca href=\"/tags/minecraft/\" class=\"hashtag-tag\" data-tag=\"minecraft\" data-count=\"28\" data-reading-time=\"32\" data-reading-time-text=\"32 minutes\"\u003e#minecraft\u003c/a\u003e\u0026#34;\u0026gt;\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eMicrosoft has been addding features to Minecraft for over 10 years now.  Idk if there was momentum from the mojang theme, but we’ve barely paid attention to any updates in the last five years.  The ocean update was huge, caves and cliffs were huge then it trailed off to we play each release on release day, use commands to try out new features, then never touch them again either to play minecraft as we always have or to play a modded pack with crazy new features that really make an impact on gameplay.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2TUER4JftGA\" title=\"I refuse to change the way I play… 😂🔥 #comedy #videogames \u003ca href=\"/tags/minecraft/\" class=\"hashtag-tag\" data-tag=\"minecraft\" data-count=28 data-reading-time=32 data-reading-time-text=\"32 minutes\"\u003e#minecraft\u003c/a\u003e\" playlabel=\"Play: I refuse to change the way I play… 😂🔥 #comedy #videogames \u003ca href=\"/tags/minecraft/\" class=\"hashtag-tag\" data-tag=\"minecraft\" data-count=28 data-reading-time=32 data-reading-time-text=\"32 minutes\"\u003e#minecraft\u003c/a\u003e\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nMicrosoft has been addding features to Minecraft for over 10 years now.  Idk if there was momentum from the mojang theme, but we've barely paid attention to any updates in the last five years.  The ocean update was huge, caves and cliffs were huge then it trailed off to we play each release on release day, use commands to try out new features, then never touch them again either to play minecraft as we always have or to play a modded pack with crazy new features that really make an impact on gameplay.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=2TUER4JftGA",
      "date_published": "2025-11-02T16:12:02Z",
      "date_modified": "2025-11-02T16:12:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "minecraft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-864/",
      "url": "https://go.waylonwalker.com/thought-864/",
      "title": "💭 Rewriting SQLite from prison with Preston Thorpe - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"AEPf9zUI_fQ\" title=\"Rewriting SQLite from prison with Preston Thorpe\" playlabel=\"Play: Rewriting SQLite from prison with Preston Thorpe\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAbsolutely incredible what Preston is doing with his time.  What a life changing experience this must be for him.  Good job to Turso for making this happen.  We are going to end up with very feature rich file based databases out of this that the whole world will benefit from.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"AEPf9zUI_fQ\" title=\"Rewriting SQLite from prison with Preston Thorpe\" playlabel=\"Play: Rewriting SQLite from prison with Preston Thorpe\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAbsolutely incredible what Preston is doing with his time.  What a life changing experience this must be for him.  Good job to Turso for making this happen.  We are going to end up with very feature rich file based databases out of this that the whole world will benefit from.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=AEPf9zUI_fQ",
      "date_published": "2025-11-02T15:46:38Z",
      "date_modified": "2025-11-02T15:46:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "database",
        "oss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-863/",
      "url": "https://go.waylonwalker.com/thought-863/",
      "title": "💭 STOP. Using AI Right now - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qw4fDU18RcU\" title=\"STOP. Using AI Right now\" playlabel=\"Play: STOP. Using AI Right now\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAbsolutely love this selfhosted arc of pewdiepie that is going on right now.  It’s crazy to witness now fast he is picking up linux / self hosting, and sounds like soon will be programming.  In this one he built a $20k AI beast that crushes gippity with power, speed, proximity, and security.  No one to take your data, no latency to the data center, no one else bogging down your prompts, just raw speed.  It looks absolutely wild.  He implemented RAG and gave it a bunch of data about himself and its able to spit out his wife’s name and phone number in under a second.  It writes code at blazing pace.  This may be the future that we get over the next few years as things shift towards AI there will be more affordable options, and a larger second hand market for building out these highly capable machines.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qw4fDU18RcU\" title=\"STOP. Using AI Right now\" playlabel=\"Play: STOP. Using AI Right now\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAbsolutely love this selfhosted arc of pewdiepie that is going on right now.  It's crazy to witness now fast he is picking up linux / self hosting, and sounds like soon will be programming.  In this one he built a $20k AI beast that crushes gippity with power, speed, proximity, and security.  No one to take your data, no latency to the data center, no one else bogging down your prompts, just raw speed.  It looks absolutely wild.  He implemented RAG and gave it a bunch of data about himself and its able to spit out his wife's name and phone number in under a second.  It writes code at blazing pace.  This may be the future that we get over the next few years as things shift towards AI there will be more affordable options, and a larger second hand market for building out these highly capable machines.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=qw4fDU18RcU",
      "date_published": "2025-11-02T15:42:29Z",
      "date_modified": "2025-11-02T15:42:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-862/",
      "url": "https://go.waylonwalker.com/thought-862/",
      "title": "💭 The Glorious Pipe Operator (Elixir for PHP Devs) | Jesse Leite",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jesseleite.com/2025/the-glorious-pipe-operator\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jesseleite.com/img/asset/YXNzZXRzL3Nlby9vZy1pbWFnZS1iYWctZW5kLnBuZw/og-image-bag-end.png?p=seo_pro_og\u0026amp;s=345669cb43e131dd75d795dca9edb0c7\" alt=\"The Glorious Pipe Operator (Elixir for PHP Devs) — Let\u0026#39;s talk about how how the functional pipe operator helps to simplify and improve code readability and composability, and how it contrasts with the fluent interface design pattern commonly used in OOP.\" loading=\"lazy\"/ data-glightbox=\"description: The Glorious Pipe Operator (Elixir for PHP Devs) — Let\u0026#39;s talk about how how the functional pipe operator helps to simplify and improve code readability and composability, and how it contrasts with the fluent interface design pattern commonly used in OOP.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe Glorious Pipe Operator (Elixir for PHP Devs)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLet\u0026#39;s talk about how how the functional pipe operator helps to simplify and improve code readability and composability, and how it contrasts with the fluent interface design pattern commonly used i...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJesse Leite · jesseleite.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m so glad that python supports method chaining out of the box, very similar to the pipe operator that Jesse mentions here.  It makes everything much more readable to follow the flow rather than needing to parse nested funcion calls \u003ccode\u003eout(inside())\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jesseleite.com/2025/the-glorious-pipe-operator\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jesseleite.com/img/asset/YXNzZXRzL3Nlby9vZy1pbWFnZS1iYWctZW5kLnBuZw/og-image-bag-end.png?p=seo_pro_og\u0026amp;s=345669cb43e131dd75d795dca9edb0c7\" alt=\"The Glorious Pipe Operator (Elixir for PHP Devs) — Let\u0026#39;s talk about how how the functional pipe operator helps to simplify and improve code readability and composability, and how it contrasts with the fluent interface design pattern commonly used in OOP.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe Glorious Pipe Operator (Elixir for PHP Devs)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLet\u0026#39;s talk about how how the functional pipe operator helps to simplify and improve code readability and composability, and how it contrasts with the fluent interface design pattern commonly used i...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJesse Leite \u0026middot; jesseleite.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm so glad that python supports method chaining out of the box, very similar to the pipe operator that Jesse mentions here.  It makes everything much more readable to follow the flow rather than needing to parse nested funcion calls `out(inside())`.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jesseleite.com/2025/the-glorious-pipe-operator",
      "date_published": "2025-11-02T15:36:24Z",
      "date_modified": "2025-11-02T15:36:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "software",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-861/",
      "url": "https://go.waylonwalker.com/thought-861/",
      "title": "💭 is AI ruining opensource? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"kP93L683UOE\" title=\"is AI ruining opensource?\" playlabel=\"Play: is AI ruining opensource?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI greatly appreciated the wide variety of experienced maintainers of large oss projects.  From webdev to desktop application.  The most common sentiment here was don’t contribute to open source just to contribute to open source. Bring something meaningful to the project.  Find a project you like, look at the discussions/issues for work or start some discussions.  If there are no meaningful features that you can add to projects that you use and love, make your own thing.  Adam from tailwind really hit on this one several times.  He has made tailwind extensible so that you \u003cstrong\u003edon’t\u003c/strong\u003e have to contribute to tailwind to get new capabilities, you can probably just extend tailwind with your thing.  Its likely that it makes a lot more sense or your use case, and if it turns out that it makes sense for everyone have the discussion about bringing it in.  The upside to small oss projects is that you can move at whatever pace you want and break them all you want when the user base is just you.  As you move your stuff into tailwind you have to be very careful not to break the massive tailwind user base and you have to bend to the release schedule of tailwind.\u003c/p\u003e\n\u003cp\u003eThe other adjacent topic that kept coming back is that low effort Prs are definitely on the rise with some of the projects.  Refactor PRs get automatically closed because they are likely LLM driven, bring little to no value to the project, but bring a ton of risk.  Don’t do this to maintiners.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"kP93L683UOE\" title=\"is AI ruining opensource?\" playlabel=\"Play: is AI ruining opensource?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI greatly appreciated the wide variety of experienced maintainers of large oss projects.  From webdev to desktop application.  The most common sentiment here was don't contribute to open source just to contribute to open source. Bring something meaningful to the project.  Find a project you like, look at the discussions/issues for work or start some discussions.  If there are no meaningful features that you can add to projects that you use and love, make your own thing.  Adam from tailwind really hit on this one several times.  He has made tailwind extensible so that you **don't** have to contribute to tailwind to get new capabilities, you can probably just extend tailwind with your thing.  Its likely that it makes a lot more sense or your use case, and if it turns out that it makes sense for everyone have the discussion about bringing it in.  The upside to small oss projects is that you can move at whatever pace you want and break them all you want when the user base is just you.  As you move your stuff into tailwind you have to be very careful not to break the massive tailwind user base and you have to bend to the release schedule of tailwind.\n\nThe other adjacent topic that kept coming back is that low effort Prs are definitely on the rise with some of the projects.  Refactor PRs get automatically closed because they are likely LLM driven, bring little to no value to the project, but bring a ton of risk.  Don't do this to maintiners.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=kP93L683UOE",
      "date_published": "2025-11-02T15:31:24Z",
      "date_modified": "2025-11-02T15:31:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "oss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rustfs-rustfs/",
      "url": "https://go.waylonwalker.com/rustfs-rustfs/",
      "title": "⭐ rustfs rustfs",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rustfs/rustfs\" 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\"\u003erustfs\u003c/a\u003e by \u003ca href=\"https://github.com/rustfs\" 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\"\u003erustfs\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003e🚀 RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.\u003c/p\u003e\n",
      "content_text": "\n[rustfs](https://github.com/rustfs/rustfs) by [rustfs](https://github.com/rustfs) is a game-changer in its space. Excited to see how it evolves.\n\n🚀 RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.\n",
      "summary": "rustfs by rustfs is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-10-31T12:38:49Z",
      "date_modified": "2025-10-31T12:38:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-860/",
      "url": "https://go.waylonwalker.com/thought-860/",
      "title": "💭 You already have a git server: (Maurycy's blog)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maurycyz.com/misc/easy_git/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/maurycyz.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/maurycyz.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOutdated client!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaurycyz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIt’s so easy to forget low level tech sometimes.  Things that are dead simple and just work without a hitch.  \u003ccode\u003egit\u003c/code\u003e is one of those rock solid things thats very easy to remember all that it does, this is a classic use case.\u003c/p\u003e\n\u003cp\u003eThis just works\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /parent/directory/for/repo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone ssh://username@server/path/to/repo\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn order to recieve you must update the remote to allow recieve.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config receive.denyCurrentBranch updateInstead\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow you can pull update push.\u003c/p\u003e\n\u003cp\u003eIt’s funny how this was the way I first learned to do Continuous Deployment to a RHEL7 machine, also how Heroku worked, but its so easy to forget this solution is there.  I come across it every few years and immediately have a few use cases in mind.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maurycyz.com/misc/easy_git/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOutdated client!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaurycyz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIt's so easy to forget low level tech sometimes.  Things that are dead simple and just work without a hitch.  `git` is one of those rock solid things thats very easy to remember all that it does, this is a classic use case.\n\nThis just works\n\n``` bash\ncd /parent/directory/for/repo\ngit clone ssh://username@server/path/to/repo\n```\n\nIn order to recieve you must update the remote to allow recieve.\n\n``` bash\ngit config receive.denyCurrentBranch updateInstead\n```\n\nNow you can pull update push.  \n\nIt's funny how this was the way I first learned to do Continuous Deployment to a RHEL7 machine, also how Heroku worked, but its so easy to forget this solution is there.  I come across it every few years and immediately have a few use cases in mind.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://maurycyz.com/misc/easy_git/",
      "date_published": "2025-10-29T13:04:20Z",
      "date_modified": "2025-10-29T13:04:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-859/",
      "url": "https://go.waylonwalker.com/thought-859/",
      "title": "💭 Please don't give Reflect Orbital money: (Maurycy's blog)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maurycyz.com/misc/sunlight_as_a_service/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/maurycyz.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/maurycyz.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOutdated client!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaurycyz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWell done write up about reflecting solar energy back to earth from low orbit space.  I did not know this was a thing, apparently it is/isn’t.  Solar is a great technology, its largest limitations are that its not consistent.  This tech does not fix this problem, what does is efficient long term storage.  I’ve seen some crazy ideas going back to my days in school, maybe elementry school.  Theres a lot of innovative ways to store potential energy by moving heavy objects uphill whether fluid or solid.  The issue is that energy storage at grid scale is HUGE and not efficient enough.  Even assuming this idea had any legs at all, it still doesn’t solve the problem of inconsistent power because it still cant go through clouds!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maurycyz.com/misc/sunlight_as_a_service/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOutdated client!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaurycyz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWell done write up about reflecting solar energy back to earth from low orbit space.  I did not know this was a thing, apparently it is/isn't.  Solar is a great technology, its largest limitations are that its not consistent.  This tech does not fix this problem, what does is efficient long term storage.  I've seen some crazy ideas going back to my days in school, maybe elementry school.  Theres a lot of innovative ways to store potential energy by moving heavy objects uphill whether fluid or solid.  The issue is that energy storage at grid scale is HUGE and not efficient enough.  Even assuming this idea had any legs at all, it still doesn't solve the problem of inconsistent power because it still cant go through clouds!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://maurycyz.com/misc/sunlight_a_service/",
      "date_published": "2025-10-29T12:45:07Z",
      "date_modified": "2025-10-29T12:45:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "science",
        "solar",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-858/",
      "url": "https://go.waylonwalker.com/thought-858/",
      "title": "💭 Post by @letitmelo.bsky.social — Bluesky",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/letitmelo.bsky.social/post/3m4bxweqs3k2u\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:4cssogwxqtgf2ogidyq63x7r/bafkreicpsrr7vctapomg533uvr5ai2zwnbvxn6hfhzousicozmrjv3tz7y\" alt=\"Melo (@letitmelo.bsky.social) — I legitimately didn\u0026#39;t know they were competing with Steam and it\u0026#39;s crazy to me that they burnt so much money on what sounds like something with very little (or wildly misguided) market research.\n\u0026lt;p\u0026gt;[contains quote post or other embedded content]\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Melo (@letitmelo.bsky.social) — I legitimately didn\u0026#39;t know they were competing with Steam and it\u0026#39;s crazy to me that they burnt so much money on what sounds like something with very little (or wildly misguided) market research.\n\u0026lt;p\u0026gt;[contains quote post or other embedded content]\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eMelo (@letitmelo.bsky.social)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eI legitimately didn\u0026#39;t know they were competing with Steam and it\u0026#39;s crazy to me that they burnt so much money on what sounds like something with very little (or wildly misguided) market research.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e[…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eWild to see the LinkedIn post linked here to see how out of touch this feels.  I find it astonishing that they have something so ingrained into gaming culture as twitch, yet build something like Prime Gaming.  Maybe I have no idea what Prime gaming is, but it feels like the opposite of ownership.  What I get from steam is a sense of ownership.  I own the desktop/laptop/handheld, no one \u003cstrong\u003ecough\u003c/strong\u003e \u003cem\u003enintendo\u003c/em\u003e \u003cstrong\u003ecough cough\u003c/strong\u003e cant remotely disable my device for using it inappropriately.  I have a sense of trust with steam that as long as Gabe is alive I own what I paid for and will be able to open up and play anything at any time on any device I want.  It might be a $100 dell workstation raised out of the coorporate refurb bin, it might be a high end machine, It could be my 2010 gateway or my 2045 custom build and they are all likely to play a good amount of my library at some level.  I still understand that I really own nothing and the moment steam turns off its servers its quite likely  that everything is broken, but its by far the best we have.  Far from the status quo we are headed towards with subscription and cloud based gaming.  If they wanted to disrupt steam they did not understand their audience.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/letitmelo.bsky.social/post/3m4bxweqs3k2u\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:4cssogwxqtgf2ogidyq63x7r/bafkreicpsrr7vctapomg533uvr5ai2zwnbvxn6hfhzousicozmrjv3tz7y\" alt=\"Melo (@letitmelo.bsky.social) — I legitimately didn\u0026#39;t know they were competing with Steam and it\u0026#39;s crazy to me that they burnt so much money on what sounds like something with very little (or wildly misguided) market research.\n\n[contains quote post or other embedded content]\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMelo (@letitmelo.bsky.social)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI legitimately didn\u0026#39;t know they were competing with Steam and it\u0026#39;s crazy to me that they burnt so much money on what sounds like something with very little (or wildly misguided) market research.\n\n[...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWild to see the LinkedIn post linked here to see how out of touch this feels.  I find it astonishing that they have something so ingrained into gaming culture as twitch, yet build something like Prime Gaming.  Maybe I have no idea what Prime gaming is, but it feels like the opposite of ownership.  What I get from steam is a sense of ownership.  I own the desktop/laptop/handheld, no one **cough** _nintendo_ **cough cough** cant remotely disable my device for using it inappropriately.  I have a sense of trust with steam that as long as Gabe is alive I own what I paid for and will be able to open up and play anything at any time on any device I want.  It might be a $100 dell workstation raised out of the coorporate refurb bin, it might be a high end machine, It could be my 2010 gateway or my 2045 custom build and they are all likely to play a good amount of my library at some level.  I still understand that I really own nothing and the moment steam turns off its servers its quite likely  that everything is broken, but its by far the best we have.  Far from the status quo we are headed towards with subscription and cloud based gaming.  If they wanted to disrupt steam they did not understand their audience.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/letitmelo.bsky.social/post/3m4bxweqs3k2u",
      "date_published": "2025-10-29T03:29:25Z",
      "date_modified": "2025-10-29T03:29:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-857/",
      "url": "https://go.waylonwalker.com/thought-857/",
      "title": "💭 Bazzite on X: \"@thesvpanda @_Messier_33 @LeagueOfLegends Unfor...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/bazzite_gg/status/1983204433627623590\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eROASTED\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUnfortunately that game uses some of the worst spyware in the industry, it will never work outside of \u0026gt; Windows with secure boot enabled and TPM hardware.\u003c/p\u003e\n\u003cp\u003eConsider Dota 2 or other mobas by competent developers\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/bazzite_gg/status/1983204433627623590\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nROASTED\n\n\u003e Unfortunately that game uses some of the worst spyware in the industry, it will never work outside of \u003e Windows with secure boot enabled and TPM hardware.\n\u003e \n\u003e Consider Dota 2 or other mobas by competent developers\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/bazzite_gg/status/1983204433627623590",
      "date_published": "2025-10-28T21:46:30Z",
      "date_modified": "2025-10-28T21:46:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-855/",
      "url": "https://go.waylonwalker.com/thought-855/",
      "title": "💭 Post by @meredithmeredith.bsky.social — Bluesky",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/meredithmeredith.bsky.social/post/3m46a2fm5ac23\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:so5r7asbd26pmnnoerksklor/bafkreihm5jczz7o5i5mlgxpvrevjo5ognicavscbohsorgqjw5el5d3dmu\" alt=\"Meredith Whittaker  (@meredithmeredith.bsky.social) — 📣THREAD: It’s surprising to me that so many people were surprised to learn that Signal runs partly on AWS (something we can do because we use encryption to make sure no one but you–not AWS, not Signal, not anyone–can access your comms). \n\u0026lt;p\u0026gt;It’s also concerning. 1/\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;[contains quote post or other embedded content]\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Meredith Whittaker  (@meredithmeredith.bsky.social) — 📣THREAD: It’s surprising to me that so many people were surprised to learn that Signal runs partly on AWS (something we can do because we use encryption to make sure no one but you–not AWS, not Signal, not anyone–can access your comms). \n\u0026lt;p\u0026gt;It’s also concerning. 1/\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;[contains quote post or other embedded content]\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eMeredith Whittaker  (@meredithmeredith.bsky.social)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003e📣THREAD: It’s surprising to me that so many people were surprised to learn that Signal runs partly on AWS (something we can do because we use encryption to make sure no one but you–not AWS, …\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat justification for using the cloud.  The infrastructure requirement for signal to be such a great app would be massive for a small team with low budget.  The cloud is fantastic at unknown scaling, bursts beyond reasonable capacity to run yourself, getting compute \u003cstrong\u003eeverywhere\u003c/strong\u003e in the world, and offloading huge infrastructure management costs.\u003c/p\u003e\n\u003cp\u003eDHH is 100% right that we have gone too far, too many things come out cloud first for services that can be ran locally \u003cstrong\u003ecough\u003c/strong\u003e \u003cem\u003esuch as your bed\u003c/em\u003e \u003cstrong\u003ecough cough\u003c/strong\u003e.  One week ago when the world came to a hault, I did not bat an eye at these small teams with complex requirements going down with AWS.\u003c/p\u003e\n\u003cp\u003eTheir own products seem quite damning to me.  It signals that they cannot themselves become resilient to themselves.  It shows how hard this problem is, how much cost in complexity and resources it requires.  I’m sure there are fail overs that happened successfully that we will never hear about, critical products with large engineering overhead.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/meredithmeredith.bsky.social/post/3m46a2fm5ac23\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:so5r7asbd26pmnnoerksklor/bafkreihm5jczz7o5i5mlgxpvrevjo5ognicavscbohsorgqjw5el5d3dmu\" alt=\"Meredith Whittaker  (@meredithmeredith.bsky.social) — 📣THREAD: It’s surprising to me that so many people were surprised to learn that Signal runs partly on AWS (something we can do because we use encryption to make sure no one but you–not AWS, not Signal, not anyone–can access your comms). \n\nIt’s also concerning. 1/\n\n[contains quote post or other embedded content]\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMeredith Whittaker  (@meredithmeredith.bsky.social)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e📣THREAD: It’s surprising to me that so many people were surprised to learn that Signal runs partly on AWS (something we can do because we use encryption to make sure no one but you–not AWS, ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat justification for using the cloud.  The infrastructure requirement for signal to be such a great app would be massive for a small team with low budget.  The cloud is fantastic at unknown scaling, bursts beyond reasonable capacity to run yourself, getting compute **everywhere** in the world, and offloading huge infrastructure management costs.\n\nDHH is 100% right that we have gone too far, too many things come out cloud first for services that can be ran locally **cough** _such as your bed_ **cough cough**.  One week ago when the world came to a hault, I did not bat an eye at these small teams with complex requirements going down with AWS.  \n\nTheir own products seem quite damning to me.  It signals that they cannot themselves become resilient to themselves.  It shows how hard this problem is, how much cost in complexity and resources it requires.  I'm sure there are fail overs that happened successfully that we will never hear about, critical products with large engineering overhead.  \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/meredithmeredith.bsky.social/post/3m46a2fm5ac23",
      "date_published": "2025-10-28T02:16:52Z",
      "date_modified": "2025-10-28T02:16:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/schollz-croc/",
      "url": "https://go.waylonwalker.com/schollz-croc/",
      "title": "⭐ schollz croc",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/schollz/croc\" 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\"\u003ecroc\u003c/a\u003e by \u003ca href=\"https://github.com/schollz\" 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\"\u003eschollz\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eEasily and securely send things from one computer to another 🐊 📦\u003c/p\u003e\n",
      "content_text": "\nJust starred [croc](https://github.com/schollz/croc) by [schollz](https://github.com/schollz). It's an exciting project with a lot to offer.\n\nEasily and securely send things from one computer to another :crocodile: :package:\n",
      "summary": "Just starred croc by schollz. It's an exciting project with a lot to offer.",
      "date_published": "2025-10-27T12:33:54Z",
      "date_modified": "2025-10-27T12:33:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/uv-s3-sync-with-dotenv/",
      "url": "https://go.waylonwalker.com/uv-s3-sync-with-dotenv/",
      "title": "uv s3 sync with dotenv",
      "content_html": "\u003cp\u003eI often want to run an s3 sync in an isolated environment, I don’t want to set\nany environment variables, I don’t want anything secret in my history, and I\ndon’t want to change my dotenv into something that exports variables, I just\nwant s3 sync to work.  \u003ccode\u003edotenv run\u003c/code\u003e is the tool that I’ve been using for this,\nand this uv one liner lets it run fully isolated from the project.\u003c/p\u003e\n\u003ch2 id=\"one-liner\"\u003eone liner \u003ca href=\"#one-liner\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv tool run --from \u003cspan class=\"s1\"\u003e\u0026#39;python-dotenv[cli]\u0026#39;\u003c/span\u003e dotenv run -- uv tool run --from awscli aws s3 sync s3://bucket data\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"multi-line\"\u003emulti-line \u003ca href=\"#multi-line\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003esame thing formatted for readability\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv tool run \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  --from \u003cspan class=\"s1\"\u003e\u0026#39;python-dotenv[cli]\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  dotenv run -- \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003euv tool run \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  --from awscli \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  aws s3 sync s3://dropper data\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThere are probably 10 ways to skin this cat, but this is what I did, if you\nhave a better way let me know, I’ll link you below.\u003c/p\u003e\n",
      "content_text": "\nI often want to run an s3 sync in an isolated environment, I don't want to set\nany environment variables, I don't want anything secret in my history, and I\ndon't want to change my dotenv into something that exports variables, I just\nwant s3 sync to work.  `dotenv run` is the tool that I've been using for this,\nand this uv one liner lets it run fully isolated from the project.\n\n\n## one liner\n\n``` bash\nuv tool run --from 'python-dotenv[cli]' dotenv run -- uv tool run --from awscli aws s3 sync s3://bucket data\n```\n\n\n## multi-line\n\nsame thing formatted for readability\n\n``` bash\nuv tool run \\\n  --from 'python-dotenv[cli]' \\\n  dotenv run -- \\\nuv tool run \\\n  --from awscli \\\n  aws s3 sync s3://dropper data\n```\n\nThere are probably 10 ways to skin this cat, but this is what I did, if you\nhave a better way let me know, I'll link you below.\n",
      "summary": "I often want to run an s3 sync in an isolated environment, I don't want to set any environment variables, I don't want anything secret in my history, and I...",
      "date_published": "2025-10-26T10:16:41Z",
      "date_modified": "2025-10-26T10:16:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-854/",
      "url": "https://go.waylonwalker.com/thought-854/",
      "title": "💭 Ellie Huxtable on evolving Atuin (her shell history tool) for ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"OK3HrqDXqtU\" title=\"Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri\" playlabel=\"Play: Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAtuin desktop sounds dope AF, tried to install it off the \u003ca href=\"/aur/\" class=\"glossary-term\" title=\"Arch User Repository, a collection of community maintained packages for archlinux.\"\u003eAUR\u003c/a\u003e and it was broken for me.  Seems early and the dev team is all in on mac.  They have an official .deb and .rpm.  I’ll have to try again later, maybe the binary will work.\u003c/p\u003e\n\u003cp\u003eThe idea of building out runbooks from my Atuin data sounds dope AF.  It sounds like a mix of markdown and executable cells like a jupyter notebook, but not.  Really pitching hard to those of us in the system administration, dev ops, SRE space.  Having something that you walk through when a system goes down and you are feeling panicked in DR mode sounds relieving.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"OK3HrqDXqtU\" title=\"Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri\" playlabel=\"Play: Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAtuin desktop sounds dope AF, tried to install it off the AUR and it was broken for me.  Seems early and the dev team is all in on mac.  They have an official .deb and .rpm.  I'll have to try again later, maybe the binary will work.\n\nThe idea of building out runbooks from my Atuin data sounds dope AF.  It sounds like a mix of markdown and executable cells like a jupyter notebook, but not.  Really pitching hard to those of us in the system administration, dev ops, SRE space.  Having something that you walk through when a system goes down and you are feeling panicked in DR mode sounds relieving.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=OK3HrqDXqtU\u0026t=1675s",
      "date_published": "2025-10-24T00:53:16Z",
      "date_modified": "2025-10-24T00:53:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "tui",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-853/",
      "url": "https://go.waylonwalker.com/thought-853/",
      "title": "💭 My Bed Doesn't Work Because of AWS Outage? TheStandup - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"J893_8HlkPM\" title=\"AWS Outage And ANOTHER AI BROWSER???? - TheStandup\" playlabel=\"Play: AWS Outage And ANOTHER AI BROWSER???? - TheStandup\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eCloud is cooked bois.  Seriously too much dumb shit relies on the cloud.  Too much critical shit relies on single AZ’s.  If normies are literally loosing sleep over an AWS outage (queue the Uncle Roger Voice), You’ve Fucked up.  It’s wild to even think about a bed relying on the cloud let alone fully stop working when UE-1 goes down.  I want to live in a world of opt in FEATURES, things that bring value to a product because it makes it better.  Somehow a bed smells suspiciously like a cash grab for a subscription because its cloud connected.  And yet for some reason it takes 16GeeeBee’s per month.  I don’t own one of these, and I don’t want to.  I don’t want a subscription for everything, I want my shit to just work.  The future we are headed towards a world that is ever more reliant on a few key clouds.  Which is fine.  It’s fantastic that small companies can start and scale without owning an infrastructure team.  It’s great that they have the ability to give us many nines of reliability.  Some things just don’t need the cloud.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"J893_8HlkPM\" title=\"AWS Outage And ANOTHER AI BROWSER???? - TheStandup\" playlabel=\"Play: AWS Outage And ANOTHER AI BROWSER???? - TheStandup\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nCloud is cooked bois.  Seriously too much dumb shit relies on the cloud.  Too much critical shit relies on single AZ's.  If normies are literally loosing sleep over an AWS outage (queue the Uncle Roger Voice), You've Fucked up.  It's wild to even think about a bed relying on the cloud let alone fully stop working when UE-1 goes down.  I want to live in a world of opt in FEATURES, things that bring value to a product because it makes it better.  Somehow a bed smells suspiciously like a cash grab for a subscription because its cloud connected.  And yet for some reason it takes 16GeeeBee's per month.  I don't own one of these, and I don't want to.  I don't want a subscription for everything, I want my shit to just work.  The future we are headed towards a world that is ever more reliant on a few key clouds.  Which is fine.  It's fantastic that small companies can start and scale without owning an infrastructure team.  It's great that they have the ability to give us many nines of reliability.  Some things just don't need the cloud.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=J893_8HlkPM",
      "date_published": "2025-10-24T00:48:31Z",
      "date_modified": "2025-10-24T00:48:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cloud",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-852/",
      "url": "https://go.waylonwalker.com/thought-852/",
      "title": "💭 #artificialintelligence #hiring | Gary Vaynerchuk | 20 comments",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.linkedin.com/posts/garyvaynerchuk_artificialintelligence-hiring-activity-7387261666289373184-BOIo\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dms.licdn.com/playlist/vid/v2/D4E05AQEiRS8X3qmy3w/thumbnail-with-play-button-overlay-high/B4EZoTTPiyKcDg-/0/1761260417550?e=2147483647\u0026amp;v=beta\u0026amp;t=LG9qTvyFlSMZDW8IaFInudCqgiIrc2EiWOeM1UcV8TE\" alt=\"#artificialintelligence #hiring | Gary Vaynerchuk | 120 comments — I care about humanity first, THEN skills .. and in this AI-scaled world, human sh*t will win 🔑\n\u0026lt;p\u0026gt;#artificialintelligence #hiring | 120 comments on LinkedIn\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: #artificialintelligence #hiring | Gary Vaynerchuk | 120 comments — I care about humanity first, THEN skills .. and in this AI-scaled world, human sh*t will win 🔑\n\u0026lt;p\u0026gt;#artificialintelligence #hiring | 120 comments on LinkedIn\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003e#artificialintelligence #hiring | Gary Vaynerchuk | 120 comments\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eI care about humanity first, THEN skills .. and in this AI-scaled world, human sh*t will win 🔑\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e#artificialintelligence #hiring | 120 comments on LinkedIn\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eLinkedIn · linkedin.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eMore Human stuff that’s what we will be doing.  Less looking at docs, more architecting (which suspiciously looks like writing docs), more decision making, more explaining.  This is a good positive take on AI right now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.linkedin.com/posts/garyvaynerchuk_artificialintelligence-hiring-activity-7387261666289373184-BOIo\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dms.licdn.com/playlist/vid/v2/D4E05AQEiRS8X3qmy3w/thumbnail-with-play-button-overlay-high/B4EZoTTPiyKcDg-/0/1761260417550?e=2147483647\u0026amp;v=beta\u0026amp;t=LG9qTvyFlSMZDW8IaFInudCqgiIrc2EiWOeM1UcV8TE\" alt=\"#artificialintelligence #hiring | Gary Vaynerchuk | 120 comments — I care about humanity first, THEN skills .. and in this AI-scaled world, human sh*t will win 🔑\n\n#artificialintelligence #hiring | 120 comments on LinkedIn\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e#artificialintelligence #hiring | Gary Vaynerchuk | 120 comments\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI care about humanity first, THEN skills .. and in this AI-scaled world, human sh*t will win 🔑\n\n#artificialintelligence #hiring | 120 comments on LinkedIn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLinkedIn \u0026middot; linkedin.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMore Human stuff that's what we will be doing.  Less looking at docs, more architecting (which suspiciously looks like writing docs), more decision making, more explaining.  This is a good positive take on AI right now.  \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.linkedin.com/posts/garyvaynerchuk_artificialintelligence-hiring-activity-7387261666289373184-BOIo",
      "date_published": "2025-10-24T00:39:49Z",
      "date_modified": "2025-10-24T00:39:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastapi/",
      "url": "https://go.waylonwalker.com/fastapi/",
      "title": "fastapi",
      "content_html": "\u003cp\u003eFastAPI is a modern and efficient web framework for Python, built on top of the\nStarlette web framework, and pydantic for data validation and serialization.\u003c/p\u003e\n\u003ch2 id=\"from-the-fastapi-documentationhttpsfastapitiangolocom\"\u003eFrom the \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 documentation\u003c/a\u003e \u003ca href=\"#from-the-fastapi-documentationhttpsfastapitiangolocom\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\u003c/p\u003e\n\u003cp\u003eThe key features are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available.\u003c/li\u003e\n\u003cli\u003eFast to code: Increase the speed to develop features by about 200% to 300%. *\u003c/li\u003e\n\u003cli\u003eFewer bugs: Reduce about 40% of human (developer) induced errors. *\u003c/li\u003e\n\u003cli\u003eIntuitive: Great editor support. Completion everywhere. Less time debugging.\u003c/li\u003e\n\u003cli\u003eEasy: Designed to be easy to use and learn. Less time reading docs.\u003c/li\u003e\n\u003cli\u003eShort: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\u003c/li\u003e\n\u003cli\u003eRobust: Get production-ready code. With automatic interactive documentation.\u003c/li\u003e\n\u003cli\u003eStandards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"mentioned-in-2025-stack-overflow-surveyhttpssurveystackoverflowco2025technology1-web-frameworks-and-technologies\"\u003eMentioned in \u003ca href=\"https://survey.stackoverflow.co/2025/technology/#1-web-frameworks-and-technologies\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/survey.stackoverflow.co.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/survey.stackoverflow.co.ico\" class=\"has-avatar  has-avatar-before\"\u003e2025 Stack Overflow Survey\u003c/a\u003e \u003ca href=\"#mentioned-in-2025-stack-overflow-surveyhttpssurveystackoverflowco2025technology1-web-frameworks-and-technologies\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe +5 point increase for FastAPI is one of the most significant shifts in the\nweb framework space. This signals a strong trend towards using Python for\nbuilding performant APIs and reflects the overall strength of the Python\necosystem.\u003c/p\u003e\n",
      "content_text": "\nFastAPI is a modern and efficient web framework for Python, built on top of the\nStarlette web framework, and pydantic for data validation and serialization.\n\n## From the [FastAPI documentation](https://fastapi.tiangolo.com/)\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available.\n* Fast to code: Increase the speed to develop features by about 200% to 300%. *\n* Fewer bugs: Reduce about 40% of human (developer) induced errors. *\n* Intuitive: Great editor support. Completion everywhere. Less time debugging.\n* Easy: Designed to be easy to use and learn. Less time reading docs.\n* Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* Robust: Get production-ready code. With automatic interactive documentation.\n* Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.\n\n## Mentioned in [2025 Stack Overflow Survey](https://survey.stackoverflow.co/2025/technology/#1-web-frameworks-and-technologies)\n\nThe +5 point increase for FastAPI is one of the most significant shifts in the\nweb framework space. This signals a strong trend towards using Python for\nbuilding performant APIs and reflects the overall strength of the Python\necosystem.\n",
      "summary": "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.",
      "date_published": "2025-10-22T09:26:17Z",
      "date_modified": "2025-10-22T09:26:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/starlette-head-request/",
      "url": "https://go.waylonwalker.com/starlette-head-request/",
      "title": "starlette head request",
      "content_html": "\u003cp\u003e\u003ca href=\"/starlette/\" class=\"glossary-term\" title=\"Starlette is a low level web framework for modern (as of 2025) async python development most famously used by \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.\"\u003eStarlette\u003c/a\u003e has a head request that works right along side your get requests.\nThis morning I fiddled around with custom routes for \u003ccode\u003eGET\u003c/code\u003e and \u003ccode\u003eHEAD\u003c/code\u003e, but had\nto manually set some things about the file, and was still missing \u003ccode\u003ee-tag\u003c/code\u003e in\nthe end.  Turns out as a developer you can \u003ca href=\"/just/\" class=\"wikilink\" data-title=\"just\" data-description=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\" data-date=\"2025-06-23\" data-preview=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\"\u003ejust\u003c/a\u003e add a \u003ccode\u003ehead\u003c/code\u003e route to\nyour \u003ccode\u003eget\u003c/code\u003e routes and starlette will strip the content for you, while\npreserving all of those good headers that fastapi \u003ccode\u003eFileResponse\u003c/code\u003e created\nautomatically for you.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eAPIRouter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.response\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFileResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erouter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eAPIRouter\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/file/\u003c/span\u003e\u003cspan class=\"si\"\u003e{filename}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@router.head\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/file/\u003c/span\u003e\u003cspan class=\"si\"\u003e{filename}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheaders\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"s2\"\u003e\u0026#34;Cache-Control\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;no-cache, no-store, must-revalidate\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efilename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;data/\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexists\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;File not found\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eFileResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere is an example of the response with curl.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ curl -I -L \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:8100/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp?width=250\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHTTP/1.1 \u003cspan class=\"m\"\u003e200\u003c/span\u003e OK\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate: Wed, \u003cspan class=\"m\"\u003e22\u003c/span\u003e Oct \u003cspan class=\"m\"\u003e2025\u003c/span\u003e 14:16:03 GMT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eserver: uvicorn\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecache-control: no-cache, no-store, must-revalidate\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econtent-type: image/webp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econtent-length: \u003cspan class=\"m\"\u003e17206\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elast-modified: Tue, \u003cspan class=\"m\"\u003e23\u003c/span\u003e Sep \u003cspan class=\"m\"\u003e2025\u003c/span\u003e 14:03:20 GMT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eetag: f891660c1543feb1af7564f08abdd511\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ curl -I -L \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:8100/api/file/unknown-file.webp?width=250\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHTTP/1.1 \u003cspan class=\"m\"\u003e404\u003c/span\u003e Not Found\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate: Wed, \u003cspan class=\"m\"\u003e22\u003c/span\u003e Oct \u003cspan class=\"m\"\u003e2025\u003c/span\u003e 14:16:11 GMT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eserver: uvicorn\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econtent-length: \u003cspan class=\"m\"\u003e27\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econtent-type: application/json\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nStarlette has a head request that works right along side your get requests.\nThis morning I fiddled around with custom routes for `GET` and `HEAD`, but had\nto manually set some things about the file, and was still missing `e-tag` in\nthe end.  Turns out as a developer you can \u003ca href=\"/just/\" class=\"wikilink\" data-title=\"just\" data-description=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\" data-date=\"2025-06-23\"\u003ejust\u003c/a\u003e add a `head` route to\nyour `get` routes and starlette will strip the content for you, while\npreserving all of those good headers that fastapi `FileResponse` created\nautomatically for you.\n\n``` python\nfrom fastapi import APIRouter\nfrom fastapi.response import FileResponse\nfrom fastapi import Request\nfrom pathlib import Path\n\nrouter = APIRouter()\n\n@router.get(\"/file/{filename}\")\n@router.head(\"/file/{filename}\")\nasync def get_file(filename: str, request: Request,):\n    headers = {\n      \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\n    }\n    from pathlib import Path\n    filename = Path(f\"data/{filename}\")\n    if not filename.exists():\n        raise HTTPException(status_code=404, detail=\"File not found\")\n    return FileResponse(filename, headers=headers)\n```\n\nHere is an example of the response with curl.\n\n``` bash\n❯ curl -I -L \"http://localhost:8100/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp?width=250\"\nHTTP/1.1 200 OK\ndate: Wed, 22 Oct 2025 14:16:03 GMT\nserver: uvicorn\ncache-control: no-cache, no-store, must-revalidate\ncontent-type: image/webp\ncontent-length: 17206\nlast-modified: Tue, 23 Sep 2025 14:03:20 GMT\netag: f891660c1543feb1af7564f08abdd511\n\n❯ curl -I -L \"http://localhost:8100/api/file/unknown-file.webp?width=250\"\nHTTP/1.1 404 Not Found\ndate: Wed, 22 Oct 2025 14:16:11 GMT\nserver: uvicorn\ncontent-length: 27\ncontent-type: application/json\n```\n",
      "summary": "Starlette has a head request that works right along side your get requests. This morning I fiddled around with custom routes for and , but had to manually...",
      "date_published": "2025-10-22T09:11:31Z",
      "date_modified": "2025-10-22T09:11:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dont-copy-your-gitignore-to-stignore/",
      "url": "https://go.waylonwalker.com/dont-copy-your-gitignore-to-stignore/",
      "title": "Don't copy your gitignore to stignore",
      "content_html": "\u003cp\u003eToday I learned that while \u003ccode\u003e.stignore\u003c/code\u003e and \u003ccode\u003e.gitignore\u003c/code\u003e look very similar they\nare not.  My obsidian directory had been locked up for a few weeks and I had no\nidea why until I logged into the web ui and saw errors.  The errors were some\nconfusing regex validator not matching.  I don’t know what the exact error was,\nbut I went in and only ignored the files I cared about instead of the entire\ngitignore.  Primarily I was getting conflicts in my \u003ccode\u003e.git\u003c/code\u003e directory.\u003c/p\u003e\n",
      "content_text": "\nToday I learned that while `.stignore` and `.gitignore` look very similar they\nare not.  My obsidian directory had been locked up for a few weeks and I had no\nidea why until I logged into the web ui and saw errors.  The errors were some\nconfusing regex validator not matching.  I don't know what the exact error was,\nbut I went in and only ignored the files I cared about instead of the entire\ngitignore.  Primarily I was getting conflicts in my `.git` directory.\n",
      "summary": "Today I learned that while and look very similar they are not. My obsidian directory had been locked up for a few weeks and I had no idea why until I logged...",
      "date_published": "2025-10-21T18:43:00Z",
      "date_modified": "2025-10-21T18:43:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pytauri-pytauri/",
      "url": "https://go.waylonwalker.com/pytauri-pytauri/",
      "title": "⭐ pytauri pytauri",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pytauri\" 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\"\u003epytauri\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pytauri/pytauri\" 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\"\u003epytauri\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eTauri binding for Python through Pyo3\u003c/p\u003e\n",
      "content_text": "\n[pytauri](https://github.com/pytauri) has done a fantastic job with [pytauri](https://github.com/pytauri/pytauri). Highly recommend taking a look.\n\nTauri binding for Python through Pyo3\n",
      "summary": "pytauri has done a fantastic job with pytauri. Highly recommend taking a look.",
      "date_published": "2025-10-16T12:19:42Z",
      "date_modified": "2025-10-16T12:19:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fullcontrolxyz-fullcontrol/",
      "url": "https://go.waylonwalker.com/fullcontrolxyz-fullcontrol/",
      "title": "⭐ FullControlXYZ fullcontrol",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/FullControlXYZ/fullcontrol\" 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\"\u003efullcontrol\u003c/a\u003e by \u003ca href=\"https://github.com/FullControlXYZ\" 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\"\u003eFullControlXYZ\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePython version of FullControl for toolpath design (and more) - the readme below is best source of information\u003c/p\u003e\n",
      "content_text": "\nThe work on [fullcontrol](https://github.com/FullControlXYZ/fullcontrol) by [FullControlXYZ](https://github.com/FullControlXYZ).\n\nPython version of FullControl for toolpath design (and more) - the readme below is best source of information\n",
      "summary": "The work on fullcontrol by FullControlXYZ.",
      "date_published": "2025-10-15T00:04:22Z",
      "date_modified": "2025-10-15T00:04:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zauberzeug-nicegui/",
      "url": "https://go.waylonwalker.com/zauberzeug-nicegui/",
      "title": "⭐ zauberzeug nicegui",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/zauberzeug/nicegui\" 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\"\u003enicegui\u003c/a\u003e from \u003ca href=\"https://github.com/zauberzeug\" 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\"\u003ezauberzeug\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCreate web-based user interfaces with Python. The nice way.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [nicegui](https://github.com/zauberzeug/nicegui) from [zauberzeug](https://github.com/zauberzeug).\n\nCreate web-based user interfaces with Python. The nice way.\n",
      "summary": "I'm impressed by nicegui from zauberzeug.",
      "date_published": "2025-10-12T23:12:28Z",
      "date_modified": "2025-10-12T23:12:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-851/",
      "url": "https://go.waylonwalker.com/thought-851/",
      "title": "💭 This Web Server Is 100% Solar Powered - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Gz56Cm-B6kg\" title=\"This Web Server Is 100% Solar Powered\" playlabel=\"Play: This Web Server Is 100% Solar Powered\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is super cool, thanks to Brodie for reading me this content as I do household chores.  \u003ca href=\"https://solar.lowtechmagazine.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/solar.lowtechmagazine.com.svg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/solar.lowtechmagazine.com.svg\" class=\"has-avatar  has-avatar-before\"\u003elowtech magazine\u003c/a\u003e is a website ran completely on solar power with only enough battery backup to cover most days.  Adding enough to cover all days would increase its carbon footprint and negate the carbon offset of the solar panels it runs on.\u003c/p\u003e\n\u003cp\u003eIt’s fascinating to see a web server running completely off grid in a close power system.  These interesting websites are fascinating keep em coming Brodie.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Gz56Cm-B6kg\" title=\"This Web Server Is 100% Solar Powered\" playlabel=\"Play: This Web Server Is 100% Solar Powered\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is super cool, thanks to Brodie for reading me this content as I do household chores.  [lowtech magazine](https://solar.lowtechmagazine.com/) is a website ran completely on solar power with only enough battery backup to cover most days.  Adding enough to cover all days would increase its carbon footprint and negate the carbon offset of the solar panels it runs on.  \n\nIt's fascinating to see a web server running completely off grid in a close power system.  These interesting websites are fascinating keep em coming Brodie.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=Gz56Cm-B6kg",
      "date_published": "2025-10-11T22:21:38Z",
      "date_modified": "2025-10-11T22:21:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-850/",
      "url": "https://go.waylonwalker.com/thought-850/",
      "title": "💭 2025 The Year Of The Linux Desktop - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"GQJZ96l-XQ4\" title=\"Apple Introduces The Year Of The Linux Desktop!\" playlabel=\"Play: Apple Introduces The Year Of The Linux Desktop!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe Year of the Linux Desktop is a meme, every year is the year of the Linux desktop as it gains rounding errors of market share.  Outside of Linux nerds, developers that use servers on the regular, cheap asses reviving old hardware that is dead in the eyes of other OS’s, the average user wont even notice a difference with the right distro.  I ran bazzite with plasma for over a year, It would be super beginner friendly while allowing users customization on levels never seen on non-Linux machines.  Other than adobe, roblox, and EA games with easy anti-cheat most users probably aren’t going to run in to any issues.  They probably wont even notice at this point, which is where the meme comes in.  Why would anyone switch if its not noticeably different for the average user, they wont, until what is working for them stops working for them.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"GQJZ96l-XQ4\" title=\"Apple Introduces The Year Of The Linux Desktop!\" playlabel=\"Play: Apple Introduces The Year Of The Linux Desktop!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThe Year of the Linux Desktop is a meme, every year is the year of the Linux desktop as it gains rounding errors of market share.  Outside of Linux nerds, developers that use servers on the regular, cheap asses reviving old hardware that is dead in the eyes of other OS's, the average user wont even notice a difference with the right distro.  I ran bazzite with plasma for over a year, It would be super beginner friendly while allowing users customization on levels never seen on non-Linux machines.  Other than adobe, roblox, and EA games with easy anti-cheat most users probably aren't going to run in to any issues.  They probably wont even notice at this point, which is where the meme comes in.  Why would anyone switch if its not noticeably different for the average user, they wont, until what is working for them stops working for them.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=GQJZ96l-XQ4",
      "date_published": "2025-10-10T13:14:37Z",
      "date_modified": "2025-10-10T13:14:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mordoria-unnamed_game_1_v2/",
      "url": "https://go.waylonwalker.com/mordoria-unnamed_game_1_v2/",
      "title": "⭐ Mordoria unnamed_game_1_v2",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/Mordoria/unnamed_game_1_v2\" 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\"\u003eunnamed_game_1_v2\u003c/a\u003e by \u003ca href=\"https://github.com/Mordoria\" 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\"\u003eMordoria\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe Release of Mordoria\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [unnamed_game_1_v2](https://github.com/Mordoria/unnamed_game_1_v2) by [Mordoria](https://github.com/Mordoria).\n\nThe Release of Mordoria\n",
      "summary": "Looking for inspiration? unnamed_1_v2 by Mordoria.",
      "date_published": "2025-10-09T12:57:37Z",
      "date_modified": "2025-10-09T12:57:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-849/",
      "url": "https://go.waylonwalker.com/thought-849/",
      "title": "💭 Litewind",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://litewindcss.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/litewindcss.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/litewindcss.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLitewind\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLitewind is Tailwind without the build step\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elitewindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a sick no-build version of tailwind.  I have a couple of projects that the build step of tailwind is cumbersome on, mostly because they are for non-js devs.  Some are for backend python devs, some are for folks that mostly want markdown with some styles.  This is a perfect no-build tailwind alternative.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://litewindcss.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLitewind\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLitewind is Tailwind without the build step\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elitewindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a sick no-build version of tailwind.  I have a couple of projects that the build step of tailwind is cumbersome on, mostly because they are for non-js devs.  Some are for backend python devs, some are for folks that mostly want markdown with some styles.  This is a perfect no-build tailwind alternative.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://litewindcss.com/",
      "date_published": "2025-10-05T01:12:20Z",
      "date_modified": "2025-10-05T01:12:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-848/",
      "url": "https://go.waylonwalker.com/thought-848/",
      "title": "💭 python 3.14 highlights! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"-Z-BDux-TRk\" title=\"python 3.14 highlights!\" playlabel=\"Play: python 3.14 highlights!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eanthony has some of the best python highlight videos each year.  This might be a good sign, but each year there seems to be less and less that I am chomping at the bit to get to.  I thought the remote debugger looked every interesting, his use case for \u003ccode\u003ebabi\u003c/code\u003e seemed very interesting.  I wonder what textual would look like built in a 3.14 world, would it still have built its own debugger/console?\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv tool run --python\u003cspan class=\"o\"\u003e=\u003c/span\u003e3.14 babi\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWithout a process flag you need sudo permissions to attach a pdb debugger similar to gdb.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eps -ef \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep babi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv tool run --python\u003cspan class=\"o\"\u003e=\u003c/span\u003e3.14 python -m pdb -p8605\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/b5e1a34d-c198-440a-ab30-4498bfa6962a.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/b5e1a34d-c198-440a-ab30-4498bfa6962a.png\" alt=\"screenshot-2025-10-03T01-11-02-918Z.png\"/ data-glightbox=\"description: screenshot-2025-10-03T01-11-02-918Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"-Z-BDux-TRk\" title=\"python 3.14 highlights!\" playlabel=\"Play: python 3.14 highlights!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nanthony has some of the best python highlight videos each year.  This might be a good sign, but each year there seems to be less and less that I am chomping at the bit to get to.  I thought the remote debugger looked every interesting, his use case for `babi` seemed very interesting.  I wonder what textual would look like built in a 3.14 world, would it still have built its own debugger/console?\n\n``` bash\nuv tool run --python=3.14 babi\n```\n\nWithout a process flag you need sudo permissions to attach a pdb debugger similar to gdb.\n\n``` bash\nps -ef | grep babi\nuv tool run --python=3.14 python -m pdb -p8605\n```\n\n![screenshot-2025-10-03T01-11-02-918Z.png](https://dropper.wayl.one/api/file/b5e1a34d-c198-440a-ab30-4498bfa6962a.png)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=-Z-BDux-TRk",
      "date_published": "2025-10-03T01:04:57Z",
      "date_modified": "2025-10-03T01:04:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-847/",
      "url": "https://go.waylonwalker.com/thought-847/",
      "title": "💭 This $15 Fingerboard Mold from Amazon SHOCKED me!! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"GAudJhMrqwo\" title=\"I bought a $15 Fingerboard Mold from Amazon! Is it Worth it?\" playlabel=\"Play: I bought a $15 Fingerboard Mold from Amazon! Is it Worth it?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty sick result, good fingerboards are stupid expensive.  This looks like a fun way to make some good ones on the cheap.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"GAudJhMrqwo\" title=\"I bought a $15 Fingerboard Mold from Amazon! Is it Worth it?\" playlabel=\"Play: I bought a $15 Fingerboard Mold from Amazon! Is it Worth it?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a pretty sick result, good fingerboards are stupid expensive.  This looks like a fun way to make some good ones on the cheap.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=GAudJhMrqwo",
      "date_published": "2025-10-03T00:59:29Z",
      "date_modified": "2025-10-03T00:59:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fingerboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-846/",
      "url": "https://go.waylonwalker.com/thought-846/",
      "title": "💭 PEP 735 – Dependency Groups in pyproject.toml | peps.python.org",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://peps.python.org/pep-0735/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://peps.python.org/_static/og-image.png\" alt=\"PEP 735 – Dependency Groups in pyproject.toml | peps.python.org — This PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.\" loading=\"lazy\"/ data-glightbox=\"description: PEP 735 – Dependency Groups in pyproject.toml | peps.python.org — This PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePEP 735 – Dependency Groups in pyproject.toml | peps.python.org\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePython Enhancement Proposals (PEPs) · peps.python.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ePEP 735 describes dependency groups as sets of optional dependencies that are not shipped with the package but intended for development purposes.\u003c/p\u003e\n\u003cp\u003eThe PEP includes an example for groups that include test, docs, typing, and a combo typing-test.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003edependency-groups\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etest\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pytest\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;coverage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edocs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;sphinx\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sphinx-rtd-theme\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etyping\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;mypy\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;types-requests\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etyping-test\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[{\u003c/span\u003e\u003cspan class=\"nx\"\u003einclude-group\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;typing\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nx\"\u003einclude-group\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;test\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;useful-types\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis is implemented in uv and can be used by several of their commands.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv sync --group \u003cspan class=\"nb\"\u003etest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv run --group \u003cspan class=\"nb\"\u003etest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv add --group \u003cspan class=\"nb\"\u003etest\u003c/span\u003e pytest\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv remove --group \u003cspan class=\"nb\"\u003etest\u003c/span\u003e pytest\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv \u003cspan class=\"nb\"\u003eexport\u003c/span\u003e --group \u003cspan class=\"nb\"\u003etest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv tree --group \u003cspan class=\"nb\"\u003etest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"dependency-groups-are-not-extras\"\u003eDependency Groups are not Extras \u003ca href=\"#dependency-groups-are-not-extras\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe docs describe extras as being intended to ship with the application and dependency groups intended for development.  The spec allows both to exist with the same name, but care should be taken as tools may have different implementations.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTools MAY choose to provide the same interfaces for installing Dependency Groups as they do for installing extras.\u003c/p\u003e\n\u003cp\u003eNote that this specification does not forbid having an extra whose name matches a Dependency Group.\u003c/p\u003e\n\u003cp\u003eUsers are advised to avoid creating Dependency Groups whose names match extras. Tools MAY treat such matching as an error.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://peps.python.org/pep-0735/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://peps.python.org/_static/og-image.png\" alt=\"PEP 735 – Dependency Groups in pyproject.toml | peps.python.org — This PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePEP 735 – Dependency Groups in pyproject.toml | peps.python.org\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePython Enhancement Proposals (PEPs) \u0026middot; peps.python.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nPEP 735 describes dependency groups as sets of optional dependencies that are not shipped with the package but intended for development purposes.\n\nThe PEP includes an example for groups that include test, docs, typing, and a combo typing-test.\n\n``` toml\n[dependency-groups]\ntest = [\"pytest\", \"coverage\"]\ndocs = [\"sphinx\", \"sphinx-rtd-theme\"]\ntyping = [\"mypy\", \"types-requests\"]\ntyping-test = [{include-group = \"typing\"}, {include-group = \"test\"}, \"useful-types\"]\n```\n\nThis is implemented in uv and can be used by several of their commands.\n\n``` bash\nuv sync --group test\nuv run --group test\nuv add --group test pytest\nuv remove --group test pytest\nuv export --group test\nuv tree --group test\n```\n\n## Dependency Groups are not Extras\n\nThe docs describe extras as being intended to ship with the application and dependency groups intended for development.  The spec allows both to exist with the same name, but care should be taken as tools may have different implementations.\n\n\u003e  Tools MAY choose to provide the same interfaces for installing Dependency Groups as they do for installing extras.\n\u003e\n\u003e Note that this specification does not forbid having an extra whose name matches a Dependency Group.\n\u003e\n\u003e Users are advised to avoid creating Dependency Groups whose names match extras. Tools MAY treat such matching as an error.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://peps.python.org/pep-0735/",
      "date_published": "2025-10-01T16:25:57Z",
      "date_modified": "2025-10-01T16:25:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-845/",
      "url": "https://go.waylonwalker.com/thought-845/",
      "title": "💭 Running Software on Software You’ve Never Run",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/run-software-on-software-youve-never-run/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRunning Software on Software You’ve Never Run\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eRunning software applications in production today is crazy.  One point release opens up for supply chain attacks.  What’s crazier is not running your production applications without a lock file, potentially running dependencies you’ve never ran before for the first time in prod.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/run-software-on-software-youve-never-run/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRunning Software on Software You’ve Never Run\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nRunning software applications in production today is crazy.  One point release opens up for supply chain attacks.  What's crazier is not running your production applications without a lock file, potentially running dependencies you've never ran before for the first time in prod.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2025/run-software-on-software-youve-never-run/",
      "date_published": "2025-09-29T18:54:45Z",
      "date_modified": "2025-09-29T18:54:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-844/",
      "url": "https://go.waylonwalker.com/thought-844/",
      "title": "💭 Using Litestream to Restore My Database for Easy Development",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/#Update\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250807213014_2a14556e.png\" alt=\"Using Litestream to Restore My Database for Easy Development | Nic Payne — Litestream see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]] I have the entrypoint to my app contai\" loading=\"lazy\"/ data-glightbox=\"description: Using Litestream to Restore My Database for Easy Development | Nic Payne — Litestream see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]] I have the entrypoint to my app contai\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing Litestream to Restore My Database for Easy Development | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLitestream see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]] I have the entrypoint to my app contai\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI really like how well the local dev is setup to run off of production data here.  I’ll use this as a reminder that I need to set up lite stream on a few of my projects that it’s missing from and include a nice sync prod data \u003ca href=\"/tags/justfile/\" class=\"wikilink\" data-title=\"Posts tagged: justfile\" data-description=\"All posts with the tag \u0026#34;justfile\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;justfile\u0026#34;\"\u003ePosts tagged: justfile\u003c/a\u003e recipe.\u003c/p\u003e\n\u003cp\u003eLitestreams interface always throws me for a loop.  It works fantastic,  but the global config stored in /etc and some of the commands break my brain.  It’s not you it’s me.\u003c/p\u003e\n\u003cp\u003eUsing real data when you can is goated.  Fake data is so often a perfect example of what someone thinks the backend should look like and does not include things that users actually do, running pipelines for days, or setting titles to paragraphs worth of text.  Obviously this is not possible everywhere and the more sensitive your data the harder that process becomes.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/#Update\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250807213014_2a14556e.png\" alt=\"Using Litestream to Restore My Database for Easy Development | Nic Payne — Litestream see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]] I have the entrypoint to my app contai\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing Litestream to Restore My Database for Easy Development | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLitestream see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]] I have the entrypoint to my app contai\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI really like how well the local dev is setup to run off of production data here.  I'll use this as a reminder that I need to set up lite stream on a few of my projects that it's missing from and include a nice sync prod data \u003ca href=\"/tags/justfile/\" class=\"wikilink\" data-title=\"Posts tagged: justfile\" data-description=\"All posts with the tag \u0026#34;justfile\u0026#34;\"\u003ePosts tagged: justfile\u003c/a\u003e recipe.\n\nLitestreams interface always throws me for a loop.  It works fantastic,  but the global config stored in /etc and some of the commands break my brain.  It's not you it's me.\n\nUsing real data when you can is goated.  Fake data is so often a perfect example of what someone thinks the backend should look like and does not include things that users actually do, running pipelines for days, or setting titles to paragraphs worth of text.  Obviously this is not possible everywhere and the more sensitive your data the harder that process becomes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/#Update",
      "date_published": "2025-09-29T18:49:12Z",
      "date_modified": "2025-09-29T18:49:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-843/",
      "url": "https://go.waylonwalker.com/thought-843/",
      "title": "💭 TIL: Loading .env files with uv run",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.feldroy.com/posts/til-2025-09-env-files-with-uv-run\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://f004.backblazeb2.com/file/daniel-feldroy-com/public/logos/til-1.png\" alt=\"TIL: Loading .env files with uv run — Replacing python-dotenv with uv\" loading=\"lazy\"/ data-glightbox=\"description: TIL: Loading .env files with uv run — Replacing python-dotenv with uv\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTIL: Loading .env files with uv run\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReplacing python-dotenv with uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehttps://daniel.feldroy.com · daniel.feldroy.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI smell a dependency to \u003ccode\u003epython-dotenv\u003c/code\u003e dying in my workflow.  I originally read the title of the post and thought, “I know how to manage .env and almost skipped it”.  I’m leaning more and more on \u003ccode\u003euv run\u003c/code\u003e these days, so this should \u003ca href=\"/just/\" class=\"wikilink\" data-title=\"just\" data-description=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\" data-date=\"2025-06-23\" data-preview=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\"\u003ejust\u003c/a\u003e go in my [[ just file ]] to make it easy to run.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.feldroy.com/posts/til-2025-09-env-files-with-uv-run\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://f004.backblazeb2.com/file/daniel-feldroy-com/public/logos/til-1.png\" alt=\"TIL: Loading .env files with uv run — Replacing python-dotenv with uv\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTIL: Loading .env files with uv run\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReplacing python-dotenv with uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehttps://daniel.feldroy.com \u0026middot; daniel.feldroy.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI smell a dependency to `python-dotenv` dying in my workflow.  I originally read the title of the post and thought, \"I know how to manage .env and almost skipped it\".  I'm leaning more and more on `uv run` these days, so this should \u003ca href=\"/just/\" class=\"wikilink\" data-title=\"just\" data-description=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\" data-date=\"2025-06-23\"\u003ejust\u003c/a\u003e go in my [[ just file ]] to make it easy to run.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daniel.feldroy.com/posts/til-2025-09-env-files-with-uv-run",
      "date_published": "2025-09-29T18:42:01Z",
      "date_modified": "2025-09-29T18:42:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/folke-sidekick-nvim/",
      "url": "https://go.waylonwalker.com/folke-sidekick-nvim/",
      "title": "⭐ folke sidekick.nvim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/folke/sidekick.nvim\" 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\"\u003esidekick.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/folke\" 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\"\u003efolke\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eYour Neovim AI sidekick\u003c/p\u003e\n",
      "content_text": "\nCheck out [sidekick.nvim](https://github.com/folke/sidekick.nvim) by [folke](https://github.com/folke). It's a well-crafted project with great potential.\n\nYour Neovim AI sidekick\n",
      "summary": "Check out sidekick.nvim by folke. It's a well-crafted project with great potential.",
      "date_published": "2025-09-29T16:14:21Z",
      "date_modified": "2025-09-29T16:14:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jfernandez-mdserve/",
      "url": "https://go.waylonwalker.com/jfernandez-mdserve/",
      "title": "⭐ jfernandez mdserve",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/jfernandez/mdserve\" 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\"\u003emdserve\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/jfernandez\" 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\"\u003ejfernandez\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eFast markdown preview server with live reload and theme support.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [mdserve](https://github.com/jfernandez/mdserve), an amazing project by [jfernandez](https://github.com/jfernandez). It's worth exploring!\n\nFast markdown preview server with live reload and theme support.\n",
      "summary": "I'm really excited about mdserve, an amazing project by jfernandez. It's worth exploring!",
      "date_published": "2025-09-28T13:34:12Z",
      "date_modified": "2025-09-28T13:34:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-842/",
      "url": "https://go.waylonwalker.com/thought-842/",
      "title": "💭 A quote from Dan Abramov",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Sep/27/dan-abramov/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Dan Abramov\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eConceptually, Mastodon is a bunch of copies of the same webapp emailing each other. There is no realtime global aggregation across the network so it can only offer a fragmented …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting catch from the HN discussion over his \u003ca href=\"https://overreacted.io/open-social/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/overreacted.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/overreacted.io.png\" class=\"has-avatar  has-avatar-before\"\u003earticle\u003c/a\u003e that came out yestereday.  I scanned it yesterday and it has some really fascinating diagrams showing different phases of the web being open, to being siloed, to somewhere that we are trying to make it easy to publish, and retain ownership.  I don’t know enough about bluesky, but the core is build on the AT protocol, you can \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 host\u003c/a\u003e your own instance, you can build different front ends for it.  So rather than having siloed instagram, FB, twitter, there are clones of those platforms that read the same data from everyones data, that they have the option of self hosting.\u003c/p\u003e\n\u003cp\u003eI like this distinction between Mastadon here.  Mastadon can also be self host, but its data aggregation is decentralized, so each instance is fragmented and cannot have a complete view of the data.  The way that the ATproto does its aggregation is quite fascinating and feels right for an open social platform.  I’m probably missing something, but if you are posting to one of these platfoms publically, why not have the data available to all of them, if you don’t want it shared it probably belongs somewhere more private anyways and there are platforms for that.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Sep/27/dan-abramov/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Dan Abramov\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eConceptually, Mastodon is a bunch of copies of the same webapp emailing each other. There is no realtime global aggregation across the network so it can only offer a fragmented …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting catch from the HN discussion over his [article](https://overreacted.io/open-social/) that came out yestereday.  I scanned it yesterday and it has some really fascinating diagrams showing different phases of the web being open, to being siloed, to somewhere that we are trying to make it easy to publish, and retain ownership.  I don't know enough about bluesky, but the core is build on the AT protocol, you can self host your own instance, you can build different front ends for it.  So rather than having siloed instagram, FB, twitter, there are clones of those platforms that read the same data from everyones data, that they have the option of self hosting.  \n\nI like this distinction between Mastadon here.  Mastadon can also be self host, but its data aggregation is decentralized, so each instance is fragmented and cannot have a complete view of the data.  The way that the ATproto does its aggregation is quite fascinating and feels right for an open social platform.  I'm probably missing something, but if you are posting to one of these platfoms publically, why not have the data available to all of them, if you don't want it shared it probably belongs somewhere more private anyways and there are platforms for that.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Sep/27/dan-abramov/#atom-everything",
      "date_published": "2025-09-27T16:11:23Z",
      "date_modified": "2025-09-27T16:11:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "social",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-841/",
      "url": "https://go.waylonwalker.com/thought-841/",
      "title": "💭 This printed design holds a steel tube where the tube goes. #o...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"PWyZB1nha_o\" title=\"This printed design holds a steel tube where the tube goes. #opensourcehardware #conduit\" playlabel=\"Play: This printed design holds a steel tube where the tube goes. #opensourcehardware #conduit\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a super cool movement, I like the idea of giving access to composable components like we have in open source.  You want to build a website you have a bunch of options from raw dogging assembly all the way up to predefined templates that just need your content.  Idk if the analogy is perfect but there are aspects of it that work.  I see where right now we are somewhere in raw dogging c or python.   We have cheap nuts and bolts and some low level things, but once someone needs some coupler like this it’s dropping down to drawing it by hand.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"PWyZB1nha_o\" title=\"This printed design holds a steel tube where the tube goes. #opensourcehardware #conduit\" playlabel=\"Play: This printed design holds a steel tube where the tube goes. #opensourcehardware #conduit\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a super cool movement, I like the idea of giving access to composable components like we have in open source.  You want to build a website you have a bunch of options from raw dogging assembly all the way up to predefined templates that just need your content.  Idk if the analogy is perfect but there are aspects of it that work.  I see where right now we are somewhere in raw dogging c or python.   We have cheap nuts and bolts and some low level things, but once someone needs some coupler like this it's dropping down to drawing it by hand.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/PWyZB1nha_o",
      "date_published": "2025-09-27T02:16:06Z",
      "date_modified": "2025-09-27T02:16:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-840/",
      "url": "https://go.waylonwalker.com/thought-840/",
      "title": "💭 Print over Part - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ED2olTp8wGw\" title=\"No More Glue\" playlabel=\"Play: No More Glue\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWow, I’ve never seen or thought of multi setup parts this is very thought provoking, not sure how useful it is as we have good adhesives and stuff for printed parts.  I definitely want to try this though\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ED2olTp8wGw\" title=\"No More Glue\" playlabel=\"Play: No More Glue\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWow, I've never seen or thought of multi setup parts this is very thought provoking, not sure how useful it is as we have good adhesives and stuff for printed parts.  I definitely want to try this though \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtube.com/shorts/ED2olTp8wGw?si=UU_E2dlREhavlzJc",
      "date_published": "2025-09-26T14:15:24Z",
      "date_modified": "2025-09-26T14:15:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-839/",
      "url": "https://go.waylonwalker.com/thought-839/",
      "title": "💭 Haiden Deegan IN for Motocross of Nations?! | The Blair Matthe...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"kZvk4dUyWVs\" title=\"Haiden Deegan IN for Motocross of Nations?! | The Blair Matthes Project 032\" playlabel=\"Play: Haiden Deegan IN for Motocross of Nations?! | The Blair Matthes Project 032\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI can’t believe this thing is so devicive.  I kinda can’t belive that I sit on the same side as Mathes and his always against the grain, non corporate influenced response.  So many others have praised Haiden for bringing back the real gladiator bloodsport that SX is, is it that though??  It’s a race to the finish.  different than a lot of other racing its very unpredictable takeout moves happen, occasionally as an accident, often taking both riders down at the same time.\u003c/p\u003e\n\u003cp\u003eAlso different than MANY sports we have a huge industry of weekend warriors, Some of which make it into the night show of the biggest race on TV.  You see we only bring 20 riders from each class, the top half to top quarter are “Factory” riders, the rest are privateers, sometimes these privateers are completely their on their own.\u003c/p\u003e\n\u003cp\u003eThere is also something called a last chance qualifier.  This is your last chance to get into the night show, often fought by these privateers out of box vans with their brother as a mechanic.  Often that last spot is filled by sketchy on edge riding and takeout moves from a rider that looks like he is barely making it, but would run circles around anyone at your local race.\u003c/p\u003e\n\u003cp\u003eWe celebrate these as a fight to the finish, anything goes, you just gotta cross the finishline.\u003c/p\u003e\n\u003cp\u003eWhat’s different here from last weekend (someone could really write a book on the build up of tension, shit talking, lack of harsh penalties in the rules) is really that Haiden had zero shot at the championship.  He was winning the race, Joe in Second with a secure championship.  This is when Haiden started riding behind him, slowing down for Joe to catch up, and taking shots at Joe until he broke his own collarbone.  He went out knowing he needed to knock Joe down enough to cover the points deficit and the penalty.  This was not a pass for the win, or a pass for the last spot in the night show, this was a pass to clear a deficit which required Joe on the ground.\u003c/p\u003e\n\u003cp\u003eThis seems to be celebrated by half the industry, but dude you had already lost going into this night this aint cool, you lost this one put on a face let Joe have his moment, make your statement by going one one and crushing these dudes by 30 seconds metaphorically, not literally crushing them.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"kZvk4dUyWVs\" title=\"Haiden Deegan IN for Motocross of Nations?! | The Blair Matthes Project 032\" playlabel=\"Play: Haiden Deegan IN for Motocross of Nations?! | The Blair Matthes Project 032\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI can't believe this thing is so devicive.  I kinda can't belive that I sit on the same side as Mathes and his always against the grain, non corporate influenced response.  So many others have praised Haiden for bringing back the real gladiator bloodsport that SX is, is it that though??  It's a race to the finish.  different than a lot of other racing its very unpredictable takeout moves happen, occasionally as an accident, often taking both riders down at the same time.  \n\nAlso different than MANY sports we have a huge industry of weekend warriors, Some of which make it into the night show of the biggest race on TV.  You see we only bring 20 riders from each class, the top half to top quarter are \"Factory\" riders, the rest are privateers, sometimes these privateers are completely their on their own.  \n\nThere is also something called a last chance qualifier.  This is your last chance to get into the night show, often fought by these privateers out of box vans with their brother as a mechanic.  Often that last spot is filled by sketchy on edge riding and takeout moves from a rider that looks like he is barely making it, but would run circles around anyone at your local race.\n\nWe celebrate these as a fight to the finish, anything goes, you just gotta cross the finishline.\n\nWhat's different here from last weekend (someone could really write a book on the build up of tension, shit talking, lack of harsh penalties in the rules) is really that Haiden had zero shot at the championship.  He was winning the race, Joe in Second with a secure championship.  This is when Haiden started riding behind him, slowing down for Joe to catch up, and taking shots at Joe until he broke his own collarbone.  He went out knowing he needed to knock Joe down enough to cover the points deficit and the penalty.  This was not a pass for the win, or a pass for the last spot in the night show, this was a pass to clear a deficit which required Joe on the ground.\n\nThis seems to be celebrated by half the industry, but dude you had already lost going into this night this aint cool, you lost this one put on a face let Joe have his moment, make your statement by going one one and crushing these dudes by 30 seconds metaphorically, not literally crushing them.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=kZvk4dUyWVs",
      "date_published": "2025-09-26T12:36:26Z",
      "date_modified": "2025-09-26T12:36:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "moto",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/doganarif-fastapi-radar/",
      "url": "https://go.waylonwalker.com/doganarif-fastapi-radar/",
      "title": "⭐ doganarif fastapi-radar",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/doganarif/fastapi-radar\" 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\"\u003efastapi-radar\u003c/a\u003e from \u003ca href=\"https://github.com/doganarif\" 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\"\u003edoganarif\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA powerful debugging dashboard for \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 applications. Monitor HTTP requests, SQL queries, and exceptions in real-time with a beautiful React UI. One-line integration, zero configuration needed.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [fastapi-radar](https://github.com/doganarif/fastapi-radar) from [doganarif](https://github.com/doganarif).\n\nA powerful debugging dashboard for FastAPI applications. Monitor HTTP requests, SQL queries, and exceptions in real-time with a beautiful React UI. One-line integration, zero configuration needed.\n",
      "summary": "I'm impressed by fastapi-radar from doganarif.",
      "date_published": "2025-09-25T19:10:17Z",
      "date_modified": "2025-09-25T19:10:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-838/",
      "url": "https://go.waylonwalker.com/thought-838/",
      "title": "💭 Chris Joslin 360 Flips El Toro!!!!! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"5cRKSwWSd5U\" title=\"Chris Joslin 360 Flips El Toro!!!!!\" playlabel=\"Play: Chris Joslin 360 Flips El Toro!!!!!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eEpic that this Joslin came back 7 years later to complete this.  I thought el Toro was dead, aparantly not.  Dude got robbed by a broke ass truck, this must have been eating his soul for the last 7 years.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"5cRKSwWSd5U\" title=\"Chris Joslin 360 Flips El Toro!!!!!\" playlabel=\"Play: Chris Joslin 360 Flips El Toro!!!!!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nEpic that this Joslin came back 7 years later to complete this.  I thought el Toro was dead, aparantly not.  Dude got robbed by a broke ass truck, this must have been eating his soul for the last 7 years.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=5cRKSwWSd5U\u0026t=631s",
      "date_published": "2025-09-20T15:58:45Z",
      "date_modified": "2025-09-20T15:58:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "skate",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-837/",
      "url": "https://go.waylonwalker.com/thought-837/",
      "title": "💭 Big W: A Family Tradition",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.bigwengineering.com/post/big-w-a-family-tradition?utm_source=linkedin\u0026amp;utm_medium=blog.post-promoter\u0026amp;utm_campaign=b9f7c31c-6725-4253-bb37-b10502942676\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.wixstatic.com/media/e46759_badd51748b734eb19edcf39a0a9830ad~mv2.jpg/v1/fill/w_1000,h_753,al_c,q_85,usm_0.66_1.00_0.01/e46759_badd51748b734eb19edcf39a0a9830ad~mv2.jpg\" alt=\"Big W:  A Family Tradition — A quick look into where we came from and what inspires us to do what it takes to build a solid reputation.\" loading=\"lazy\"/ data-glightbox=\"description: Big W:  A Family Tradition — A quick look into where we came from and what inspires us to do what it takes to build a solid reputation.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBig W:  A Family Tradition\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA quick look into where we came from and what inspires us to do what it takes to build a solid reputation.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBig W Engineering Solutions · bigwengineering.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI first met Adam in college, he seemed like quite a character on the outside, but was always quite smart and often leaned towards realistic solutions to problems rather than over complicating things.  He was part of the SAE Formula car, well known for taking a simple problem and trying to turn it into a real formula one carbon fiber solution.  I remember a period where he was a fan of old world blacksmithing as they would say at the time.  He even got a few very simple and light parts on the car that were easy to make unlike the carbon fiber alternatives.  By the time I was there he was more of a leader and did not do a lot of design on any whole system, but would take out class projects for a component or help with some hard problems.  This company feels like it is a great extension of who he was a that time, with about 15 years of professional experience tacked on.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.bigwengineering.com/post/big-w-a-family-tradition?utm_source=linkedin\u0026amp;utm_medium=blog.post-promoter\u0026amp;utm_campaign=b9f7c31c-6725-4253-bb37-b10502942676\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.wixstatic.com/media/e46759_badd51748b734eb19edcf39a0a9830ad~mv2.jpg/v1/fill/w_1000,h_753,al_c,q_85,usm_0.66_1.00_0.01/e46759_badd51748b734eb19edcf39a0a9830ad~mv2.jpg\" alt=\"Big W:  A Family Tradition — A quick look into where we came from and what inspires us to do what it takes to build a solid reputation.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBig W:  A Family Tradition\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA quick look into where we came from and what inspires us to do what it takes to build a solid reputation.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBig W Engineering Solutions \u0026middot; bigwengineering.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI first met Adam in college, he seemed like quite a character on the outside, but was always quite smart and often leaned towards realistic solutions to problems rather than over complicating things.  He was part of the SAE Formula car, well known for taking a simple problem and trying to turn it into a real formula one carbon fiber solution.  I remember a period where he was a fan of old world blacksmithing as they would say at the time.  He even got a few very simple and light parts on the car that were easy to make unlike the carbon fiber alternatives.  By the time I was there he was more of a leader and did not do a lot of design on any whole system, but would take out class projects for a component or help with some hard problems.  This company feels like it is a great extension of who he was a that time, with about 15 years of professional experience tacked on.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.bigwengineering.com/post/big-w-a-family-tradition?utm_medium=blog.post-promoter\u0026utm_campaign=b9f7c31c-6725-4253-bb37-b10502942676",
      "date_published": "2025-09-19T14:03:04Z",
      "date_modified": "2025-09-19T14:03:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/unhappychoice-gittype/",
      "url": "https://go.waylonwalker.com/unhappychoice-gittype/",
      "title": "⭐ unhappychoice gittype",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/unhappychoice/gittype\" 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\"\u003egittype\u003c/a\u003e, created by \u003ca href=\"https://github.com/unhappychoice\" 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\"\u003eunhappychoice\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA CLI code-typing game that turns your source code into typing challenges\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [gittype](https://github.com/unhappychoice/gittype), created by [unhappychoice](https://github.com/unhappychoice).\n\nA CLI code-typing game that turns your source code into typing challenges\n",
      "summary": "If you're into interesting projects, don't miss out on gittype, created by unhappychoice.",
      "date_published": "2025-09-18T23:32:00Z",
      "date_modified": "2025-09-18T23:32:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-836/",
      "url": "https://go.waylonwalker.com/thought-836/",
      "title": "💭 Meet Gor on X: \"SQLite added generated columns in 3.31 (around...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/MeetGor21/status/1967818642768470447\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve never tried generated columns, but it is something that I’m interested in.  It is nice to have things computed and in the database if you ever need to query on them.  My brain is now churning with possibilities and quesions, does this work with Alembic? How does this compare to views?\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/2b763b3d-1709-47e6-a13d-bfec7baef47d.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/2b763b3d-1709-47e6-a13d-bfec7baef47d.png\" alt=\"screenshot-2025-09-16T13-52-48-868Z.png\"/ data-glightbox=\"description: screenshot-2025-09-16T13-52-48-868Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/MeetGor21/status/1967818642768470447\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've never tried generated columns, but it is something that I'm interested in.  It is nice to have things computed and in the database if you ever need to query on them.  My brain is now churning with possibilities and quesions, does this work with Alembic? How does this compare to views?\n\n![screenshot-2025-09-16T13-52-48-868Z.png](https://dropper.wayl.one/api/file/2b763b3d-1709-47e6-a13d-bfec7baef47d.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/MeetGor21/status/1967818642768470447",
      "date_published": "2025-09-16T13:54:52Z",
      "date_modified": "2025-09-16T13:54:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "db",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vanilla-html-hover-text/",
      "url": "https://go.waylonwalker.com/vanilla-html-hover-text/",
      "title": "vanilla html hover text",
      "content_html": "\u003cp\u003eI needed to display some hover text in a web app that I am using tailwind and\njinja on.  It has no js, and no build other than the tailwind. I want this to\nremain \u003cspan style=\"cursor: help; color:yellow;\" title=\"respective to the\npython developer I am and the team it is used for\"\u003esimple\u003c/span\u003e. Turns out\nthat you can use a span with a title attribute to get hover text in\n\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.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eI needed to display some hover text in a web app that I am using tailwind and\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ejinja on.  It has no js, and no build other than the tailwind. I want this to\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eremain \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003espan\u003c/span\u003e \u003cspan class=\"na\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;cursor: help; color:yellow;\u0026#39;\u003c/span\u003e \u003cspan class=\"na\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;respective to the\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003epython developer I am and the team it is used for\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003esimple\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003espan\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI needed to display some hover text in a web app that I am using tailwind and\njinja on.  It has no js, and no build other than the tailwind. I want this to\nremain \u003cspan style='cursor: help; color:yellow;' title='respective to the\npython developer I am and the team it is used for'\u003esimple\u003c/span\u003e. Turns out\nthat you can use a span with a title attribute to get hover text in\nHTML.\n\n``` html\n\u003cp\u003e\nI needed to display some hover text in a web app that I am using tailwind and\njinja on.  It has no js, and no build other than the tailwind. I want this to\nremain \u003cspan style='cursor: help; color:yellow;' title='respective to the\npython developer I am and the team it is used for'\u003esimple\u003c/span\u003e.\n\u003c/p\u003e\n```\n",
      "summary": "I needed to display some hover text in a web app that I am using tailwind and jinja on. It has no js, and no build other than the tailwind. I want this to...",
      "date_published": "2025-09-16T11:39:41Z",
      "date_modified": "2025-09-16T11:39:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "html"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-835/",
      "url": "https://go.waylonwalker.com/thought-835/",
      "title": "💭 Idea to Product in Seconds #PortalPrints - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"47CQMbkzX9o\" title=\"Idea to Product in Seconds #PortalPrints\" playlabel=\"Play: Idea to Product in Seconds #PortalPrints\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e3d-printing is so freaking cool.  I love the idea that someone could get a hyperspecific tool to their needs for super cheap.  Whether it works permanently or to try out one that you want to spend thousands of dollars on to have well done from some high end materials this is a great application.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"47CQMbkzX9o\" title=\"Idea to Product in Seconds #PortalPrints\" playlabel=\"Play: Idea to Product in Seconds #PortalPrints\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n3d-printing is so freaking cool.  I love the idea that someone could get a hyperspecific tool to their needs for super cheap.  Whether it works permanently or to try out one that you want to spend thousands of dollars on to have well done from some high end materials this is a great application.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/47CQMbkzX9o",
      "date_published": "2025-09-16T01:43:59Z",
      "date_modified": "2025-09-16T01:43:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-834/",
      "url": "https://go.waylonwalker.com/thought-834/",
      "title": "💭 a new chapter",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jesseleite.com/2025/a-new-chapter\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jesseleite.com/img/asset/YXNzZXRzL3Nlby9vZy1pbWFnZS1iYWctZW5kLnBuZw/og-image-bag-end.png?p=seo_pro_og\u0026amp;s=345669cb43e131dd75d795dca9edb0c7\" alt=\"A New Chapter — In a recent turn of events, I find myself at a bit of a crossroads with an exciting new job on the horizon! In this post, I introduce myself and discuss my vision for the new blog.\" loading=\"lazy\"/ data-glightbox=\"description: A New Chapter — In a recent turn of events, I find myself at a bit of a crossroads with an exciting new job on the horizon! In this post, I introduce myself and discuss my vision for the new blog.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA New Chapter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn a recent turn of events, I find myself at a bit of a crossroads with an exciting new job on the horizon! In this post, I introduce myself and discuss my vision for the new blog.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJesse Leite · jesseleite.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSub to this man.  I met Jesse long ago as we both spoke at the same remote vim conf.  He is into vim, weird keyboards, and medroid what more could you ask for.  Now react and exlixer.  I only know \u003ca href=\"https://statamic.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/statamic.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/statamic.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://statamic.com/\u003c/a\u003e through Jesse, they have the sickest branding ever.  Now I will need to see what this \u003ca href=\"https://x.com/savvycal\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\" class=\"has-avatar  has-avatar-before\"\u003esavvycal\u003c/a\u003e is about.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://jesseleite.com/feed\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/jesseleite.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/jesseleite.com.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://jesseleite.com/feed\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jesseleite.com/2025/a-new-chapter\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jesseleite.com/img/asset/YXNzZXRzL3Nlby9vZy1pbWFnZS1iYWctZW5kLnBuZw/og-image-bag-end.png?p=seo_pro_og\u0026amp;s=345669cb43e131dd75d795dca9edb0c7\" alt=\"A New Chapter — In a recent turn of events, I find myself at a bit of a crossroads with an exciting new job on the horizon! In this post, I introduce myself and discuss my vision for the new blog.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA New Chapter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn a recent turn of events, I find myself at a bit of a crossroads with an exciting new job on the horizon! In this post, I introduce myself and discuss my vision for the new blog.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJesse Leite \u0026middot; jesseleite.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSub to this man.  I met Jesse long ago as we both spoke at the same remote vim conf.  He is into vim, weird keyboards, and medroid what more could you ask for.  Now react and exlixer.  I only know https://statamic.com/ through Jesse, they have the sickest branding ever.  Now I will need to see what this [savvycal](https://x.com/savvycal) is about.\n\nhttps://jesseleite.com/feed\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jesseleite.com/2025/a-new-chapter",
      "date_published": "2025-09-16T01:30:36Z",
      "date_modified": "2025-09-16T01:30:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-833/",
      "url": "https://go.waylonwalker.com/thought-833/",
      "title": "💭 \"Pacman is currently in use, please wait.\"",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bbs.archlinux.org/viewtopic.php?id=67729\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/bbs.archlinux.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/bbs.archlinux.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026#34;Pacman is currently in use, please wait.\u0026#34; / Pacman \u0026amp; Package Upgrade Issues / Arch Linux Forums\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebbs.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI ran into this issue today, never have I ever before though. Omarchy looking a bit sus on me.  This was even after a fresh boot, no pacman process running. just realized I forgot to check yay which it has installed for me.   I had to force it in.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo rm /var/lib/pacman/db.lck\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bbs.archlinux.org/viewtopic.php?id=67729\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026#34;Pacman is currently in use, please wait.\u0026#34; / Pacman \u0026amp; Package Upgrade Issues / Arch Linux Forums\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebbs.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI ran into this issue today, never have I ever before though. Omarchy looking a bit sus on me.  This was even after a fresh boot, no pacman process running. just realized I forgot to check yay which it has installed for me.   I had to force it in.\n\n``` bash\nsudo rm /var/lib/pacman/db.lck\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bbs.archlinux.org/viewtopic.php?id=67729",
      "date_published": "2025-09-16T01:26:33Z",
      "date_modified": "2025-09-16T01:26:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "arch",
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tar-over-ssh/",
      "url": "https://go.waylonwalker.com/tar-over-ssh/",
      "title": "tar over ssh",
      "content_html": "\u003cp\u003eToday I learned how to use tar over ssh to save hours in file transfers.  I\nkeep all of my projects in ~/\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e (very creative I know, I’ve done it for years\nand haven’t changed).  I just swapped out my main desktop from bazzite to\nhyprland, and wanted to get all of my projects back.  Before killing my\nbazzite install I moved everything over (16GB of many small files), it took\nover 14 hours, maybe longer.  I had started in the morning and just let it\nchurn.\u003c/p\u003e\n\u003cp\u003eThis was not going to happen for re-seeding all of my projects on my new\nsystem, I knew there had to be a better way, I looked at rsync, but for seeding\nI ran into this tar over ssh technique and it only took me 6m51s to pull all of\nmy projects off of my remote server.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh user@192.168.1.100 \u003cspan class=\"s1\"\u003e\u0026#39;tar -C /tank/git -cpf - .\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e tar -C \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e\u003cspan class=\"s2\"\u003e/git\u0026#34;\u003c/span\u003e -xpf -\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I learned how to use tar over ssh to save hours in file transfers.  I\nkeep all of my projects in ~/git (very creative I know, I've done it for years\nand haven't changed).  I just swapped out my main desktop from bazzite to\nhyprland, and wanted to get all of my projects back.  Before killing my\nbazzite install I moved everything over (16GB of many small files), it took\nover 14 hours, maybe longer.  I had started in the morning and just let it\nchurn.\n\nThis was not going to happen for re-seeding all of my projects on my new\nsystem, I knew there had to be a better way, I looked at rsync, but for seeding\nI ran into this tar over ssh technique and it only took me 6m51s to pull all of\nmy projects off of my remote server.\n\n``` bash\nssh user@192.168.1.100 'tar -C /tank/git -cpf - .' \\\n  | tar -C \"$HOME/git\" -xpf -\n```\n\n\n",
      "summary": "Today I learned how to use tar over ssh to save hours in file transfers. I keep all of my projects in ~/git (very creative I know, I've done it for years and...",
      "date_published": "2025-09-13T10:50:42Z",
      "date_modified": "2025-09-13T10:50:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "linux",
        "homelab"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mmulet-term-everything/",
      "url": "https://go.waylonwalker.com/mmulet-term-everything/",
      "title": "⭐ mmulet term.everything",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/mmulet\" 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\"\u003emmulet\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/mmulet/term.everything\" 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\"\u003eterm.everything\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eRun any GUI app in the terminal❗\u003c/p\u003e\n",
      "content_text": "\n[mmulet](https://github.com/mmulet) has done a fantastic job with [term.everything](https://github.com/mmulet/term.everything). Highly recommend taking a look.\n\nRun any GUI app in the terminal❗\n",
      "summary": "mmulet has done a fantastic job with term.everything. Highly recommend taking a look.",
      "date_published": "2025-09-11T13:16:21Z",
      "date_modified": "2025-09-11T13:16:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-832/",
      "url": "https://go.waylonwalker.com/thought-832/",
      "title": "💭 How To Become The BEST Engineer At Your Company - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Qc_kEyLsXH0\" title=\"How To Become The BEST Engineer At Your Company\" playlabel=\"Play: How To Become The BEST Engineer At Your Company\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWhen you fill all of your time with a bunch of other things, it becomes really hard to become a friendly person.  Prime talked about trying to learn how to drop the hurry in his life, and how to not always be in a frenzy of going from one thing to the next.  It’s something that puts us in a state that its hard to remember to be friendly.  Hard to remember that \u003ca href=\"https://www.youtube.com/watch?v=cPgMeKfQFq8\" 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\"\u003etheres always time for coffee\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI do my best to always leave time for coffee, whether at home with my wife and kids, as well as at work.  I am in a very unique place at work where I have a rare set of skills for the industry I am in.  This comes with a lot of people insterested in how to do things like running data pipelines or managing server infrastructure.  I always take time for these conversations, I find them interesting, and useful.  Sometimes you end up with someone who asks the same questions every 6 months, other times, you have someone flourish from these conversations.  I’m not saying to take on work from every other team in the org, but giving 30 minutes to help mentor others can go a long ways.\u003c/p\u003e\n\u003cp\u003eI’m still not the best, I still get wrapped up in my own stuff just like prime calls out.  I sometimes get frustrated with others around me when things come up that prevent me from doing my work, or just getting the things out of my head that I had momentum on while the lightning was hot.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Qc_kEyLsXH0\" title=\"How To Become The BEST Engineer At Your Company\" playlabel=\"Play: How To Become The BEST Engineer At Your Company\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWhen you fill all of your time with a bunch of other things, it becomes really hard to become a friendly person.  Prime talked about trying to learn how to drop the hurry in his life, and how to not always be in a frenzy of going from one thing to the next.  It's something that puts us in a state that its hard to remember to be friendly.  Hard to remember that [theres always time for coffee](https://www.youtube.com/watch?v=cPgMeKfQFq8).\n\nI do my best to always leave time for coffee, whether at home with my wife and kids, as well as at work.  I am in a very unique place at work where I have a rare set of skills for the industry I am in.  This comes with a lot of people insterested in how to do things like running data pipelines or managing server infrastructure.  I always take time for these conversations, I find them interesting, and useful.  Sometimes you end up with someone who asks the same questions every 6 months, other times, you have someone flourish from these conversations.  I'm not saying to take on work from every other team in the org, but giving 30 minutes to help mentor others can go a long ways.\n\nI'm still not the best, I still get wrapped up in my own stuff just like prime calls out.  I sometimes get frustrated with others around me when things come up that prevent me from doing my work, or just getting the things out of my head that I had momentum on while the lightning was hot.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=Qc_kEyLsXH0",
      "date_published": "2025-09-10T16:08:36Z",
      "date_modified": "2025-09-10T16:08:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/uv-script-management/",
      "url": "https://go.waylonwalker.com/uv-script-management/",
      "title": "uv script management",
      "content_html": "\u003cp\u003eI’ve been leaning on\n\u003ca href=\"https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/treyhunner.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/treyhunner.com.png\" class=\"has-avatar  has-avatar-before\"\u003elazy-self-installing-python-scripts\u003c/a\u003e\nmore and more, but I did not realize how much tooling that\n\u003ca href=\"https://docs.astral.sh/uv/getting-started/installation/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.astral.sh.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.astral.sh.png\" class=\"has-avatar  has-avatar-before\"\u003euv\u003c/a\u003e\ngives you to help manage your scripts.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv init --script up\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv add --script up typer rich\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv remove --script up rich\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esed -i \u003cspan class=\"s1\"\u003e\u0026#39;1i #!/usr/bin/env -S uv run --script\u0026#39;\u003c/span\u003e up\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod +x up\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./up\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe result is a script that looks like this, its executable as what looks like\nregular command in your shell.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ch\"\u003e#!/usr/bin/env -S uv run --script\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# /// script\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# requires-python = \u0026#34;\u0026gt;=3.13\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# dependencies = [\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#34;typer\u0026#34;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ///\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hello from up!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\nI've been leaning on\n[lazy-self-installing-python-scripts](https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/)\nmore and more, but I did not realize how much tooling that\n[uv](https://docs.astral.sh/uv/getting-started/installation/)\ngives you to help manage your scripts.\n\n``` bash\nuv init --script up\nuv add --script up typer rich\nuv remove --script up rich\nsed -i '1i #!/usr/bin/env -S uv run --script' up\nchmod +x up\n./up\n```\n\nThe result is a script that looks like this, its executable as what looks like\nregular command in your shell.\n\n``` python\n#!/usr/bin/env -S uv run --script\n# /// script\n# requires-python = \"\u003e=3.13\"\n# dependencies = [\n#     \"typer\",\n# ]\n# ///\n\n\ndef main() -\u003e None:\n    print(\"Hello from up!\")\n\n\nif __name__ == \"__main__\":\n    main()\n```\n",
      "summary": "I've been leaning on lazy-self-installing-python-scripts more and more, but I did not realize how much tooling that uv gives you to help manage your scripts.",
      "date_published": "2025-09-07T20:22:56Z",
      "date_modified": "2025-09-07T20:22:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-829/",
      "url": "https://go.waylonwalker.com/thought-829/",
      "title": "💭 Ben Dicken on X: \"I am once again begging you to put your data...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/BenjDicken/status/1963998076198105475\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a really great animation of latency across different aws regions based on us-east-1.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/BenjDicken/status/1963998076198105475\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a really great animation of latency across different aws regions based on us-east-1.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/BenjDicken/status/1963998076198105475",
      "date_published": "2025-09-05T23:45:00Z",
      "date_modified": "2025-09-05T23:45:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cloud",
        "aws",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-828/",
      "url": "https://go.waylonwalker.com/thought-828/",
      "title": "💭 Hollow Knight: Silksong is breaking Steam, Nintendo’s eShop - ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://arstechnica.com/gaming/2025/09/hollow-knight-silksong-is-breaking-steam/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.arstechnica.net/wp-content/uploads/2025/09/steamerror-1152x648-1757001087.jpg\" alt=\"Hollow Knight: Silksong is breaking Steam, Nintendo’s eShop — Valve\u0026#39;s usually stable platform struggles thanks in part to lack of pre-loading options.\" loading=\"lazy\"/ data-glightbox=\"description: Hollow Knight: Silksong is breaking Steam, Nintendo’s eShop — Valve\u0026#39;s usually stable platform struggles thanks in part to lack of pre-loading options.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHollow Knight: Silksong is breaking Steam, Nintendo’s eShop\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eValve\u0026#39;s usually stable platform struggles thanks in part to lack of pre-loading options.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eArs Technica · arstechnica.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOnly 1 hour into the release of silksong, and it’s taken down all of the eshops, and steamdb dows 100K concurrent players.  The Humble store ran out of steam keys for silksong already.\u003c/p\u003e\n\u003cp\u003eYou guys better not break this thing before I get off work and My son gets home cause we are playing this tonight!!\u003c/p\u003e\n\u003cp\u003eI just Check \u003ca href=\"https://steamdb.info/app/1030300/charts/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/steamdb.info.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/steamdb.info.ico\" class=\"has-avatar  has-avatar-before\"\u003esteamDB\u003c/a\u003e, and they have 441K concurrent players right now.  An Indie game!  This shows when you treat your fans right and make something incredible they stand behind you.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://arstechnica.com/gaming/2025/09/hollow-knight-silksong-is-breaking-steam/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.arstechnica.net/wp-content/uploads/2025/09/steamerror-1152x648-1757001087.jpg\" alt=\"Hollow Knight: Silksong is breaking Steam, Nintendo’s eShop — Valve\u0026#39;s usually stable platform struggles thanks in part to lack of pre-loading options.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHollow Knight: Silksong is breaking Steam, Nintendo’s eShop\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eValve\u0026#39;s usually stable platform struggles thanks in part to lack of pre-loading options.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eArs Technica \u0026middot; arstechnica.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOnly 1 hour into the release of silksong, and it's taken down all of the eshops, and steamdb dows 100K concurrent players.  The Humble store ran out of steam keys for silksong already.\n\nYou guys better not break this thing before I get off work and My son gets home cause we are playing this tonight!!\n\nI just Check [steamDB](https://steamdb.info/app/1030300/charts/), and they have 441K concurrent players right now.  An Indie game!  This shows when you treat your fans right and make something incredible they stand behind you.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://arstechnica.com/gaming/2025/09/hollow-knight-silksong-is-breaking-steam/",
      "date_published": "2025-09-04T17:20:03Z",
      "date_modified": "2025-09-04T17:20:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-827/",
      "url": "https://go.waylonwalker.com/thought-827/",
      "title": "💭 Chris Coyier",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/09/02/12693/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://s0.wp.com/_si/?t=eyJpbWciOiJodHRwczpcL1wvaTAud3AuY29tXC9jaHJpc2NveWllci5uZXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjFcLzA3XC9Jc1VJU3ZBcV80MDB4NDAwLmpwZz9maXQ9NDAwJTJDNDAwJnNzbD0xIiwidHh0IjoiQ2hyaXMgQ295aWVyIiwidGVtcGxhdGUiOiJlZGdlIiwiZm9udCI6IiIsImJsb2dfaWQiOjc0MDc0MjQ4fQ.bvKLReBBKcA57TVb4-g9yEs2QdY7VFEGHqUPK_9OQuAMQ\" alt=\"— Trump says: With this order, I am announcing “America by Design,” a national initiative to improve experiences for Americans, starting by breathing new life into the design of sites where people in…\" loading=\"lazy\"/ data-glightbox=\"description: — Trump says: With this order, I am announcing “America by Design,” a national initiative to improve experiences for Americans, starting by breathing new life into the design of sites where people in…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e \u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTrump says: With this order, I am announcing “America by Design,” a national initiative to improve experiences for Americans, starting by breathing new life into the design of sites where peopl...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier · chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eEverything is becoming political these days!  I hate it.  I regularly hear a friend say these podcasts need to set the politics to the side, but you know what its fukin hard when the gov is upending every corner  of life and rebranding it with their own new twist.  The billionaire class is winning and it looks like there ain’t a thing we can do about it.  Here’s another example of someone taking head of an office they have no business being in.  An entire set of working class folks let go for this guy to take over.  And what does he want to do, make govt services as satisfying as apple.  Apple is cutting edge, it is not something that is one bit sustainable.  Their launch sites are generally super heavy, hard to scroll, slow, over animated, but damn they are satisfying the first time you scroll through them, after that just let me through.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/09/02/12693/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://s0.wp.com/_si/?t=eyJpbWciOiJodHRwczpcL1wvaTAud3AuY29tXC9jaHJpc2NveWllci5uZXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjFcLzA3XC9Jc1VJU3ZBcV80MDB4NDAwLmpwZz9maXQ9NDAwJTJDNDAwJnNzbD0xIiwidHh0IjoiQ2hyaXMgQ295aWVyIiwidGVtcGxhdGUiOiJlZGdlIiwiZm9udCI6IiIsImJsb2dfaWQiOjc0MDc0MjQ4fQ.bvKLReBBKcA57TVb4-g9yEs2QdY7VFEGHqUPK_9OQuAMQ\" alt=\"— Trump says: With this order, I am announcing “America by Design,” a national initiative to improve experiences for Americans, starting by breathing new life into the design of sites where people in…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e \u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTrump says: With this order, I am announcing “America by Design,” a national initiative to improve experiences for Americans, starting by breathing new life into the design of sites where peopl...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier \u0026middot; chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nEverything is becoming political these days!  I hate it.  I regularly hear a friend say these podcasts need to set the politics to the side, but you know what its fukin hard when the gov is upending every corner  of life and rebranding it with their own new twist.  The billionaire class is winning and it looks like there ain't a thing we can do about it.  Here's another example of someone taking head of an office they have no business being in.  An entire set of working class folks let go for this guy to take over.  And what does he want to do, make govt services as satisfying as apple.  Apple is cutting edge, it is not something that is one bit sustainable.  Their launch sites are generally super heavy, hard to scroll, slow, over animated, but damn they are satisfying the first time you scroll through them, after that just let me through.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://chriscoyier.net/2025/09/02/12693/",
      "date_published": "2025-09-04T01:43:39Z",
      "date_modified": "2025-09-04T01:43:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-826/",
      "url": "https://go.waylonwalker.com/thought-826/",
      "title": "💭 Home",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://lospec.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.lospec.com/static/images/og-image-default.png\" alt=\"Home — Free online tools for people creating pixel art and other low-spec art.\" loading=\"lazy\"/ data-glightbox=\"description: Home — Free online tools for people creating pixel art and other low-spec art.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFree online tools for people creating pixel art and other low-spec art.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLospec · lospec.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMy son introduced me to lospec.com, It has a great set of color palettes and amazing pixel art inspiration.  I particularly liked \u003ca href=\"https://lospec.com/palette-list/royal-armoury\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/lospec.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/lospec.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eroyal armoury\u003c/a\u003e and  of course I’m a bit partial to \u003ca href=\"https://lospec.com/palette-list/hollow\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/lospec.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/lospec.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehollow\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://lospec.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.lospec.com/static/images/og-image-default.png\" alt=\"Home — Free online tools for people creating pixel art and other low-spec art.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFree online tools for people creating pixel art and other low-spec art.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLospec \u0026middot; lospec.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMy son introduced me to lospec.com, It has a great set of color palettes and amazing pixel art inspiration.  I particularly liked [royal armoury](https://lospec.com/palette-list/royal-armoury) and  of course I'm a bit partial to [hollow](https://lospec.com/palette-list/hollow).\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://lospec.com/",
      "date_published": "2025-09-04T01:36:40Z",
      "date_modified": "2025-09-04T01:36:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gamedev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-825/",
      "url": "https://go.waylonwalker.com/thought-825/",
      "title": "💭 GPT-5 + Codex is so fast that when I… | justin․searls․co",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justin.searls.co/takes/2025-09-03-14h21m54s/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://justin.searls.co/img/face.jpg\" alt=\"Justin Searls\n@searls — \nGPT-5 + Codex is so fast that when I expressed suspicion that a script was returning too few results (via `| wc -l`), Codex corrected me that I should have passed `--count` instead. Sure enough, that worked.\n\u0026lt;p\u0026gt;Checked git status and realized Codex implemented the \u0026lt;code\u0026gt;--count\u0026lt;/code\u0026gt; flag in the script \u0026lt;em\u0026gt;concurrently as it corrected me\u0026lt;/em\u0026gt; for not having used it! Gaslit by a robot!\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Justin Searls\n@searls — \nGPT-5 + Codex is so fast that when I expressed suspicion that a script was returning too few results (via `| wc -l`), Codex corrected me that I should have passed `--count` instead. Sure enough, that worked.\n\u0026lt;p\u0026gt;Checked git status and realized Codex implemented the \u0026lt;code\u0026gt;--count\u0026lt;/code\u0026gt; flag in the script \u0026lt;em\u0026gt;concurrently as it corrected me\u0026lt;/em\u0026gt; for not having used it! Gaslit by a robot!\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eJustin Searls\n@searls\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003e\nGPT-5 + Codex is so fast that when I expressed suspicion that a script was returning too few results (via \u003ccode\u003e| wc -l\u003c/code\u003e), Codex corrected me that I should have passed \u003ccode\u003e--count\u003c/code\u003e instead. Sure enough, t…\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003ejustin․searls․co · justin.searls.co\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is hilarious, the llm shames him for not utilizing the \u003ccode\u003e--count\u003c/code\u003e flag, THAT DIDN’T EXIST WHEN HE RAN THE CLI!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justin.searls.co/takes/2025-09-03-14h21m54s/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://justin.searls.co/img/face.jpg\" alt=\"Justin Searls\n@searls — \nGPT-5 + Codex is so fast that when I expressed suspicion that a script was returning too few results (via `| wc -l`), Codex corrected me that I should have passed `--count` instead. Sure enough, that worked.\n\nChecked git status and realized Codex implemented the `--count` flag in the script _concurrently as it corrected me_ for not having used it! Gaslit by a robot!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJustin Searls\n@searls\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\nGPT-5 + Codex is so fast that when I expressed suspicion that a script was returning too few results (via `| wc -l`), Codex corrected me that I should have passed `--count` instead. Sure enough, t...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustin․searls․co \u0026middot; justin.searls.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is hilarious, the llm shames him for not utilizing the `--count` flag, THAT DIDN'T EXIST WHEN HE RAN THE CLI!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://justin.searls.co/takes/2025-09-03-14h21m54s/",
      "date_published": "2025-09-03T19:27:01Z",
      "date_modified": "2025-09-03T19:27:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-824/",
      "url": "https://go.waylonwalker.com/thought-824/",
      "title": "💭 Vibe code is legacy code | Val Town Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.val.town/vibe-code\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://blog.val.town/og-image.png?title=Vibe+code+is+legacy+code\" alt=\"Vibe code is legacy code — Updates and articles from the Val Town team\" loading=\"lazy\"/ data-glightbox=\"description: Vibe code is legacy code — Updates and articles from the Val Town team\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVibe code is legacy code\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUpdates and articles from the Val Town team\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.val.town\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBrilliantly said.  \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 is legacy code.  It’s code that we forget exists.  Code that no one touches, you replace it.  If you touch it you are more likely to break it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe worst possible situation is to have a non-programmer vibe code a large project that they intend to maintain. This would be the equivalent of giving a credit card to a child without first explaining the concept of debt.\u003c/p\u003e\n\u003cp\u003eAs you can imagine, the first phase is ecstatic. I can wave this little piece of plastic in stores and take whatever I want! …\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eRead more in the full \u003ca href=\"https://blog.val.town/vibe-code\"\u003epost\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.val.town/vibe-code\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://blog.val.town/og-image.png?title=Vibe+code+is+legacy+code\" alt=\"Vibe code is legacy code — Updates and articles from the Val Town team\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVibe code is legacy code\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUpdates and articles from the Val Town team\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.val.town\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBrilliantly said.  Vibe coding is legacy code.  It's code that we forget exists.  Code that no one touches, you replace it.  If you touch it you are more likely to break it.\n\n\u003e The worst possible situation is to have a non-programmer vibe code a large project that they intend to maintain. This would be the equivalent of giving a credit card to a child without first explaining the concept of debt.\n\u003e\n\u003e As you can imagine, the first phase is ecstatic. I can wave this little piece of plastic in stores and take whatever I want! ...\n\nRead more in the full [post](https://blog.val.town/vibe-code)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.val.town/vibe-code",
      "date_published": "2025-09-03T02:14:45Z",
      "date_modified": "2025-09-03T02:14:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-823/",
      "url": "https://go.waylonwalker.com/thought-823/",
      "title": "💭 Rich Pixels",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Sep/2/rich-pixels/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.simonwillison.net/static/2025/pixel-storehouse.jpg\" alt=\"Rich Pixels — Neat Python library by Darren Burns adding pixel image support to the Rich terminal library, using tricks to render an image using full or half-height colored blocks. Here\u0026#39;s the key …\" loading=\"lazy\"/ data-glightbox=\"description: Rich Pixels — Neat Python library by Darren Burns adding pixel image support to the Rich terminal library, using tricks to render an image using full or half-height colored blocks. Here\u0026#39;s the key …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRich Pixels\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeat Python library by Darren Burns adding pixel image support to the Rich terminal library, using tricks to render an image using full or half-height colored blocks. Here\u0026#39;s the key …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI saw this post from Simon and I had to give it a go and got some pretty good results.  His script is a small cli wrapper around Darren Burns’s \u003ca href=\"https://github.com/darrenburns/rich-pixels\" 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\"\u003eRich Pixels\u003c/a\u003e.  It works well even through tmux, since there is no terminal magic, just unicode blocks.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/024bf3e0-9c38-4c1e-ad5c-ed0156c9a99b.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/024bf3e0-9c38-4c1e-ad5c-ed0156c9a99b.png\" alt=\"screenshot-2025-09-02T13-39-25-710Z.png\"/ data-glightbox=\"description: screenshot-2025-09-02T13-39-25-710Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/4bf522eb-4207-4a23-b5d0-626cefc8bdca.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/4bf522eb-4207-4a23-b5d0-626cefc8bdca.png\" alt=\"screenshot-2025-09-02T13-40-22-890Z.png\"/ data-glightbox=\"description: screenshot-2025-09-02T13-40-22-890Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/d061e85f-98cf-4b3c-871c-e01611022b44.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/d061e85f-98cf-4b3c-871c-e01611022b44.png\" alt=\"screenshot-2025-09-02T13-41-39-775Z.png\"/ data-glightbox=\"description: screenshot-2025-09-02T13-41-39-775Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eSome not so good, and needed the terminal font size cranked up.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a532f113-185e-44ef-bcf8-30eed7e3f62a.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a532f113-185e-44ef-bcf8-30eed7e3f62a.png\" alt=\"screenshot-2025-09-02T13-38-16-641Z.png\"/ data-glightbox=\"description: screenshot-2025-09-02T13-38-16-641Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a66d4d7a-975d-4909-88a2-3761e2d3348f.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a66d4d7a-975d-4909-88a2-3761e2d3348f.png\" alt=\"screenshot-2025-09-02T13-38-46-814Z.png\"/ data-glightbox=\"description: screenshot-2025-09-02T13-38-46-814Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Sep/2/rich-pixels/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.simonwillison.net/static/2025/pixel-storehouse.jpg\" alt=\"Rich Pixels — Neat Python library by Darren Burns adding pixel image support to the Rich terminal library, using tricks to render an image using full or half-height colored blocks. Here\u0026#39;s the key …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRich Pixels\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeat Python library by Darren Burns adding pixel image support to the Rich terminal library, using tricks to render an image using full or half-height colored blocks. Here\u0026#39;s the key …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI saw this post from Simon and I had to give it a go and got some pretty good results.  His script is a small cli wrapper around Darren Burns's [Rich Pixels](https://github.com/darrenburns/rich-pixels).  It works well even through tmux, since there is no terminal magic, just unicode blocks.\n\n![screenshot-2025-09-02T13-39-25-710Z.png](https://dropper.wayl.one/api/file/024bf3e0-9c38-4c1e-ad5c-ed0156c9a99b.png)\n\n![screenshot-2025-09-02T13-40-22-890Z.png](https://dropper.wayl.one/api/file/4bf522eb-4207-4a23-b5d0-626cefc8bdca.png)\n\n![screenshot-2025-09-02T13-41-39-775Z.png](https://dropper.wayl.one/api/file/d061e85f-98cf-4b3c-871c-e01611022b44.png)\n\nSome not so good, and needed the terminal font size cranked up.\n\n![screenshot-2025-09-02T13-38-16-641Z.png](https://dropper.wayl.one/api/file/a532f113-185e-44ef-bcf8-30eed7e3f62a.png)\n\n![screenshot-2025-09-02T13-38-46-814Z.png](https://dropper.wayl.one/api/file/a66d4d7a-975d-4909-88a2-3761e2d3348f.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Sep/2/rich-pixels/#atom-everything",
      "date_published": "2025-09-02T13:43:58Z",
      "date_modified": "2025-09-02T13:43:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-delete-current-file/",
      "url": "https://go.waylonwalker.com/nvim-delete-current-file/",
      "title": "nvim delete current file",
      "content_html": "\u003cp\u003eThis one is one that I’ve been using quite often, I did’t have a hotkey for it,\nI just used the \u003ccode\u003erm\u003c/code\u003e shell command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e!!\u003c/span\u003e\u003cspan class=\"nx\"\u003erm\u003c/span\u003e %\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eTAB\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCR\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWhen you type \u003ccode\u003e!!\u003c/code\u003e from normal mode it will automatically put you in command\nmode with \u003ccode\u003e.!\u003c/code\u003e pre-filled, then you just type \u003ccode\u003erm \u003c/code\u003e and \u003ccode\u003e\u0026lt;TAB\u0026gt;\u003c/code\u003e to\nauto-complete the current file name, and \u003ccode\u003e\u0026lt;CR\u0026gt;\u003c/code\u003e to execute the command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e.\u003cspan class=\"p\"\u003e!\u003c/span\u003e\u003cspan class=\"nx\"\u003erm\u003c/span\u003e %\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eTAB\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCR\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"making-it-better\"\u003eMaking it better \u003ca href=\"#making-it-better\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe one quirk that I don’t like about this is that the buffer remains open\nafter deleting, and sometimes I forget to close it and end up re-creating it by\nmistake when running \u003ccode\u003e:wall\u003c/code\u003e or \u003ccode\u003e:xall\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eCreate a \u003ccode\u003eDeleteFile\u003c/code\u003e command with vim command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003ecommand\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"nx\"\u003eDeleteFile\u003c/span\u003e \u003cspan class=\"k\"\u003eexecute\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;!rm %\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nx\"\u003ebdelete\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCreate a \u003ccode\u003eDeleteFile\u003c/code\u003e command with lua.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.api\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003envim_create_user_command\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s1\"\u003e\u0026#39;DeleteFile\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e-- Delete the current file from disk\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003evim.cmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;!rm %\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e-- Close the buffer without saving\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003evim.cmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;bdelete!\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThis one is one that I've been using quite often, I did't have a hotkey for it,\nI just used the `rm` shell command.\n\n``` vim\n!!rm %\u003cTAB\u003e\u003cCR\u003e\n```\n\nWhen you type `!!` from normal mode it will automatically put you in command\nmode with `.!` pre-filled, then you just type `rm ` and `\u003cTAB\u003e` to\nauto-complete the current file name, and `\u003cCR\u003e` to execute the command.\n\n``` vim\n:.!rm %\u003cTAB\u003e\u003cCR\u003e\n\n```\n\n## Making it better\n\nThe one quirk that I don't like about this is that the buffer remains open\nafter deleting, and sometimes I forget to close it and end up re-creating it by\nmistake when running `:wall` or `:xall`.\n\n\nCreate a `DeleteFile` command with vim command.\n\n``` vim\n:command! DeleteFile execute \"!rm %\" | bdelete!\n```\n\nCreate a `DeleteFile` command with lua.\n``` lua\nvim.api.nvim_create_user_command(\n  'DeleteFile',\n  function()\n    -- Delete the current file from disk\n    vim.cmd('!rm %')\n    -- Close the buffer without saving\n    vim.cmd('bdelete!')\n  end,\n  {}\n)\n```\n",
      "summary": "This one is one that I've been using quite often, I did't have a hotkey for it, I just used the shell command.",
      "date_published": "2025-09-02T13:23:21Z",
      "date_modified": "2025-09-02T13:23:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-822/",
      "url": "https://go.waylonwalker.com/thought-822/",
      "title": "💭 Plastic rollers instead of bearings. Little step forward with ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"QTPEwmI5epA\" title=\"Plastic rollers instead of bearings. Little step forward with every version! #BBlauncher #airsoft\" playlabel=\"Play: Plastic rollers instead of bearings. Little step forward with every version! #BBlauncher #airsoft\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a really uniquely designed print in place bb launcher.  I’ve never seen bb’s on a zip tie like that, they look smooth and molded.  Interesting to hear about the design process.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"QTPEwmI5epA\" title=\"Plastic rollers instead of bearings. Little step forward with every version! #BBlauncher #airsoft\" playlabel=\"Play: Plastic rollers instead of bearings. Little step forward with every version! #BBlauncher #airsoft\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a really uniquely designed print in place bb launcher.  I've never seen bb's on a zip tie like that, they look smooth and molded.  Interesting to hear about the design process.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/QTPEwmI5epA",
      "date_published": "2025-08-29T13:31:40Z",
      "date_modified": "2025-08-29T13:31:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-821/",
      "url": "https://go.waylonwalker.com/thought-821/",
      "title": "💭 Learn to use email with git!",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://git-send-email.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLearn to use email with git!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egit-send-email.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis site gives us a glimpse into the development workflow using \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e over email, without remote centralized servers.  I found it interesting how patches can be sent with an optional cover letter nearly like a pr would be made.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://git-send-email.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLearn to use email with git!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egit-send-email.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis site gives us a glimpse into the development workflow using git over email, without remote centralized servers.  I found it interesting how patches can be sent with an optional cover letter nearly like a pr would be made.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://git-send-email.io/",
      "date_published": "2025-08-29T13:23:08Z",
      "date_modified": "2025-08-29T13:23:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-noa/",
      "url": "https://go.waylonwalker.com/vim-noa/",
      "title": "vim noa",
      "content_html": "\u003cp\u003eVim \u003ccode\u003e:noa\u003c/code\u003e is a command that runs what you call without autocommands on.  This\nis typically used when you have some \u003ccode\u003eBufWritePre\u003c/code\u003e commands for formatting,\nmost auto formatters are implemented this way in vim.  It can be super useful\nif you have something like a yaml/json file that you have crafted perfectly how\nyou want it, maybe it has some source code for a small script or sql embeded\nand your formatter wants to turn it into one line.  You could get a better\nformatter, but for these one off cases that aren’t a big bother to me I run\n\u003ccode\u003e:noa w\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003enoa\u003c/span\u003e \u003cspan class=\"nx\"\u003ew\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nVim `:noa` is a command that runs what you call without autocommands on.  This\nis typically used when you have some `BufWritePre` commands for formatting,\nmost auto formatters are implemented this way in vim.  It can be super useful\nif you have something like a yaml/json file that you have crafted perfectly how\nyou want it, maybe it has some source code for a small script or sql embeded\nand your formatter wants to turn it into one line.  You could get a better\nformatter, but for these one off cases that aren't a big bother to me I run\n`:noa w`.\n\n``` vim\n:noa w\n```\n",
      "summary": "Vim is a command that runs what you call without autocommands on. This is typically used when you have some commands for formatting, most auto formatters are...",
      "date_published": "2025-08-29T08:32:44Z",
      "date_modified": "2025-08-29T08:32:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-820/",
      "url": "https://go.waylonwalker.com/thought-820/",
      "title": "💭 Repository Mirrors | Forgejo – Beyond coding. We forge.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://forgejo.org/docs/latest/user/repo-mirror/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://forgejo.org/_astro/og-preview.Uy75QWb0_6Lpd2.webp\" alt=\"Repository Mirrors | Forgejo – Beyond coding. We forge.\" loading=\"lazy\"/ data-glightbox=\"description: Repository Mirrors | Forgejo – Beyond coding. We forge.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRepository Mirrors | Forgejo – Beyond coding. We forge.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eforgejo.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eForgejo supports repository mirrors, I think this is how I am going to handle migrating all of my github repos into forgejo.  over time I’ll probably go through and delete a bunch of unnecessary one from github, ones that might have a user or two I might keep on github.  I have such small scale projects with almost no users I am not sure that It really matters for me or not.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://forgejo.org/docs/latest/user/repo-mirror/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://forgejo.org/_astro/og-preview.Uy75QWb0_6Lpd2.webp\" alt=\"Repository Mirrors | Forgejo – Beyond coding. We forge.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRepository Mirrors | Forgejo – Beyond coding. We forge.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eforgejo.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nForgejo supports repository mirrors, I think this is how I am going to handle migrating all of my github repos into forgejo.  over time I'll probably go through and delete a bunch of unnecessary one from github, ones that might have a user or two I might keep on github.  I have such small scale projects with almost no users I am not sure that It really matters for me or not.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://forgejo.org/docs/latest/user/repo-mirror/",
      "date_published": "2025-08-29T00:50:50Z",
      "date_modified": "2025-08-29T00:50:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "self-hosted",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-819/",
      "url": "https://go.waylonwalker.com/thought-819/",
      "title": "💭 Vertical combos are dumb, this makes way more sense. · WaylonW...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/48c30d2ee4efcdd08266093b5ce79bba5730e6f0\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/4034a9cb71c0ed9696f0adaefbc5e0913799b569b121a1702acfc037b4625c13/WaylonWalker/zmk-config-42block/commit/48c30d2ee4efcdd08266093b5ce79bba5730e6f0\" alt=\"Vertical combos are dumb, this makes way more sense. · WaylonWalker/zmk-config-42block@48c30d2 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: Vertical combos are dumb, this makes way more sense. · WaylonWalker/zmk-config-42block@48c30d2 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVertical combos are dumb, this makes way more sense. · WaylonWalker/zmk-config-42block@48c30d2\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis commit to my keymap gets rid of vertical combos, those were a bad idea to me.  Maybe I didnt give it a shot, but hitting two keys at once on purpose with the same finger is a skill, one that I don’t have.  This change maps those symbols so that they work as a combo or layer switch, so getting the layer key in first does it by layer, but pressing them at the same time gives me the combo, kinda feels genius.  We will see how it goes.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/48c30d2ee4efcdd08266093b5ce79bba5730e6f0\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4034a9cb71c0ed9696f0adaefbc5e0913799b569b121a1702acfc037b4625c13/WaylonWalker/zmk-config-42block/commit/48c30d2ee4efcdd08266093b5ce79bba5730e6f0\" alt=\"Vertical combos are dumb, this makes way more sense. · WaylonWalker/zmk-config-42block@48c30d2 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVertical combos are dumb, this makes way more sense. · WaylonWalker/zmk-config-42block@48c30d2\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis commit to my keymap gets rid of vertical combos, those were a bad idea to me.  Maybe I didnt give it a shot, but hitting two keys at once on purpose with the same finger is a skill, one that I don't have.  This change maps those symbols so that they work as a combo or layer switch, so getting the layer key in first does it by layer, but pressing them at the same time gives me the combo, kinda feels genius.  We will see how it goes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/zmk-config-42block/commit/48c30d2ee4efcdd08266093b5ce79bba5730e6f0",
      "date_published": "2025-08-29T00:28:21Z",
      "date_modified": "2025-08-29T00:28:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-818/",
      "url": "https://go.waylonwalker.com/thought-818/",
      "title": "💭 Let's Make Sure Github Doesn't Become the only Option - Edward...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.edwardloveall.com/lets-make-sure-github-doesnt-become-the-only-option\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.edwardloveall.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.edwardloveall.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLet\u0026#39;s Make Sure Github Doesn\u0026#39;t Become the only Option - Edward Loveall\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.edwardloveall.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis post is a masterclass in blogging, cross linking, backing up your ideas with posts from other great sources.  I have a week of reading inside this post, and need to come back later when Im not sick.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.edwardloveall.com/lets-make-sure-github-doesnt-become-the-only-option\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLet\u0026#39;s Make Sure Github Doesn\u0026#39;t Become the only Option - Edward Loveall\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.edwardloveall.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis post is a masterclass in blogging, cross linking, backing up your ideas with posts from other great sources.  I have a week of reading inside this post, and need to come back later when Im not sick.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.edwardloveall.com/lets-make-sure-github-doesnt-become-the-only-option",
      "date_published": "2025-08-28T23:45:53Z",
      "date_modified": "2025-08-28T23:45:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "dev",
        "later",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-817/",
      "url": "https://go.waylonwalker.com/thought-817/",
      "title": "💭 This Bothers Me - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"3NFwQIoLFgE\" title=\"This Bothers Me\" playlabel=\"Play: This Bothers Me\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m playing through peak right now with Wyatt and it is a great game, a small wholesome  indiegame that is legit hard, but fun with the simplest concept.  You are a scout who has crashlanded on an island, your goal is to get to the peak with your friends.  You must manage hunger, stamina, weight, health and energy.  You have limited resources and must help everyone to the top, if someone is low on stamina, they are going to need a helping hand or a stonger climber to go up and set pitons and ropes.  Its a fantastic collaborative play game\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/192b267c-f577-4282-9393-1bf74c0b629f.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.wayl.one/api/file/192b267c-f577-4282-9393-1bf74c0b629f.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.wayl.one/api/file/192b267c-f577-4282-9393-1bf74c0b629f.mp4\" type=\"video/mp4\"\u003ePEAK - 2025-08-27 8-49-54 PM.mp4\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003ea short clip of me playing with wyatt, I did not have anything great to add, but this is just a random clip\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"ripped-off\"\u003eRipped off \u003ca href=\"#ripped-off\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt was insta-ripped off by roblox with microtransactions pay to win garbage.  It looks one for one the same damn models and interface, they spared nothing at making it look exactly like the original.  They let you buy a golden apple assuming it gives you crazy stamina to climb with ease, and it costs goddam robux.  As Big A says here theres nothing they can really do, the roblox platform just lets this happen, and if they didn’t they would loose huge revenue because this is so prevelant.  Legal fees would crush this small team that made it.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/bb9c2505-7f67-42f5-8ddd-01b0b2d9d046.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/bb9c2505-7f67-42f5-8ddd-01b0b2d9d046.png\" alt=\"screenshot-2025-08-28T01-44-40-840Z.png\"/ data-glightbox=\"description: screenshot-2025-08-28T01-44-40-840Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"3NFwQIoLFgE\" title=\"This Bothers Me\" playlabel=\"Play: This Bothers Me\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI'm playing through peak right now with Wyatt and it is a great game, a small wholesome  indiegame that is legit hard, but fun with the simplest concept.  You are a scout who has crashlanded on an island, your goal is to get to the peak with your friends.  You must manage hunger, stamina, weight, health and energy.  You have limited resources and must help everyone to the top, if someone is low on stamina, they are going to need a helping hand or a stonger climber to go up and set pitons and ropes.  Its a fantastic collaborative play game\n\n![PEAK - 2025-08-27 8-49-54 PM.mp4](https://dropper.wayl.one/api/file/192b267c-f577-4282-9393-1bf74c0b629f.mp4)\n\n\u003e a short clip of me playing with wyatt, I did not have anything great to add, but this is just a random clip\n\n## Ripped off\n\nIt was insta-ripped off by roblox with microtransactions pay to win garbage.  It looks one for one the same damn models and interface, they spared nothing at making it look exactly like the original.  They let you buy a golden apple assuming it gives you crazy stamina to climb with ease, and it costs goddam robux.  As Big A says here theres nothing they can really do, the roblox platform just lets this happen, and if they didn't they would loose huge revenue because this is so prevelant.  Legal fees would crush this small team that made it.\n\n![screenshot-2025-08-28T01-44-40-840Z.png](https://dropper.wayl.one/api/file/bb9c2505-7f67-42f5-8ddd-01b0b2d9d046.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=3NFwQIoLFgE",
      "date_published": "2025-08-28T01:55:58Z",
      "date_modified": "2025-08-28T01:55:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-816/",
      "url": "https://go.waylonwalker.com/thought-816/",
      "title": "💭 Explore - Forgejo",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://git.dbushell.com/explore/repos\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/assets/img/logo.png\" alt=\"Explore — Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.\" loading=\"lazy\"/ data-glightbox=\"description: Explore — Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExplore\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eForgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eForgejo · git.dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003edamn david has been busy, this is sick seeing all of the repos, I’m ready to jump in!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://git.dbushell.com/explore/repos\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/assets/img/logo.png\" alt=\"Explore — Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExplore\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eForgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eForgejo \u0026middot; git.dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ndamn david has been busy, this is sick seeing all of the repos, I'm ready to jump in!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://git.dbushell.com/explore/repos",
      "date_published": "2025-08-27T20:38:36Z",
      "date_modified": "2025-08-27T20:38:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "self-hosted",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-815/",
      "url": "https://go.waylonwalker.com/thought-815/",
      "title": "💭 Eric: \"This was pushed out with a rus…\" - Mastodon",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://social.ericwbailey.website/@eric/115100947111974331\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/social.ericwbailey.website.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/social.ericwbailey.website.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eEric (@eric@social.ericwbailey.website)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis was pushed out with a rushed security review, a coerced and unwilling engineering team, and in full opposition to our supposed company values. \n\u003cp\u003eIf you don\u0026#39;t want it, tell them. Social media …\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eMastodon · social.ericwbailey.website\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003edamn, M$ really pushing hard on moving github into the ai org.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://social.ericwbailey.website/@eric/115100947111974331\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eEric (@eric@social.ericwbailey.website)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis was pushed out with a rushed security review, a coerced and unwilling engineering team, and in full opposition to our supposed company values. \n\n\nIf you don\u0026#39;t want it, tell them. Social media ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMastodon \u0026middot; social.ericwbailey.website\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ndamn, M$ really pushing hard on moving github into the ai org.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://social.ericwbailey.website/@eric/115100947111974331",
      "date_published": "2025-08-27T20:35:30Z",
      "date_modified": "2025-08-27T20:35:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-814/",
      "url": "https://go.waylonwalker.com/thought-814/",
      "title": "💭 The BIGGEST lie in software development - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"U9eMAiTwMhI\" title=\"The BIGGEST lie in software development\" playlabel=\"Play: The BIGGEST lie in software development\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis man feels sad, he never had a chance to bloom.  He was stuck behind the drudgery of jira tickets.  This is what the consultant driven  agile has got us.  Its ripped out all the thinking and creativity, its left us with moving tickets across the board, not allowed time to run on an idea when we have one.  Not allowed to do extra work or refactoring in a module that we are already in.  pushed to move faster for less.\u003c/p\u003e\n\u003cp\u003eI feel like this mans experience has been quite different from my own and I’m grateful to have some leeway to be creative and do some meaningful work outside the jira board.  I’m grateful to be able to provide a good income for my family without taking on all the risk myself.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"U9eMAiTwMhI\" title=\"The BIGGEST lie in software development\" playlabel=\"Play: The BIGGEST lie in software development\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis man feels sad, he never had a chance to bloom.  He was stuck behind the drudgery of jira tickets.  This is what the consultant driven  agile has got us.  Its ripped out all the thinking and creativity, its left us with moving tickets across the board, not allowed time to run on an idea when we have one.  Not allowed to do extra work or refactoring in a module that we are already in.  pushed to move faster for less.  \n\nI feel like this mans experience has been quite different from my own and I'm grateful to have some leeway to be creative and do some meaningful work outside the jira board.  I'm grateful to be able to provide a good income for my family without taking on all the risk myself.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=U9eMAiTwMhI",
      "date_published": "2025-08-27T20:24:38Z",
      "date_modified": "2025-08-27T20:24:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-813/",
      "url": "https://go.waylonwalker.com/thought-813/",
      "title": "💭 Reflection - AI Work and ADHD",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/reflection-ai-work-and-adhd/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250827125949_5f9ed179.png\" alt=\"Reflection - AI Work and ADHD | Nic Payne — Reflection It\u0026#39;s time to be more devoted to my work... AI has been a cool technology to\nwatch and experience but one thing I\u0026#39;m allowing it to do to me\" loading=\"lazy\"/ data-glightbox=\"description: Reflection - AI Work and ADHD | Nic Payne — Reflection It\u0026#39;s time to be more devoted to my work... AI has been a cool technology to\nwatch and experience but one thing I\u0026#39;m allowing it to do to me\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReflection - AI Work and ADHD | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReflection It\u0026#39;s time to be more devoted to my work... AI has been a cool technology to\nwatch and experience but one thing I\u0026#39;m allowing it to do to me \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCrazy that we wrote such similar posts on the same day independantly, I just wrote \u003ca href=\"/im-out-on-agents/\" class=\"wikilink\" data-title=\"I\u0026#39;m Out On Agents\" data-description=\"Its the year 2025 and we are only a few years into having 6 months to live before ai takes our jobs, and the big push right now is agents, managing agents. I...\" data-date=\"2025-08-27\" data-preview=\"Its the year 2025 and we are only a few years into having 6 months to live before ai takes our jobs, and the big push right now is agents, managing agents. I...\"\u003eI\u0026#39;m Out On Agents\u003c/a\u003e sitting offline in a doctor office.  The two pull out’s are very good,\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“AI is not magic, it’s a headache”.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eBy definition AI is magic to the vast majority of people, but funny how true this is.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“When I finish tasks, I’m not fulfilled… if anything I’m relieved.”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI just wrote something very similar, maybe this feeling can be used for guidance to when to use AI.  When you complete this task will you feel relieved its over?  Is it a chore? or creative work you want to \u003cstrong\u003eaccomplish\u003c/strong\u003e.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/reflection-ai-work-and-adhd/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250827125949_5f9ed179.png\" alt=\"Reflection - AI Work and ADHD | Nic Payne — Reflection It\u0026#39;s time to be more devoted to my work... AI has been a cool technology to\nwatch and experience but one thing I\u0026#39;m allowing it to do to me\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReflection - AI Work and ADHD | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReflection It\u0026#39;s time to be more devoted to my work... AI has been a cool technology to\nwatch and experience but one thing I\u0026#39;m allowing it to do to me \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCrazy that we wrote such similar posts on the same day independantly, I just wrote \u003ca href=\"/im-out-on-agents/\" class=\"wikilink\" data-title=\"I\u0026#39;m Out On Agents\" data-description=\"Its the year 2025 and we are only a few years into having 6 months to live before ai takes our jobs, and the big push right now is agents, managing agents. I...\" data-date=\"2025-08-27\"\u003eI\u0026#39;m Out On Agents\u003c/a\u003e sitting offline in a doctor office.  The two pull out's are very good, \n\n\u003e \"AI is not magic, it's a headache\".  \n\nBy definition AI is magic to the vast majority of people, but funny how true this is.  \n\n\u003e \"When I finish tasks, I'm not fulfilled... if anything I'm relieved.\"\n\nI just wrote something very similar, maybe this feeling can be used for guidance to when to use AI.  When you complete this task will you feel relieved its over?  Is it a chore? or creative work you want to **accomplish**.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/reflection-ai-work-and-adhd/",
      "date_published": "2025-08-27T20:15:48Z",
      "date_modified": "2025-08-27T20:15:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/chrisbuilds-terminaltexteffects/",
      "url": "https://go.waylonwalker.com/chrisbuilds-terminaltexteffects/",
      "title": "⭐ ChrisBuilds terminaltexteffects",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/ChrisBuilds\" 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\"\u003eChrisBuilds’s\u003c/a\u003e project \u003ca href=\"https://github.com/ChrisBuilds/terminaltexteffects\" 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\"\u003eterminaltexteffects\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTerminalTextEffects (TTE) is a terminal visual effects engine, application, and Python library.\u003c/p\u003e\n",
      "content_text": "\nI like [ChrisBuilds's](https://github.com/ChrisBuilds) project [terminaltexteffects](https://github.com/ChrisBuilds/terminaltexteffects).\n\nTerminalTextEffects (TTE) is a terminal visual effects engine, application, and Python library.\n",
      "summary": "I like ChrisBuilds's project terminaltexteffects.",
      "date_published": "2025-08-26T19:38:14Z",
      "date_modified": "2025-08-26T19:38:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/miguelgrinberg-python-socketio/",
      "url": "https://go.waylonwalker.com/miguelgrinberg-python-socketio/",
      "title": "⭐ miguelgrinberg python-socketio",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/miguelgrinberg/python-socketio\" 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\"\u003epython-socketio\u003c/a\u003e by \u003ca href=\"https://github.com/miguelgrinberg\" 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\"\u003emiguelgrinberg\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ePython Socket.IO server and client\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [python-socketio](https://github.com/miguelgrinberg/python-socketio) by [miguelgrinberg](https://github.com/miguelgrinberg), and it's truly impressive.\n\nPython Socket.IO server and client\n",
      "summary": "I recently discovered python-socketio by miguelgrinberg, and it's truly impressive.",
      "date_published": "2025-08-26T13:07:08Z",
      "date_modified": "2025-08-26T13:07:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-811/",
      "url": "https://go.waylonwalker.com/thought-811/",
      "title": "💭 GitHub - cortesi/modd: A flexible developer tool that runs pro...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/cortesi/modd\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/2ec9ea7087c2cb371dd4b67e9219ad1f57d2b5be85480d74e358169ca43fbd8a/cortesi/modd\" alt=\"GitHub - cortesi/modd: A flexible developer tool that runs processes and responds to filesystem changes — A flexible developer tool that runs processes and responds to filesystem changes - cortesi/modd\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - cortesi/modd: A flexible developer tool that runs processes and responds to filesystem changes — A flexible developer tool that runs processes and responds to filesystem changes - cortesi/modd\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - cortesi/modd: A flexible developer tool that runs processes and responds to filesystem changes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA flexible developer tool that runs processes and responds to filesystem changes - cortesi/modd\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGave modd a try today, and I like it, its something I am going to consider slotting right into my \u003ca href=\"https://github.com/casey/just\" 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\"\u003ejustfiles\u003c/a\u003e.  Gave it a try and it seems to work really well out of the box and easy to configure.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/cortesi/modd\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/2ec9ea7087c2cb371dd4b67e9219ad1f57d2b5be85480d74e358169ca43fbd8a/cortesi/modd\" alt=\"GitHub - cortesi/modd: A flexible developer tool that runs processes and responds to filesystem changes — A flexible developer tool that runs processes and responds to filesystem changes - cortesi/modd\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - cortesi/modd: A flexible developer tool that runs processes and responds to filesystem changes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA flexible developer tool that runs processes and responds to filesystem changes - cortesi/modd\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGave modd a try today, and I like it, its something I am going to consider slotting right into my [justfiles](https://github.com/casey/just).  Gave it a try and it seems to work really well out of the box and easy to configure.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/cortesi/modd",
      "date_published": "2025-08-25T15:40:39Z",
      "date_modified": "2025-08-25T15:40:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-810/",
      "url": "https://go.waylonwalker.com/thought-810/",
      "title": "💭 combos only on default layer · WaylonWalker/zmk-config-42block...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/2398fc73b247b9f491e14b605fef1c6910939298\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/97de1a8f38e0fae5e170c4a79790a1fdfac2ce59fecdbf55faa8ade186c75e66/WaylonWalker/zmk-config-42block/commit/2398fc73b247b9f491e14b605fef1c6910939298\" alt=\"combos only on default layer · WaylonWalker/zmk-config-42block@2398fc7 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: combos only on default layer · WaylonWalker/zmk-config-42block@2398fc7 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecombos only on default layer · WaylonWalker/zmk-config-42block@2398fc7\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFighting some parens in hollow knight lead me to subtle little pauses when playing, I’m swapping combos to only work on the default layer, except for grave, I must have it for minecraft.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/2398fc73b247b9f491e14b605fef1c6910939298\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/97de1a8f38e0fae5e170c4a79790a1fdfac2ce59fecdbf55faa8ade186c75e66/WaylonWalker/zmk-config-42block/commit/2398fc73b247b9f491e14b605fef1c6910939298\" alt=\"combos only on default layer · WaylonWalker/zmk-config-42block@2398fc7 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecombos only on default layer · WaylonWalker/zmk-config-42block@2398fc7\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFighting some parens in hollow knight lead me to subtle little pauses when playing, I'm swapping combos to only work on the default layer, except for grave, I must have it for minecraft.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/zmk-config-42block/commit/2398fc73b247b9f491e14b605fef1c6910939298",
      "date_published": "2025-08-25T12:58:37Z",
      "date_modified": "2025-08-25T12:58:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/modd/",
      "url": "https://go.waylonwalker.com/modd/",
      "title": "modd",
      "content_html": "\u003cp\u003eToday I gave \u003ca href=\"https://github.com/cortesi/modd\" 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\"\u003emodd\u003c/a\u003e a try, and it seems like a\ngood file watcher executor.  I tried using libnotify to send desktop\nnotifications, but all I got was modd, I might not have notifications setup\nright on the awesomewm machine.\u003c/p\u003e\n\u003cp\u003econfig goes in \u003ccode\u003emodd.conf\u003c/code\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-config\"\u003e**/*.py {\n  # check formatting via ruff\n  prep: ruff format --check .\n\n  # check docstring formatting\n  prep: pydocstyle .\n  #\n  # # check type hints via ty\n  prep: ty check .\n  #\n  # # run linter via ruff\n  prep: ruff check .\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eI installed it using installer from jpillora, pulling pre-built binaries right\nout of the github repo.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.jpillora.com/cortesi/modd \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen you can install it, and on file change it will run the commands you\nconfigured.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emodd\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I gave [modd](https://github.com/cortesi/modd) a try, and it seems like a\ngood file watcher executor.  I tried using libnotify to send desktop\nnotifications, but all I got was modd, I might not have notifications setup\nright on the awesomewm machine.\n\nconfig goes in `modd.conf`\n\n``` config\n**/*.py {\n  # check formatting via ruff\n  prep: ruff format --check .\n\n  # check docstring formatting\n  prep: pydocstyle .\n  #\n  # # check type hints via ty\n  prep: ty check .\n  #\n  # # run linter via ruff\n  prep: ruff check .\n}\n```\n\nI installed it using installer from jpillora, pulling pre-built binaries right\nout of the github repo.\n\n``` bash\ncurl https://i.jpillora.com/cortesi/modd | bash\n```\n\nThen you can install it, and on file change it will run the commands you\nconfigured.\n\n``` bash\nmodd\n```\n",
      "summary": "Today I gave modd a try, and it seems like a good file watcher executor. I tried using libnotify to send desktop notifications, but all I got was modd, I...",
      "date_published": "2025-08-25T10:48:01Z",
      "date_modified": "2025-08-25T10:48:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-809/",
      "url": "https://go.waylonwalker.com/thought-809/",
      "title": "💭 The Death of the User Interface",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/0xs34n/a5738db1cc24495e69b6d6c08a451890\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gist.github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gist.github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eTHE_DEATH_OF_THE_USER_INTERFACE.md\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003emarkdown\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# The Death of the User Interface\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003e**TL;DR:** We\u0026#39;re witnessing the end of graphical user interfaces. AI agents like Claude Code are eliminating the need for windows, menus, and clicks, replacing them with natural language. The computer is finally learning to speak human, not the other way around.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🔮 A Personal Revelation\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLast week, I realized something profound: \u003cspan class=\"gs\"\u003e**I haven\u0026#39;t opened Finder in months.**\u003c/span\u003e Not once.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWhere I once clicked through nested folders, dragged and dropped files, and navigated hierarchical menus, I now simply tell Claude Code exactly what I need:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e _\u0026#34;Find all the test files modified in the last week\u0026#34;_\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e _\u0026#34;Move the old backups to archive\u0026#34;_\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe commands execute instantly, precisely, without me ever seeing a window, icon, or folder.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eThis isn\u0026#39;t just about convenience. It\u0026#39;s a fundamental shift in how humans interact with computers, and it signals the beginning of the end for user interfaces as we know them.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🚴 → 🚀 The Bicycle That Became a Teleporter\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIn 1990, Steve Jobs famously described computers as \u0026#34;bicycles for the mind,\u0026#34; drawing from a Scientific American study showing that humans on bicycles were the most efficient locomotors on Earth. The metaphor was perfect for its time: computers amplified human cognitive abilities just as bicycles amplified our physical capabilities.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBut bicycles still require you to:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Pedal** the mechanism\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Steer** the direction\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Navigate** the terrain\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Learn** the balance\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTraditional user interfaces work the same way. They\u0026#39;re tools that amplify our abilities, but only after we learn their language, their layouts, their logic.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003e**What we have now with AI agents isn\u0026#39;t a bicycle anymore. It\u0026#39;s a teleporter.** You simply state your destination, and you arrive.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 📜 From Xerox PARC to Natural Language: A 50-Year Arc\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### The Timeline of Interface Evolution\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1964**\u003c/span\u003e → Douglas Engelbart invents the computer mouse at Stanford Research Institute\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1973**\u003c/span\u003e → Xerox PARC develops the Alto, the first computer with a GUI\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1979**\u003c/span\u003e → Steve Jobs sees the Alto, immediately grasps its revolutionary potential\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1984**\u003c/span\u003e → Macintosh launches, bringing GUI to the masses\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**2024**\u003c/span\u003e → AI agents begin replacing graphical interfaces entirely\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThat language dominated for five decades. Windows, Mac OS, and even modern web applications all speak variations of it: \u003cspan class=\"ge\"\u003e_point, click, drag, drop, menu, submenu, dialog box, button._\u003c/span\u003e We became so fluent in this language that we forgot it was a language at all.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### The Abstraction Layer Pattern\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEvery abstraction layer in computing eventually gets replaced by a higher-level one:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| \u003cspan class=\"gs\"\u003e**Era**\u003c/span\u003e | \u003cspan class=\"gs\"\u003e**From**\u003c/span\u003e            | \u003cspan class=\"gs\"\u003e**To**\u003c/span\u003e                             |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| ------- | ------------------- | ---------------------------------- |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 1950s   | Machine code        | → Assembly language                |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 1960s   | Assembly            | → High-level programming languages |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 1980s   | Command line        | → Graphical user interfaces        |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 2000s   | Native apps         | → Web applications                 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 2020s   | \u003cspan class=\"gs\"\u003e**User interfaces**\u003c/span\u003e | \u003cspan class=\"ge\"\u003e**\u003c/span\u003e→ Conversational AI agents**     |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eEach transition follows the same pattern: what once required specialized knowledge becomes accessible through more natural, intuitive interaction.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 👻 The Invisible Operating System\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTraditional operating systems: Windows, macOS, Linux, are abstractions over hardware. Web applications are abstractions over REST APIs. Both require user interfaces because they need to translate between human intent and machine execution.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**AI agents represent something fundamentally different:**\u003c/span\u003e they\u0026#39;re abstractions that understand human intent directly. No translation required.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### Consider the Mental Journey of a Simple Task\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e🖱️ Traditional UI Approach\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e Open Finder/Explorer \u003cspan class=\"ge\"\u003e_(remember where it is)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e Navigate to directory \u003cspan class=\"ge\"\u003e_(remember the path)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e3.\u003c/span\u003e Scan through files \u003cspan class=\"ge\"\u003e_(parse visual information)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e4.\u003c/span\u003e Select multiple files \u003cspan class=\"ge\"\u003e_(remember shortcuts)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e5.\u003c/span\u003e Right-click for menu \u003cspan class=\"ge\"\u003e_(know this exists)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e6.\u003c/span\u003e Choose \u0026#34;Move to...\u0026#34; \u003cspan class=\"ge\"\u003e_(understand terminology)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e7.\u003c/span\u003e Navigate to destination \u003cspan class=\"ge\"\u003e_(remember another path)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e8.\u003c/span\u003e Confirm operation \u003cspan class=\"ge\"\u003e_(hope you got it right)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e🗣️ AI Agent Approach\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e \u0026#34;Move all PDF files from Downloads to Documents/Reports\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**Done.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eThe difference isn\u0026#39;t just efficiency, it\u0026#39;s cognitive load. With traditional interfaces, you\u0026#39;re translating your intent into the computer\u0026#39;s language. With AI agents, the computer learns your language instead.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🧠 The Mental Load Revolution\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEvery interface element, every button, menu, icon, and widget, is a \u003cspan class=\"gs\"\u003e**tiny cognitive tax**\u003c/span\u003e. Even the most intuitive interface requires you to:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Understand its visual language\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Remember its organizational structure\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Learn its interaction patterns\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Maintain mental models of its state\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThis is what UX designers call \u003cspan class=\"ge\"\u003e**\u003c/span\u003e\u0026#34;extraneous cognitive load\u0026#34;**. Mental effort spent on using the tool rather than accomplishing the task.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eWhen you tell Claude Code to \u0026#34;set up a new Python project with pytest and black pre-configured,\u0026#34; you\u0026#39;re expressing pure intent. The mental energy you would have spent on navigation can be redirected to actual problem-solving.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## ⚡ The Present: Early Adopters and Edge Cases\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWe\u0026#39;re living through the transition right now.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### What\u0026#39;s Happening in 2024\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **AIOS** → Embedding LLMs directly into operating systems\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Claude Code** → Replacing entire categories of developer tools\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Cursor \u0026amp; Copilot** → Making IDEs conversational\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Warp Agent Mode** → LLMs in the terminal for multi-step workflows\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### What I No Longer Do\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eI see it in my own work every day. I no longer:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Browse through file explorers  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Click through git GUIs  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Navigate package manager interfaces  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Hunt through documentation sites  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Configure tools through preference panes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstead, I describe what I want, and it happens. \u003cspan class=\"gs\"\u003e**The interface hasn\u0026#39;t been simplified, it\u0026#39;s been eliminated.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🍎 The Future Steve Jobs Glimpsed\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003e\u0026#34;Ultimately computers are going to be a tool for communication. Not computation, not productivity. Communication.\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u003c/span\u003e\u003cspan class=\"ge\"\u003e\u0026gt; — Steve Jobs, 1983 International Design Conference\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAt that conference in Aspen, a 28-year-old Jobs made predictions that seemed like science fiction:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Portable computers with wireless connections\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Instant access to remote databases\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Devices as primary means of communication\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHe was right about all of it, but even his vision was constrained by the paradigm of his time. He imagined better interfaces, more intuitive interactions, simpler designs.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**He couldn\u0026#39;t imagine no interface at all.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eYet in that quote above, Jobs understood something fundamental: the real revolution would come when computers could understand us as naturally as we understand each other.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eThat future is arriving. The question isn\u0026#39;t whether AI will replace user interfaces, but how quickly and how completely.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🔄 The Last Interface\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThere\u0026#39;s an irony in writing about the death of user interfaces, or rather, there \u003cspan class=\"gs\"\u003e**was**\u003c/span\u003e. This article itself is proof of the transition: generated through conversation with Claude Code, shaped by human intent rather than human interface manipulation. I provided the ideas and direction; the AI handled the execution. \u003cspan class=\"gs\"\u003e**The future isn\u0026#39;t coming, it\u0026#39;s already here, manifesting through the very words you\u0026#39;re reading.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSoon, articles like this won\u0026#39;t be \u0026#34;written\u0026#34; in the traditional sense. They\u0026#39;ll be conversed into existence, with AI agents handling not just the typing but the research, fact-checking, formatting, and publishing. The tool will disappear into the task.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### The Holdouts and the Inevitable\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSome will mourn this loss. There\u0026#39;s something satisfying about direct manipulation, about seeing and controlling every step. Just as some still prefer command lines to GUIs, some will always prefer clicking to conversing.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBut for most of us, the appeal of \u003cspan class=\"gs\"\u003e**zero cognitive load**\u003c/span\u003e will be irresistible.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eWhy learn an interface when you can just say what you want?  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eWhy navigate when you can simply arrive?\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🎯 Conclusion: After the Interface\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWe stand at an inflection point. For fifty years, ever since Xerox PARC invented the GUI, we\u0026#39;ve been refining the same basic paradigm: \u003cspan class=\"gs\"\u003e**humans learning to speak computer**\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNow, \u003cspan class=\"gs\"\u003e**computers are learning to speak human**\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe death of the user interface doesn\u0026#39;t mean the death of design or user experience. If anything, it makes them more important. When the interface disappears, what remains is pure interaction design: understanding human intent, anticipating needs, handling edge cases gracefully.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe challenge shifts from:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ❌ \u003cspan class=\"ge\"\u003e_\u0026#34;How do we make this button more obvious?\u0026#34;_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✅ \u003cspan class=\"ge\"\u003e**\u003c/span\u003e\u0026#34;How do we understand what the user really wants?\u0026#34;**\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eSteve Jobs gave us bicycles for the mind.  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eAI agents are giving us something else entirely: **minds that understand our minds.**  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eNo pedaling required.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**The user interface is dying, and that\u0026#39;s the most user-friendly thing that could possibly happen.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e_What do you think? Are we witnessing the end of user interfaces, or just another evolution? How has AI changed your own relationship with traditional software interfaces?_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is an insane level of agentic llm use, the author claims to not even use his filesystem anymore, its too cumbersome to find where downloads and documents are and way too easy to ask an agent to move all pdf’s from downloads to documents.\u003c/p\u003e\n\u003cp\u003eThis scares me on multiple levels, theres the epidemic of ai datacenters and ai companies burning cash, burning through gpu’s and api calls to a giant data center just to move files sounds absolutely insane to me.\u003c/p\u003e\n\u003cp\u003eThen there is the level of accuracy.  There’s a level of interpretation that happens with english that does not happen in code, code generally does what it does repeatably.  The examples of “Move old backups to archive” is so open for interpretation that its ready to ruin your day, which backup, which archive, how old?  Dude is ready to loose his files.\u003c/p\u003e\n\u003cp\u003eLast is privacy, there is going to be a privacy epidemic that is going to pwn so many people giving these things full access to email, chat, ALL of YOUR FILES, and computer, your whole network.\u003c/p\u003e\n\u003cp\u003eLook I get it this is where things are going, but dude is early, like too early.  These things need to become far more accurate, less power hungry, and run locally before I give up my whole filesystem.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/0xs34n/a5738db1cc24495e69b6d6c08a451890\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTHE_DEATH_OF_THE_USER_INTERFACE.md\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003emarkdown\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# The Death of the User Interface\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003e**TL;DR:** We\u0026#39;re witnessing the end of graphical user interfaces. AI agents like Claude Code are eliminating the need for windows, menus, and clicks, replacing them with natural language. The computer is finally learning to speak human, not the other way around.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🔮 A Personal Revelation\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLast week, I realized something profound: \u003cspan class=\"gs\"\u003e**I haven\u0026#39;t opened Finder in months.**\u003c/span\u003e Not once.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWhere I once clicked through nested folders, dragged and dropped files, and navigated hierarchical menus, I now simply tell Claude Code exactly what I need:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e _\u0026#34;Find all the test files modified in the last week\u0026#34;_\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e _\u0026#34;Move the old backups to archive\u0026#34;_\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe commands execute instantly, precisely, without me ever seeing a window, icon, or folder.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eThis isn\u0026#39;t just about convenience. It\u0026#39;s a fundamental shift in how humans interact with computers, and it signals the beginning of the end for user interfaces as we know them.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🚴 → 🚀 The Bicycle That Became a Teleporter\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIn 1990, Steve Jobs famously described computers as \u0026#34;bicycles for the mind,\u0026#34; drawing from a Scientific American study showing that humans on bicycles were the most efficient locomotors on Earth. The metaphor was perfect for its time: computers amplified human cognitive abilities just as bicycles amplified our physical capabilities.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBut bicycles still require you to:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Pedal** the mechanism\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Steer** the direction\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Navigate** the terrain\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Learn** the balance\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTraditional user interfaces work the same way. They\u0026#39;re tools that amplify our abilities, but only after we learn their language, their layouts, their logic.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003e**What we have now with AI agents isn\u0026#39;t a bicycle anymore. It\u0026#39;s a teleporter.** You simply state your destination, and you arrive.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 📜 From Xerox PARC to Natural Language: A 50-Year Arc\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### The Timeline of Interface Evolution\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1964**\u003c/span\u003e → Douglas Engelbart invents the computer mouse at Stanford Research Institute\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1973**\u003c/span\u003e → Xerox PARC develops the Alto, the first computer with a GUI\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1979**\u003c/span\u003e → Steve Jobs sees the Alto, immediately grasps its revolutionary potential\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**1984**\u003c/span\u003e → Macintosh launches, bringing GUI to the masses\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**2024**\u003c/span\u003e → AI agents begin replacing graphical interfaces entirely\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThat language dominated for five decades. Windows, Mac OS, and even modern web applications all speak variations of it: \u003cspan class=\"ge\"\u003e_point, click, drag, drop, menu, submenu, dialog box, button._\u003c/span\u003e We became so fluent in this language that we forgot it was a language at all.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### The Abstraction Layer Pattern\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEvery abstraction layer in computing eventually gets replaced by a higher-level one:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| \u003cspan class=\"gs\"\u003e**Era**\u003c/span\u003e | \u003cspan class=\"gs\"\u003e**From**\u003c/span\u003e            | \u003cspan class=\"gs\"\u003e**To**\u003c/span\u003e                             |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| ------- | ------------------- | ---------------------------------- |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 1950s   | Machine code        | → Assembly language                |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 1960s   | Assembly            | → High-level programming languages |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 1980s   | Command line        | → Graphical user interfaces        |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 2000s   | Native apps         | → Web applications                 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e| 2020s   | \u003cspan class=\"gs\"\u003e**User interfaces**\u003c/span\u003e | \u003cspan class=\"ge\"\u003e**\u003c/span\u003e→ Conversational AI agents**     |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eEach transition follows the same pattern: what once required specialized knowledge becomes accessible through more natural, intuitive interaction.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 👻 The Invisible Operating System\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTraditional operating systems: Windows, macOS, Linux, are abstractions over hardware. Web applications are abstractions over REST APIs. Both require user interfaces because they need to translate between human intent and machine execution.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**AI agents represent something fundamentally different:**\u003c/span\u003e they\u0026#39;re abstractions that understand human intent directly. No translation required.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### Consider the Mental Journey of a Simple Task\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e🖱️ Traditional UI Approach\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e Open Finder/Explorer \u003cspan class=\"ge\"\u003e_(remember where it is)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e Navigate to directory \u003cspan class=\"ge\"\u003e_(remember the path)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e3.\u003c/span\u003e Scan through files \u003cspan class=\"ge\"\u003e_(parse visual information)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e4.\u003c/span\u003e Select multiple files \u003cspan class=\"ge\"\u003e_(remember shortcuts)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e5.\u003c/span\u003e Right-click for menu \u003cspan class=\"ge\"\u003e_(know this exists)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e6.\u003c/span\u003e Choose \u0026#34;Move to...\u0026#34; \u003cspan class=\"ge\"\u003e_(understand terminology)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e7.\u003c/span\u003e Navigate to destination \u003cspan class=\"ge\"\u003e_(remember another path)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e8.\u003c/span\u003e Confirm operation \u003cspan class=\"ge\"\u003e_(hope you got it right)_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e🗣️ AI Agent Approach\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e \u0026#34;Move all PDF files from Downloads to Documents/Reports\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**Done.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eThe difference isn\u0026#39;t just efficiency, it\u0026#39;s cognitive load. With traditional interfaces, you\u0026#39;re translating your intent into the computer\u0026#39;s language. With AI agents, the computer learns your language instead.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🧠 The Mental Load Revolution\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEvery interface element, every button, menu, icon, and widget, is a \u003cspan class=\"gs\"\u003e**tiny cognitive tax**\u003c/span\u003e. Even the most intuitive interface requires you to:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Understand its visual language\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Remember its organizational structure\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Learn its interaction patterns\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✓ Maintain mental models of its state\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThis is what UX designers call \u003cspan class=\"ge\"\u003e**\u003c/span\u003e\u0026#34;extraneous cognitive load\u0026#34;**. Mental effort spent on using the tool rather than accomplishing the task.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eWhen you tell Claude Code to \u0026#34;set up a new Python project with pytest and black pre-configured,\u0026#34; you\u0026#39;re expressing pure intent. The mental energy you would have spent on navigation can be redirected to actual problem-solving.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## ⚡ The Present: Early Adopters and Edge Cases\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWe\u0026#39;re living through the transition right now.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### What\u0026#39;s Happening in 2024\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **AIOS** → Embedding LLMs directly into operating systems\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Claude Code** → Replacing entire categories of developer tools\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Cursor \u0026amp; Copilot** → Making IDEs conversational\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e **Warp Agent Mode** → LLMs in the terminal for multi-step workflows\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### What I No Longer Do\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eI see it in my own work every day. I no longer:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Browse through file explorers  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Click through git GUIs  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Navigate package manager interfaces  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Hunt through documentation sites  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❌ Configure tools through preference panes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstead, I describe what I want, and it happens. \u003cspan class=\"gs\"\u003e**The interface hasn\u0026#39;t been simplified, it\u0026#39;s been eliminated.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🍎 The Future Steve Jobs Glimpsed\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003e\u0026#34;Ultimately computers are going to be a tool for communication. Not computation, not productivity. Communication.\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u003c/span\u003e\u003cspan class=\"ge\"\u003e\u0026gt; — Steve Jobs, 1983 International Design Conference\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAt that conference in Aspen, a 28-year-old Jobs made predictions that seemed like science fiction:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Portable computers with wireless connections\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Instant access to remote databases\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Devices as primary means of communication\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHe was right about all of it, but even his vision was constrained by the paradigm of his time. He imagined better interfaces, more intuitive interactions, simpler designs.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**He couldn\u0026#39;t imagine no interface at all.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eYet in that quote above, Jobs understood something fundamental: the real revolution would come when computers could understand us as naturally as we understand each other.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eThat future is arriving. The question isn\u0026#39;t whether AI will replace user interfaces, but how quickly and how completely.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🔄 The Last Interface\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThere\u0026#39;s an irony in writing about the death of user interfaces, or rather, there \u003cspan class=\"gs\"\u003e**was**\u003c/span\u003e. This article itself is proof of the transition: generated through conversation with Claude Code, shaped by human intent rather than human interface manipulation. I provided the ideas and direction; the AI handled the execution. \u003cspan class=\"gs\"\u003e**The future isn\u0026#39;t coming, it\u0026#39;s already here, manifesting through the very words you\u0026#39;re reading.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSoon, articles like this won\u0026#39;t be \u0026#34;written\u0026#34; in the traditional sense. They\u0026#39;ll be conversed into existence, with AI agents handling not just the typing but the research, fact-checking, formatting, and publishing. The tool will disappear into the task.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e### The Holdouts and the Inevitable\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSome will mourn this loss. There\u0026#39;s something satisfying about direct manipulation, about seeing and controlling every step. Just as some still prefer command lines to GUIs, some will always prefer clicking to conversing.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBut for most of us, the appeal of \u003cspan class=\"gs\"\u003e**zero cognitive load**\u003c/span\u003e will be irresistible.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eWhy learn an interface when you can just say what you want?  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eWhy navigate when you can simply arrive?\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 🎯 Conclusion: After the Interface\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWe stand at an inflection point. For fifty years, ever since Xerox PARC invented the GUI, we\u0026#39;ve been refining the same basic paradigm: \u003cspan class=\"gs\"\u003e**humans learning to speak computer**\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNow, \u003cspan class=\"gs\"\u003e**computers are learning to speak human**\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe death of the user interface doesn\u0026#39;t mean the death of design or user experience. If anything, it makes them more important. When the interface disappears, what remains is pure interaction design: understanding human intent, anticipating needs, handling edge cases gracefully.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe challenge shifts from:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ❌ \u003cspan class=\"ge\"\u003e_\u0026#34;How do we make this button more obvious?\u0026#34;_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e ✅ \u003cspan class=\"ge\"\u003e**\u003c/span\u003e\u0026#34;How do we understand what the user really wants?\u0026#34;**\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eSteve Jobs gave us bicycles for the mind.  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eAI agents are giving us something else entirely: **minds that understand our minds.**  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e\u0026gt; \u003c/span\u003e\u003cspan class=\"ge\"\u003eNo pedaling required.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gs\"\u003e**The user interface is dying, and that\u0026#39;s the most user-friendly thing that could possibly happen.**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ge\"\u003e_What do you think? Are we witnessing the end of user interfaces, or just another evolution? How has AI changed your own relationship with traditional software interfaces?_\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is an insane level of agentic llm use, the author claims to not even use his filesystem anymore, its too cumbersome to find where downloads and documents are and way too easy to ask an agent to move all pdf's from downloads to documents.\n\nThis scares me on multiple levels, theres the epidemic of ai datacenters and ai companies burning cash, burning through gpu's and api calls to a giant data center just to move files sounds absolutely insane to me.\n\nThen there is the level of accuracy.  There's a level of interpretation that happens with english that does not happen in code, code generally does what it does repeatably.  The examples of \"Move old backups to archive\" is so open for interpretation that its ready to ruin your day, which backup, which archive, how old?  Dude is ready to loose his files.\n\nLast is privacy, there is going to be a privacy epidemic that is going to pwn so many people giving these things full access to email, chat, ALL of YOUR FILES, and computer, your whole network.\n\nLook I get it this is where things are going, but dude is early, like too early.  These things need to become far more accurate, less power hungry, and run locally before I give up my whole filesystem.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gist.github.com/0xs34n/a5738db1cc24495e69b6d6c08a451890",
      "date_published": "2025-08-25T01:48:19Z",
      "date_modified": "2025-08-25T01:48:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-808/",
      "url": "https://go.waylonwalker.com/thought-808/",
      "title": "💭 Why everyone is quitting social media - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zN-rElTzR_4\" title=\"Why everyone is quitting social media\" playlabel=\"Play: Why everyone is quitting social media\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn, social media is at an all time low.  I’ve felt all of these issues and when I got a new phone I started fresh, I didn’t install one social media app.  Luckily Youtube has remained solid for me.  Yes shorts are a bit less what I came for and more addicting content they \u003cem\u003ehad\u003c/em\u003e to do in order to keep up.  There are some legit good commedians, a bit of good knowledge and a bunch of trash that is hard to look away from on shorts.  I still find myself able to find content I enjoy and signed up for on YouTube.  I feel like I get a one way relationship with someone similar to a TV show or news anchor of old media.\u003c/p\u003e\n\u003cp\u003eSocial Media has morphed from follows likes and similar, to viral posts by creators I don’t recognize.  posting and immediately getting like by two \u003cstrong\u003ehot\u003c/strong\u003e women with accounts created this week.  The rest of the real creators left on there are stuck trying to keep up, echo viral trends, trying to keep up the content treadmill.   A few come through, but most feel somewhat forced.  A lot of it is ai generated, and whats not mostly doesn’t feel that human anyways.\u003c/p\u003e\n\u003cp\u003eThe people on here seem to really tie the internet to social media and are ready to quit the internet.  I think there is more to the internet, we can find each other, but setting up rss feeds, following others, and scrolling their own website lacks that dopamine hit social media has right now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zN-rElTzR_4\" title=\"Why everyone is quitting social media\" playlabel=\"Play: Why everyone is quitting social media\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn, social media is at an all time low.  I've felt all of these issues and when I got a new phone I started fresh, I didn't install one social media app.  Luckily Youtube has remained solid for me.  Yes shorts are a bit less what I came for and more addicting content they _had_ to do in order to keep up.  There are some legit good commedians, a bit of good knowledge and a bunch of trash that is hard to look away from on shorts.  I still find myself able to find content I enjoy and signed up for on YouTube.  I feel like I get a one way relationship with someone similar to a TV show or news anchor of old media.\n\nSocial Media has morphed from follows likes and similar, to viral posts by creators I don't recognize.  posting and immediately getting like by two **hot** women with accounts created this week.  The rest of the real creators left on there are stuck trying to keep up, echo viral trends, trying to keep up the content treadmill.   A few come through, but most feel somewhat forced.  A lot of it is ai generated, and whats not mostly doesn't feel that human anyways.\n\nThe people on here seem to really tie the internet to social media and are ready to quit the internet.  I think there is more to the internet, we can find each other, but setting up rss feeds, following others, and scrolling their own website lacks that dopamine hit social media has right now.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=zN-rElTzR_4",
      "date_published": "2025-08-25T01:36:35Z",
      "date_modified": "2025-08-25T01:36:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bash-timestamp/",
      "url": "https://go.waylonwalker.com/bash-timestamp/",
      "title": "bash timestamp",
      "content_html": "\u003cp\u003eToday I needed to make a backup of some config.  I wanted to add a timestamp so\nthat I knew when the backup was made.  This would make unique backups easy, and\nI could tell when they were made.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp configfile configfile.backup.\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate %s\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you want to decrypt the timestamp into something more human readable.  You\ncan list backup files, strip out the timestamp, and then convert it to a human\nreadable date.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/bin/ls \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep backup \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/configfile.backup.//\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e xargs -I \u003cspan class=\"o\"\u003e{}\u003c/span\u003e date -d @\u003cspan class=\"o\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eor just throw it to the date command by hand.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate -d @1755895402\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I needed to make a backup of some config.  I wanted to add a timestamp so\nthat I knew when the backup was made.  This would make unique backups easy, and\nI could tell when they were made.\n\n``` bash\ncp configfile configfile.backup.$(date %s)\n```\n\nIf you want to decrypt the timestamp into something more human readable.  You\ncan list backup files, strip out the timestamp, and then convert it to a human\nreadable date.\n\n``` bash\n/bin/ls | grep backup | sed 's/configfile.backup.//' | xargs -I {} date -d @{}\n```\n\nor just throw it to the date command by hand.\n\n``` bash\ndate -d @1755895402\n```\n\n",
      "summary": "Today I needed to make a backup of some config. I wanted to add a timestamp so that I knew when the backup was made. This would make unique backups easy, and...",
      "date_published": "2025-08-22T15:35:36Z",
      "date_modified": "2025-08-22T15:35:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-807/",
      "url": "https://go.waylonwalker.com/thought-807/",
      "title": "💭 Search Needs a Human Solution: A Manifesto",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simplecto.com/search-needs-a-human-solution-a-manifesto/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://simplecto.com/content/images/2024/11/1732113326995.png\" alt=\"Search Needs a Human Solution: A Manifesto — When was the last time you felt genuine discovery on the internet?\n\u0026lt;p\u0026gt;Not algorithmic recommendations. Not SEO-optimized listicles.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;I mean real, surprising, meaningful discovery.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;Search is broken but not in the way tech companies think.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;We don\u0026#39;t need better algorithms or bigger indexes.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;We don\u0026#39;t need more compute or scale.\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Search Needs a Human Solution: A Manifesto — When was the last time you felt genuine discovery on the internet?\n\u0026lt;p\u0026gt;Not algorithmic recommendations. Not SEO-optimized listicles.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;I mean real, surprising, meaningful discovery.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;Search is broken but not in the way tech companies think.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;We don\u0026#39;t need better algorithms or bigger indexes.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;We don\u0026#39;t need more compute or scale.\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eSearch Needs a Human Solution: A Manifesto\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eWhen was the last time you felt genuine discovery on the internet?\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eNot algorithmic recommendations. Not SEO-optimized listicles.\u003c/p\u003e\n\u003cp\u003eI mean real, surprising, meaningful discovery.\u003c/p\u003e\n\u003cp\u003eSearch is brok…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eCandid and colorful thoughts on enterprise readiness · simplecto.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThe hype bro influencer culture is over, we are fucking burnt the fuck out.  I’m done scrolling through \u003ca href=\"/ai-slop/\" class=\"glossary-term\" title=\"AI slop is unwanted AI content, generally shared by someone who did not review the output and is considered highly offensive and rude.\"\u003eai slop\u003c/a\u003e on social media, I like in a few times a week with hopes to see some friends at the top of my feed and jump out.  The Doom and Gloom of politics, everyone has a side that will bring glory and the other side will start an apocalypse did me in, ai generated bs is just driving those platforms further into the ground, I’m tired and done.\u003c/p\u003e\n\u003cp\u003eI’m starting to lean into RSS, I hope for projects like \u003ca href=\"https://simplecto.com/author/sam/\"\u003eSam\u003c/a\u003e mentions here make this more possible for the average person.  I hope that real people make awesomelists like he mentions.  I hope that the internet becomes more human again.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simplecto.com/search-needs-a-human-solution-a-manifesto/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://simplecto.com/content/images/2024/11/1732113326995.png\" alt=\"Search Needs a Human Solution: A Manifesto — When was the last time you felt genuine discovery on the internet?\n\nNot algorithmic recommendations. Not SEO-optimized listicles.\n\n\n\nI mean real, surprising, meaningful discovery.\n\n\n\nSearch is broken but not in the way tech companies think.\n\nWe don\u0026#39;t need better algorithms or bigger indexes.\n\nWe don\u0026#39;t need more compute or scale.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSearch Needs a Human Solution: A Manifesto\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhen was the last time you felt genuine discovery on the internet?\n\nNot algorithmic recommendations. Not SEO-optimized listicles.\n\n\n\nI mean real, surprising, meaningful discovery.\n\n\n\nSearch is brok...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCandid and colorful thoughts on enterprise readiness \u0026middot; simplecto.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe hype bro influencer culture is over, we are fucking burnt the fuck out.  I'm done scrolling through ai slop on social media, I like in a few times a week with hopes to see some friends at the top of my feed and jump out.  The Doom and Gloom of politics, everyone has a side that will bring glory and the other side will start an apocalypse did me in, ai generated bs is just driving those platforms further into the ground, I'm tired and done.\n\nI'm starting to lean into RSS, I hope for projects like [Sam](https://simplecto.com/author/sam/) mentions here make this more possible for the average person.  I hope that real people make awesomelists like he mentions.  I hope that the internet becomes more human again.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simplecto.com/search-needs-a-human-solution-a-manifesto/",
      "date_published": "2025-08-21T01:23:08Z",
      "date_modified": "2025-08-21T01:23:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-806/",
      "url": "https://go.waylonwalker.com/thought-806/",
      "title": "💭 You Should Be Hiring Mullets. (write that down)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simplecto.com/you-should-be-hiring-mullets-write-that-down/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://simplecto.com/content/images/2024/11/hire-a-mullet.png\" alt=\"You Should Be Hiring Mullets. (write that down) — Not because it\u0026#39;s cool (it is), but because it\u0026#39;s what your company actually needs right now.\n\u0026lt;p\u0026gt;\u0026#34;Business in the front, party in the back\u0026#34; isn\u0026#39;t just some throwback style. It\u0026#39;s the whole point.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;In our corporate, don\u0026#39;t-let-HR-see-this reality, it means you\u0026#39;re getting a 360° person. Someone who exists in both\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: You Should Be Hiring Mullets. (write that down) — Not because it\u0026#39;s cool (it is), but because it\u0026#39;s what your company actually needs right now.\n\u0026lt;p\u0026gt;\u0026#34;Business in the front, party in the back\u0026#34; isn\u0026#39;t just some throwback style. It\u0026#39;s the whole point.\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;In our corporate, don\u0026#39;t-let-HR-see-this reality, it means you\u0026#39;re getting a 360° person. Someone who exists in both\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eYou Should Be Hiring Mullets. (write that down)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eNot because it\u0026#39;s cool (it is), but because it\u0026#39;s what your company actually needs right now.\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e\u0026#34;Business in the front, party in the back\u0026#34; isn\u0026#39;t just some throwback style. It\u0026#39;s the whole point.\u003c/p\u003e\n\u003cp\u003eIn ou…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eCandid and colorful thoughts on enterprise readiness · simplecto.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eWe need more mullets (as sam describes them).  Not so serious, but serious when it counts.  Ready to back you up, get some shit shipped, roll up their sleeves and do the work, stand up in front of people and pitch ideas.  We have too many hustle bros pitching shit they cant do, ai doomers who have been here 10 minutes think they can replace everything they don’t understand with a word calculator, framework Andys afraid to ship till its \u003ca href=\"/perfect/\" class=\"wikilink\" data-title=\"perfect\" data-description=\"Perfect is a made up word that humans use to describe something that is above average, or works really well for them. The idea of perfection is fleeting, as...\" data-date=\"2025-06-26\" data-preview=\"Perfect is a made up word that humans use to describe something that is above average, or works really well for them. The idea of perfection is fleeting, as...\"\u003eperfect\u003c/a\u003e.  Grow a Mullet.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simplecto.com/you-should-be-hiring-mullets-write-that-down/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://simplecto.com/content/images/2024/11/hire-a-mullet.png\" alt=\"You Should Be Hiring Mullets. (write that down) — Not because it\u0026#39;s cool (it is), but because it\u0026#39;s what your company actually needs right now.\n\n\u0026#34;Business in the front, party in the back\u0026#34; isn\u0026#39;t just some throwback style. It\u0026#39;s the whole point.\n\nIn our corporate, don\u0026#39;t-let-HR-see-this reality, it means you\u0026#39;re getting a 360° person. Someone who exists in both\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYou Should Be Hiring Mullets. (write that down)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNot because it\u0026#39;s cool (it is), but because it\u0026#39;s what your company actually needs right now.\n\n\u0026#34;Business in the front, party in the back\u0026#34; isn\u0026#39;t just some throwback style. It\u0026#39;s the whole point.\n\nIn ou...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCandid and colorful thoughts on enterprise readiness \u0026middot; simplecto.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWe need more mullets (as sam describes them).  Not so serious, but serious when it counts.  Ready to back you up, get some shit shipped, roll up their sleeves and do the work, stand up in front of people and pitch ideas.  We have too many hustle bros pitching shit they cant do, ai doomers who have been here 10 minutes think they can replace everything they don't understand with a word calculator, framework Andys afraid to ship till its \u003ca href=\"/perfect/\" class=\"wikilink\" data-title=\"perfect\" data-description=\"Perfect is a made up word that humans use to describe something that is above average, or works really well for them. The idea of perfection is fleeting, as...\" data-date=\"2025-06-26\"\u003eperfect\u003c/a\u003e.  Grow a Mullet.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simplecto.com/you-should-be-hiring-mullets-write-that-down/",
      "date_published": "2025-08-21T01:14:21Z",
      "date_modified": "2025-08-21T01:14:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-805/",
      "url": "https://go.waylonwalker.com/thought-805/",
      "title": "💭 OverType - The Markdown Editor That's a Textarea",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://overtype.dev/?utm_source=waylonwalker.com\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://overtype.dev/?utm_source=waylonwalker.com\" alt=\"https://overtype.dev/?utm_source=waylonwalker.com\"/ data-glightbox=\"description: https://overtype.dev/?utm_source=waylonwalker.com\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThe most under hyped, under engineered text editor overtype.  Going to be popping this into some places like \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, and maybe more, looks small and easy to use.  Gives just a bit of nice features over a text editor.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://overtype.dev/?utm_source=waylonwalker.com](/static/https://overtype.dev/?utm_source=waylonwalker.com)\n\nThe most under hyped, under engineered text editor overtype.  Going to be popping this into some places like \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, and maybe more, looks small and easy to use.  Gives just a bit of nice features over a text editor.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://overtype.dev/?utm_source=waylonwalker.com",
      "date_published": "2025-08-21T00:50:01Z",
      "date_modified": "2025-08-21T00:50:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/panphora-overtype/",
      "url": "https://go.waylonwalker.com/panphora-overtype/",
      "title": "⭐ panphora overtype",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/panphora/overtype\" 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\"\u003eovertype\u003c/a\u003e by \u003ca href=\"https://github.com/panphora\" 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\"\u003epanphora\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe markdown editor that’s just a textarea \u003ca href=\"https://overtype.dev\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/overtype.dev.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/overtype.dev.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://overtype.dev\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nThe work on [overtype](https://github.com/panphora/overtype) by [panphora](https://github.com/panphora).\n\nThe markdown editor that's just a textarea https://overtype.dev\n",
      "summary": "The work on overtype by panphora.",
      "date_published": "2025-08-21T00:47:17Z",
      "date_modified": "2025-08-21T00:47:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-802/",
      "url": "https://go.waylonwalker.com/thought-802/",
      "title": "💭 The Internet is Dying: AI, Bots, and The End of Human Content ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"J5ZmLvy_Jfg\" title=\"The Internet is Dying: AI, Bots, and The End of Human Content\" playlabel=\"Play: The Internet is Dying: AI, Bots, and The End of Human Content\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn this VAnessa is hitting my feed with hard topics, I’m not sure whether to subscribe or to block.  These top websites only feel worse every day, when I post on twitter and I get 4 likes by accounts that were created 5 minutes ago with racy profile pics it feels obvious.  I wonder how larger accounts deal with it.  Now that llms have made making these bots mimic humans easy It really makes you want out.  I’ve really become a curmudgeon and leaning on rss over the past year, I dont like it, but idk what to do.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"J5ZmLvy_Jfg\" title=\"The Internet is Dying: AI, Bots, and The End of Human Content\" playlabel=\"Play: The Internet is Dying: AI, Bots, and The End of Human Content\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn this VAnessa is hitting my feed with hard topics, I'm not sure whether to subscribe or to block.  These top websites only feel worse every day, when I post on twitter and I get 4 likes by accounts that were created 5 minutes ago with racy profile pics it feels obvious.  I wonder how larger accounts deal with it.  Now that llms have made making these bots mimic humans easy It really makes you want out.  I've really become a curmudgeon and leaning on rss over the past year, I dont like it, but idk what to do.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=J5ZmLvy_Jfg\u0026t=182s",
      "date_published": "2025-08-18T13:04:56Z",
      "date_modified": "2025-08-18T13:04:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-801/",
      "url": "https://go.waylonwalker.com/thought-801/",
      "title": "💭 The Real Reason Your Power Bill Doubled (It's Not Inflation) -...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hJ2tqs_vksc\" title=\"The Real Reason Your Power Bill Doubled (It\u0026#39;s Not Inflation)\" playlabel=\"Play: The Real Reason Your Power Bill Doubled (It\u0026#39;s Not Inflation)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a crazy theory I did not realize was out there, but damn power just keeps costing more and more.  She does not mention it here, but there are many sources of power for the grid that cost vastly different amounts to produce, generally “clean energy” solutions are harder and more expensive to bring online and don’t just turn on and off at the flick of a switch.  Anyways, how are the power companies divying this power out to users, do some get preferred rates or supply?  My rates just went up for the summer period “temporarily”.  Our infrastructure is aging hard to upgrade and needs something done to it.  Who’s really going to pay for it, these AI companies are throwing big numbers but do they have any real money?  Do they have any real revenue after building out massive data centers filling them with the most expensive hardware?  These guys are burning cash like crazy.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hJ2tqs_vksc\" title=\"The Real Reason Your Power Bill Doubled (It\u0026#39;s Not Inflation)\" playlabel=\"Play: The Real Reason Your Power Bill Doubled (It\u0026#39;s Not Inflation)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a crazy theory I did not realize was out there, but damn power just keeps costing more and more.  She does not mention it here, but there are many sources of power for the grid that cost vastly different amounts to produce, generally \"clean energy\" solutions are harder and more expensive to bring online and don't just turn on and off at the flick of a switch.  Anyways, how are the power companies divying this power out to users, do some get preferred rates or supply?  My rates just went up for the summer period \"temporarily\".  Our infrastructure is aging hard to upgrade and needs something done to it.  Who's really going to pay for it, these AI companies are throwing big numbers but do they have any real money?  Do they have any real revenue after building out massive data centers filling them with the most expensive hardware?  These guys are burning cash like crazy.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=hJ2tqs_vksc\u0026t=25s",
      "date_published": "2025-08-18T13:01:04Z",
      "date_modified": "2025-08-18T13:01:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-800/",
      "url": "https://go.waylonwalker.com/thought-800/",
      "title": "💭 Digitized Signatures",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://signature.cnrad.dev/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/signature.cnrad.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/signature.cnrad.dev.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDigitized Signatures\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esignature.cnrad.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eseriously cool dumb app that no one asked for but is really creative and unique.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/c87fdbe3-26f2-4f14-b4fb-7dc9b231e999.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/c87fdbe3-26f2-4f14-b4fb-7dc9b231e999.png\" alt=\"screenshot-2025-08-17T15-46-27-287Z.png\"/ data-glightbox=\"description: screenshot-2025-08-17T15-46-27-287Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://signature.cnrad.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDigitized Signatures\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esignature.cnrad.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nseriously cool dumb app that no one asked for but is really creative and unique.\n\n![screenshot-2025-08-17T15-46-27-287Z.png](https://dropper.wayl.one/api/file/c87fdbe3-26f2-4f14-b4fb-7dc9b231e999.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://signature.cnrad.dev/",
      "date_published": "2025-08-17T15:47:05Z",
      "date_modified": "2025-08-17T15:47:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-799/",
      "url": "https://go.waylonwalker.com/thought-799/",
      "title": "💭 DHH on X: \"Rewiring your muscle memory for copy/paste when you...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1956645753255805151\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned that its spelled “Rite of Passage”, and is short for ritual.  Mac has so many of these things that are just different, but do not let you reconfigure them and you are stuck with it.  copy / paste I don’t get, the 3 times I’ve touched a mac since I was a kid its frustrated me.  Is it lock in? or is it them actually thinking this is the right way and you all shall do as we say.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1956645753255805151\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned that its spelled \"Rite of Passage\", and is short for ritual.  Mac has so many of these things that are just different, but do not let you reconfigure them and you are stuck with it.  copy / paste I don't get, the 3 times I've touched a mac since I was a kid its frustrated me.  Is it lock in? or is it them actually thinking this is the right way and you all shall do as we say.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/dhh/status/1956645753255805151",
      "date_published": "2025-08-17T15:39:42Z",
      "date_modified": "2025-08-17T15:39:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-798/",
      "url": "https://go.waylonwalker.com/thought-798/",
      "title": "💭 Performance Difference between RWX and RWO volumes · longhorn/...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/longhorn/longhorn/discussions/6964\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/3ef5e06da915e8435ecd50368f3eeb8e8f0e4ab29fb9f9a8617cf4465c9496bc/longhorn/longhorn/discussions/6964\" alt=\"Performance Difference between RWX and RWO volumes · longhorn longhorn · Discussion #6964 — Hey all, because of some internal testing I made a couple of experiments on our Cluster related to performance of RWX and RWO volumes. Because this might be of interest to some people I thought I s...\" loading=\"lazy\"/ data-glightbox=\"description: Performance Difference between RWX and RWO volumes · longhorn longhorn · Discussion #6964 — Hey all, because of some internal testing I made a couple of experiments on our Cluster related to performance of RWX and RWO volumes. Because this might be of interest to some people I thought I s...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePerformance Difference between RWX and RWO volumes · longhorn longhorn · Discussion #6964\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHey all, because of some internal testing I made a couple of experiments on our Cluster related to performance of RWX and RWO volumes. Because this might be of interest to some people I thought I s...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting longhorn storage performance test, author does highlight right away that this is a simulation and not a REAL test.  I did not fully understand the storage semantics before reading through this.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRWO\u003c/strong\u003e -  Always presents a filesystem \u003ccode\u003eext4\u003c/code\u003e or \u003ccode\u003exfs\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRWX\u003c/strong\u003e/\u003cstrong\u003eROX\u003c/strong\u003e - Always presents a network share \u003ccode\u003enfs\u003c/code\u003e to the pod.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis is an important distinction for applications that use sqlite or a tool on top of sqlite such as diskcache.  With sqlite it is not recomended to run over nfs due to missing required file locking mechanisms.\u003c/p\u003e\n\u003cp\u003eLonghorn storage still provides a lot of benefits to these applications as the storage is automatically replicated, if the node that your application is running on goes offline a new pod will start on an existing node.  If you have planned downtime, you can cordon and drain a node.  Since the data is available in another location you will be able to start a new pod on anther node.  barring your PodDisruptionBudget settings, taints, and affinity, this may happen automatically.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/longhorn/longhorn/discussions/6964\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/3ef5e06da915e8435ecd50368f3eeb8e8f0e4ab29fb9f9a8617cf4465c9496bc/longhorn/longhorn/discussions/6964\" alt=\"Performance Difference between RWX and RWO volumes · longhorn longhorn · Discussion #6964 — Hey all, because of some internal testing I made a couple of experiments on our Cluster related to performance of RWX and RWO volumes. Because this might be of interest to some people I thought I s...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePerformance Difference between RWX and RWO volumes · longhorn longhorn · Discussion #6964\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHey all, because of some internal testing I made a couple of experiments on our Cluster related to performance of RWX and RWO volumes. Because this might be of interest to some people I thought I s...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting longhorn storage performance test, author does highlight right away that this is a simulation and not a REAL test.  I did not fully understand the storage semantics before reading through this.\n\n* **RWO** -  Always presents a filesystem `ext4` or `xfs`\n* **RWX**/**ROX** - Always presents a network share `nfs` to the pod.\n\nThis is an important distinction for applications that use sqlite or a tool on top of sqlite such as diskcache.  With sqlite it is not recomended to run over nfs due to missing required file locking mechanisms.  \n\nLonghorn storage still provides a lot of benefits to these applications as the storage is automatically replicated, if the node that your application is running on goes offline a new pod will start on an existing node.  If you have planned downtime, you can cordon and drain a node.  Since the data is available in another location you will be able to start a new pod on anther node.  barring your PodDisruptionBudget settings, taints, and affinity, this may happen automatically.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/longhorn/longhorn/discussions/6964",
      "date_published": "2025-08-15T19:13:56Z",
      "date_modified": "2025-08-15T19:13:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernets",
        "longhorn",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vrtmrz-obsidian-livesync/",
      "url": "https://go.waylonwalker.com/vrtmrz-obsidian-livesync/",
      "title": "⭐ vrtmrz obsidian-livesync",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/vrtmrz/obsidian-livesync\" 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\"\u003eobsidian-livesync\u003c/a\u003e, created by \u003ca href=\"https://github.com/vrtmrz\" 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\"\u003evrtmrz\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [obsidian-livesync](https://github.com/vrtmrz/obsidian-livesync), created by [vrtmrz](https://github.com/vrtmrz).\n\nNo description available.\n",
      "summary": "If you're into interesting projects, don't miss out on obsidian-livesync, created by vrtmrz.",
      "date_published": "2025-08-14T13:29:15Z",
      "date_modified": "2025-08-14T13:29:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/syncthing-syncthing/",
      "url": "https://go.waylonwalker.com/syncthing-syncthing/",
      "title": "⭐ syncthing syncthing",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/syncthing\" 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\"\u003esyncthing’s\u003c/a\u003e project \u003ca href=\"https://github.com/syncthing/syncthing\" 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\"\u003esyncthing\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eOpen Source Continuous File Synchronization\u003c/p\u003e\n",
      "content_text": "\nI like [syncthing's](https://github.com/syncthing) project [syncthing](https://github.com/syncthing/syncthing).\n\nOpen Source Continuous File Synchronization\n",
      "summary": "I like syncthing's project syncthing.",
      "date_published": "2025-08-14T03:47:05Z",
      "date_modified": "2025-08-14T03:47:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-796/",
      "url": "https://go.waylonwalker.com/thought-796/",
      "title": "💭 GitHub Ensloppification – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/08/11/github-ensloppification/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2025-08-11-github-ensloppification.png\" alt=\"GitHub Ensloppification — The one where I say goodbye to GitHub\" loading=\"lazy\"/ data-glightbox=\"description: GitHub Ensloppification — The one where I say goodbye to GitHub\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub Ensloppification\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I say goodbye to GitHub\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDavid’s got me looking at Forgejo.  I’ve seen a lot of GitHub jumpers just this week, and I’ve been tempted for a long time to self host one anyways, so it might be time.  I don’t have hard issues with anything, I just like self hosting my own personal stuff.\u003c/p\u003e\n\u003cp\u003eOn the flipside, I hope this does not turn yet another thing to shit.  I lived through the download software from sourceforge and hope you get the right download now button and not the one from the virus ad.  I’m not putting my really public/useful projects on a \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 platform… well not as the \u003cstrong\u003eonly\u003c/strong\u003e source, I see how that comes off edgy.  I like having some trust in the platform.  Currently theres a lot of issues with M$ and GitHub using you for your data, but I don’t think injecting virus, malware, bitcoin miners is a worry I have coming from a GitHub release, unless it was put there by the author.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/08/11/github-ensloppification/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2025-08-11-github-ensloppification.png\" alt=\"GitHub Ensloppification — The one where I say goodbye to GitHub\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub Ensloppification\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I say goodbye to GitHub\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDavid's got me looking at Forgejo.  I've seen a lot of GitHub jumpers just this week, and I've been tempted for a long time to self host one anyways, so it might be time.  I don't have hard issues with anything, I just like self hosting my own personal stuff.\n\nOn the flipside, I hope this does not turn yet another thing to shit.  I lived through the download software from sourceforge and hope you get the right download now button and not the one from the virus ad.  I'm not putting my really public/useful projects on a self hosted platform... well not as the **only** source, I see how that comes off edgy.  I like having some trust in the platform.  Currently theres a lot of issues with M$ and GitHub using you for your data, but I don't think injecting virus, malware, bitcoin miners is a worry I have coming from a GitHub release, unless it was put there by the author.\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2025/08/11/github-ensloppification/",
      "date_published": "2025-08-12T02:29:16Z",
      "date_modified": "2025-08-12T02:29:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-hosted",
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-795/",
      "url": "https://go.waylonwalker.com/thought-795/",
      "title": "💭 Note-taking \u0026 Editors - awesome-selfhosted",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://awesome-selfhosted.net/tags/note-taking--editors.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://awesome-selfhosted.net/tags/note-taking--editors.html\" alt=\"https://awesome-selfhosted.net/tags/note-taking–editors.html\"/ data-glightbox=\"description: https://awesome-selfhosted.net/tags/note-taking–editors.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eGreat list of \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 markdown editors. Looking for a good one for my wife and family to use that does not look like editing code.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://awesome-selfhosted.net/tags/note-taking--editors.html](/static/https://awesome-selfhosted.net/tags/note-taking--editors.html)\n\nGreat list of self hosted markdown editors. Looking for a good one for my wife and family to use that does not look like editing code.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://awesome-selfhosted.net/tags/note-taking--editors.html",
      "date_published": "2025-08-11T14:27:23Z",
      "date_modified": "2025-08-11T14:27:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-hosted",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pythops-impala/",
      "url": "https://go.waylonwalker.com/pythops-impala/",
      "title": "⭐ pythops impala",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/pythops\" 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\"\u003epythops\u003c/a\u003e and their project \u003ca href=\"https://github.com/pythops/impala\" 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\"\u003eimpala\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🛜 TUI for managing wifi on Linux\u003c/p\u003e\n",
      "content_text": "\nCheck out [pythops](https://github.com/pythops) and their project [impala](https://github.com/pythops/impala).\n\n🛜 TUI for managing wifi on Linux\n",
      "summary": "Check out pythops and their project impala.",
      "date_published": "2025-08-10T17:53:51Z",
      "date_modified": "2025-08-10T17:53:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-794/",
      "url": "https://go.waylonwalker.com/thought-794/",
      "title": "💭 Slops | justin․searls․co",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justin.searls.co/slops/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://justin.searls.co/img/square.png\" alt=\"Slops — AI-generated slop that I thought was worth sharing.\" loading=\"lazy\"/ data-glightbox=\"description: Slops — AI-generated slop that I thought was worth sharing.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSlops\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI-generated slop that I thought was worth sharing.\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustin․searls․co · justin.searls.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJustin has such great feeds on his site, I love how the main feeds are so prominant just to the left of the article you are reading.  \u003ccode\u003eslops\u003c/code\u003e in particular feels like a great category.  Saving this chat for later, or found it particularly interesting, but don’t really want to make a post about it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://justin.searls.co/slops/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://justin.searls.co/img/square.png\" alt=\"Slops — AI-generated slop that I thought was worth sharing.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSlops\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI-generated slop that I thought was worth sharing.\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustin․searls․co \u0026middot; justin.searls.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJustin has such great feeds on his site, I love how the main feeds are so prominant just to the left of the article you are reading.  `slops` in particular feels like a great category.  Saving this chat for later, or found it particularly interesting, but don't really want to make a post about it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://justin.searls.co/slops/",
      "date_published": "2025-08-10T17:41:56Z",
      "date_modified": "2025-08-10T17:41:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yarrick-iodine/",
      "url": "https://go.waylonwalker.com/yarrick-iodine/",
      "title": "⭐ yarrick iodine",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/yarrick/iodine\" 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\"\u003eiodine\u003c/a\u003e by \u003ca href=\"https://github.com/yarrick\" 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\"\u003eyarrick\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eOfficial \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo for iodine dns tunnel\u003c/p\u003e\n",
      "content_text": "\n[iodine](https://github.com/yarrick/iodine) by [yarrick](https://github.com/yarrick) is a game-changer in its space. Excited to see how it evolves.\n\nOfficial git repo for iodine dns tunnel\n",
      "summary": "iodine by yarrick is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-08-10T17:09:19Z",
      "date_modified": "2025-08-10T17:09:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-793/",
      "url": "https://go.waylonwalker.com/thought-793/",
      "title": "💭 noah on X: \"this is about to be my go to on plane flights. u d...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/noahgsolomon/status/1954035351510716670\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ekinda wild, you can chat with an ai bot over a dns request??\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/noahgsolomon/status/1954035351510716670\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nkinda wild, you can chat with an ai bot over a dns request??\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/noahgsolomon/status/1954035351510716670",
      "date_published": "2025-08-10T17:07:18Z",
      "date_modified": "2025-08-10T17:07:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-792/",
      "url": "https://go.waylonwalker.com/thought-792/",
      "title": "💭 blakewatson.com              - blakewatson.com turns 20",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blakewatson.com/journal/blakewatson-com-turns-twenty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/assets/images/og-image.png\" alt=\"blakewatson.com turns 20 - blakewatson.com — I bought this domain as a college student using a friend’s credit card. Twenty years later, it’s one of the best decisions I\u0026#39;ve ever made.\" loading=\"lazy\"/ data-glightbox=\"description: blakewatson.com turns 20 - blakewatson.com — I bought this domain as a college student using a friend’s credit card. Twenty years later, it’s one of the best decisions I\u0026#39;ve ever made.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eblakewatson.com turns 20 - blakewatson.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI bought this domain as a college student using a friend’s credit card. Twenty years later, it’s one of the best decisions I\u0026#39;ve ever made.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblakewatson.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e20 years is a long time to work on something, congrats Blake!  So many great links to small web creators, why, and how to build your own site.\u003c/p\u003e\n\u003cp\u003eAs algos turn to shit the small web remains a space that cannot be ruined.  There will always be rss feeds from real humans writing for other humans.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blakewatson.com/journal/blakewatson-com-turns-twenty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/assets/images/og-image.png\" alt=\"blakewatson.com turns 20 - blakewatson.com — I bought this domain as a college student using a friend’s credit card. Twenty years later, it’s one of the best decisions I\u0026#39;ve ever made.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eblakewatson.com turns 20 - blakewatson.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI bought this domain as a college student using a friend’s credit card. Twenty years later, it’s one of the best decisions I\u0026#39;ve ever made.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblakewatson.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n20 years is a long time to work on something, congrats Blake!  So many great links to small web creators, why, and how to build your own site.\n\nAs algos turn to shit the small web remains a space that cannot be ruined.  There will always be rss feeds from real humans writing for other humans.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blakewatson.com/journal/blakewatson-com-turns-twenty/",
      "date_published": "2025-08-09T19:48:58Z",
      "date_modified": "2025-08-09T19:48:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "web",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/termix-ssh-termix/",
      "url": "https://go.waylonwalker.com/termix-ssh-termix/",
      "title": "⭐ Termix-SSH Termix",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/Termix-SSH/Termix\" 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\"\u003eTermix\u003c/a\u003e by \u003ca href=\"https://github.com/Termix-SSH\" 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\"\u003eTermix-SSH\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eTermix is a web-based server management platform with SSH terminal, tunneling, and file editing capabilities.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [Termix](https://github.com/Termix-SSH/Termix) by [Termix-SSH](https://github.com/Termix-SSH), and it's truly impressive.\n\nTermix is a web-based server management platform with SSH terminal, tunneling, and file editing capabilities.\n",
      "summary": "I recently discovered Termix by Termix-SSH, and it's truly impressive.",
      "date_published": "2025-08-09T14:50:37Z",
      "date_modified": "2025-08-09T14:50:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-791/",
      "url": "https://go.waylonwalker.com/thought-791/",
      "title": "💭 ThePrimeagen on X: \"there is literally no universe that this i...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ThePrimeagen/status/1953502301173244004\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003ethere is literally no universe that this is true\n10k lines and its not bug filled crap?  ok Lex Luthor, its time to step away from the keys\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIs this 10k real production code?  Dry in the sense that it hasn’t re-implemented the same s3 api dozens of time?   What language are we talking something dense like python? something very verbose like \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? Maybe a language where you implement everything from scratch like lua.  This matters a lot.  Playing with little POC applications that dont mean anything I can quickly come up with 500-1k likes of code that I may never look at again.  I’m sure I can come up wtih 10k decent lines of code a day.\u003c/p\u003e\n\u003cp\u003eBut for the same application without duplicating everything over and over?  For something that moves the needle and really matters?? \u003cstrong\u003eevery single day\u003c/strong\u003e?? Consistently +10k, not 10k changes, not 10k deletes of yesterdays code. nah thats wack.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ThePrimeagen/status/1953502301173244004\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e there is literally no universe that this is true\n10k lines and its not bug filled crap?  ok Lex Luthor, its time to step away from the keys\n\nIs this 10k real production code?  Dry in the sense that it hasn't re-implemented the same s3 api dozens of time?   What language are we talking something dense like python? something very verbose like html? Maybe a language where you implement everything from scratch like lua.  This matters a lot.  Playing with little POC applications that dont mean anything I can quickly come up with 500-1k likes of code that I may never look at again.  I'm sure I can come up wtih 10k decent lines of code a day.  \n\nBut for the same application without duplicating everything over and over?  For something that moves the needle and really matters?? **every single day**?? Consistently +10k, not 10k changes, not 10k deletes of yesterdays code. nah thats wack.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/ThePrimeagen/status/1953502301173244004",
      "date_published": "2025-08-09T00:09:36Z",
      "date_modified": "2025-08-09T00:09:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nwg-piotr-nwg-look/",
      "url": "https://go.waylonwalker.com/nwg-piotr-nwg-look/",
      "title": "⭐ nwg-piotr nwg-look",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/nwg-piotr/nwg-look\" 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\"\u003enwg-look\u003c/a\u003e, created by \u003ca href=\"https://github.com/nwg-piotr\" 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\"\u003enwg-piotr\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eGTK3 settings editor adapted to work in the wlroots environment\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [nwg-look](https://github.com/nwg-piotr/nwg-look), created by [nwg-piotr](https://github.com/nwg-piotr).\n\nGTK3 settings editor adapted to work in the wlroots environment\n",
      "summary": "If you're into interesting projects, don't miss out on nwg-look, created by nwg-piotr.",
      "date_published": "2025-08-08T15:04:28Z",
      "date_modified": "2025-08-08T15:04:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-790/",
      "url": "https://go.waylonwalker.com/thought-790/",
      "title": "💭 The Brutalist Report",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://brutalist.report/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/brutalist.report.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/brutalist.report.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe Brutalist Report\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe day\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebrutalist.report\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDiscovered the Brutalist Report from \u003ca href=\"https://coding.garden/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/coding.garden.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/coding.garden.png\" class=\"has-avatar  has-avatar-before\"\u003eCJ\u003c/a\u003e on \u003ca href=\"syntax.fm\"\u003esyntax.fm\u003c/a\u003e on their \u003ca href=\"https://syntax.fm/show/926/rss-is-not-dead\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/syntax.fm.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/syntax.fm.png\" class=\"has-avatar  has-avatar-before\"\u003erss-is-not-dead\u003c/a\u003e episode.  The way he described it, I was like gnaw thats whack, not into it, but I had to check it out.  It’s actually great!  Except the political shit, I go to rss to get away from political finger pointing.  The Hacker News list is great, maybe I need to pay more attention to hacker news??\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://brutalist.report/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe Brutalist Report\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe day\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebrutalist.report\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDiscovered the Brutalist Report from [CJ](https://coding.garden/) on [syntax.fm](syntax.fm) on their [rss-is-not-dead](https://syntax.fm/show/926/rss-is-not-dead) episode.  The way he described it, I was like gnaw thats whack, not into it, but I had to check it out.  It's actually great!  Except the political shit, I go to rss to get away from political finger pointing.  The Hacker News list is great, maybe I need to pay more attention to hacker news??\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://brutalist.report/",
      "date_published": "2025-08-08T02:12:48Z",
      "date_modified": "2025-08-08T02:12:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-789/",
      "url": "https://go.waylonwalker.com/thought-789/",
      "title": "💭 Omarchy is on the move",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://world.hey.com/dhh/omarchy-is-on-the-move-8f848fa4\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://world.hey.com/dhh/avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244\" alt=\"Omarchy is on the move — Omarchy has been improving at a furious pace. Since it was first released on June 26, I\u0026#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-to-Linux enthusiasts. We have about 3,500 early adopters on the Omarchy Discord, 250 pull requests processed, and one heck of an awesome Arch...\" loading=\"lazy\"/ data-glightbox=\"description: Omarchy is on the move — Omarchy has been improving at a furious pace. Since it was first released on June 26, I\u0026#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-to-Linux enthusiasts. We have about 3,500 early adopters on the Omarchy Discord, 250 pull requests processed, and one heck of an awesome Arch...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOmarchy is on the move\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOmarchy has been improving at a furious pace. Since it was first released on June 26, I\u0026#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-t...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eworld.hey.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIt’s facinating how many people are making the jump from mac/windows, not just to linux, not just to archlinux, but to a full on tiling window manager.  DHH has omakub and omarchy.  Omakub is advertised as easy and for beginners, but many are skipping right over that to go straight for the hard stuff.\u003c/p\u003e\n\u003cp\u003eDHH mentions hyprland here, one thing I think he is missing is that this is the first real mainstream tiling window manager that is a competitor to i3, awesomewm, qtile  that runs Wayland.  I think they were able to pull a bunch of great benefits such as lack of screen tearing and animations from this.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://world.hey.com/dhh/omarchy-is-on-the-move-8f848fa4\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://world.hey.com/dhh/avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244\" alt=\"Omarchy is on the move — Omarchy has been improving at a furious pace. Since it was first released on June 26, I\u0026#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-to-Linux enthusiasts. We have about 3,500 early adopters on the Omarchy Discord, 250 pull requests processed, and one heck of an awesome Arch...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOmarchy is on the move\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOmarchy has been improving at a furious pace. Since it was first released on June 26, I\u0026#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-t...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eworld.hey.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIt's facinating how many people are making the jump from mac/windows, not just to linux, not just to archlinux, but to a full on tiling window manager.  DHH has omakub and omarchy.  Omakub is advertised as easy and for beginners, but many are skipping right over that to go straight for the hard stuff.\n\nDHH mentions hyprland here, one thing I think he is missing is that this is the first real mainstream tiling window manager that is a competitor to i3, awesomewm, qtile  that runs Wayland.  I think they were able to pull a bunch of great benefits such as lack of screen tearing and animations from this.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://world.hey.com/dhh/omarchy-is-on-the-move-8f848fa4",
      "date_published": "2025-08-07T14:28:34Z",
      "date_modified": "2025-08-07T14:28:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-788/",
      "url": "https://go.waylonwalker.com/thought-788/",
      "title": "💭 YouTube has earned its crown",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://world.hey.com/dhh/youtube-has-earned-its-crown-48f12ccc\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://world.hey.com/dhh/avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244\" alt=\"YouTube has earned its crown — I often give Google a lot of shit for shutting down services whenever they\u0026#39;re bored, hire a new executive, or face a three-day weekend. The company seems institutionally incapable of standing behind the majority of the products they launch for longer than a KPI cycle. But when the company does decide that something is pivotal to the bu...\" loading=\"lazy\"/ data-glightbox=\"description: YouTube has earned its crown — I often give Google a lot of shit for shutting down services whenever they\u0026#39;re bored, hire a new executive, or face a three-day weekend. The company seems institutionally incapable of standing behind the majority of the products they launch for longer than a KPI cycle. But when the company does decide that something is pivotal to the bu...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYouTube has earned its crown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI often give Google a lot of shit for shutting down services whenever they\u0026#39;re bored, hire a new executive, or face a three-day weekend. The company seems institutionally incapable of standing behin...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eworld.hey.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI wonder how much of \u003ca href=\"https://killedbygoogle.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/killedbygoogle.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/killedbygoogle.com.png\" class=\"has-avatar  has-avatar-before\"\u003ekilled-by-google\u003c/a\u003e is due to is \u003ca href=\"https://thoughts.waylonwalker.com/post/787\" 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\"\u003e20 percent time\u003c/a\u003e.  Allowing engineers to follow a passion project turns into a real product that doesn’t have full backing and support of the company.\u003c/p\u003e\n\u003cp\u003esimilar to DHH as much as I am hurt by reader and all of their privacy BS that comes from ad based revenue I appreciate YouTube and them supporting all of the creators on it.  Giving a platform for small creators the ability to sustain themselves and reach a larch audience without big coorporate rules.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://world.hey.com/dhh/youtube-has-earned-its-crown-48f12ccc\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://world.hey.com/dhh/avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244\" alt=\"YouTube has earned its crown — I often give Google a lot of shit for shutting down services whenever they\u0026#39;re bored, hire a new executive, or face a three-day weekend. The company seems institutionally incapable of standing behind the majority of the products they launch for longer than a KPI cycle. But when the company does decide that something is pivotal to the bu...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYouTube has earned its crown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI often give Google a lot of shit for shutting down services whenever they\u0026#39;re bored, hire a new executive, or face a three-day weekend. The company seems institutionally incapable of standing behin...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eworld.hey.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI wonder how much of [killed-by-google](https://killedbygoogle.com/) is due to is [20 percent time](https://thoughts.waylonwalker.com/post/787).  Allowing engineers to follow a passion project turns into a real product that doesn't have full backing and support of the company.\n\nsimilar to DHH as much as I am hurt by reader and all of their privacy BS that comes from ad based revenue I appreciate YouTube and them supporting all of the creators on it.  Giving a platform for small creators the ability to sustain themselves and reach a larch audience without big coorporate rules.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://world.hey.com/dhh/youtube-has-earned-its-crown-48f12ccc",
      "date_published": "2025-08-07T14:22:58Z",
      "date_modified": "2025-08-07T14:22:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-787/",
      "url": "https://go.waylonwalker.com/thought-787/",
      "title": "💭 20 Percent Time – Ted Merz",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com\" alt=\"https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com\"/ data-glightbox=\"description: https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eGoogles 20 percent time is fascinating to me.  It seems like a great way for engineers to fill up their tank with new skills, passion projects, and the need to scratch an itch.  To me these days it feels like something that would incentivize good talent to join.\u003c/p\u003e\n\u003cp\u003eI can remember back earlier in my career December and January were slow months for big companies.  Riddled with vacation and annual planning cycle.  I would use this time to create tools and libraries that would help me move quicker throughout the year.\u003c/p\u003e\n\u003cp\u003eI clearly remember having a conversation with a colleague several salary grades ahead of me come mid February asking what I was up to.  I was furiously pecking away at some of these projects while he let me know that he had been waiting for this years plan for months and had no tasks from the boss.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThat said, I don’t think any major tech company is going to adopt 20% time these days. It’s too chaotic, too hard to manage and impossible to measure.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis line from Ted feels exactly why 20 percent time generally blows up and likely turns into another \u003ca href=\"https://killedbygoogle.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/killedbygoogle.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/killedbygoogle.com.png\" class=\"has-avatar  has-avatar-before\"\u003ekilled-by-google\u003c/a\u003e product that has a small user base and is furious about it being killed.  With enough of these at least one \u003cstrong\u003ecough\u003c/strong\u003e \u003cem\u003ereader\u003c/em\u003e \u003cstrong\u003ecough\u003c/strong\u003e has affected us all.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com](/static/https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com)\n\nGoogles 20 percent time is fascinating to me.  It seems like a great way for engineers to fill up their tank with new skills, passion projects, and the need to scratch an itch.  To me these days it feels like something that would incentivize good talent to join.\n\nI can remember back earlier in my career December and January were slow months for big companies.  Riddled with vacation and annual planning cycle.  I would use this time to create tools and libraries that would help me move quicker throughout the year.  \n\nI clearly remember having a conversation with a colleague several salary grades ahead of me come mid February asking what I was up to.  I was furiously pecking away at some of these projects while he let me know that he had been waiting for this years plan for months and had no tasks from the boss.\n\n\u003e That said, I don’t think any major tech company is going to adopt 20% time these days. It’s too chaotic, too hard to manage and impossible to measure.\n\nThis line from Ted feels exactly why 20 percent time generally blows up and likely turns into another [killed-by-google](https://killedbygoogle.com/) product that has a small user base and is furious about it being killed.  With enough of these at least one **cough** _reader_ **cough** has affected us all.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ted-merz.com/2022/09/14/20-percent-time/?utm_source=chatgpt.com",
      "date_published": "2025-08-07T14:19:33Z",
      "date_modified": "2025-08-07T14:19:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-786/",
      "url": "https://go.waylonwalker.com/thought-786/",
      "title": "💭 Blog @ tonsky.me",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tonsky.me/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dynogee.com/gen?id=24m2qx9uethuw6p\u0026amp;title=That+yellow+website\" alt=\"Blog\" loading=\"lazy\"/ data-glightbox=\"description: Blog\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBlog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etonsky.me · tonsky.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNiki has one of the coolest yet simple personal sites that I have seen in a long time.  We need more of this on the internet!  hover over his face, try dark mode, submit personal data, there are so many really cool Easter eggs to discover!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tonsky.me/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dynogee.com/gen?id=24m2qx9uethuw6p\u0026amp;title=That+yellow+website\" alt=\"Blog\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBlog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etonsky.me \u0026middot; tonsky.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNiki has one of the coolest yet simple personal sites that I have seen in a long time.  We need more of this on the internet!  hover over his face, try dark mode, submit personal data, there are so many really cool Easter eggs to discover!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tonsky.me/",
      "date_published": "2025-08-06T20:35:25Z",
      "date_modified": "2025-08-06T20:35:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-785/",
      "url": "https://go.waylonwalker.com/thought-785/",
      "title": "💭 We shouldn’t have needed lockfiles @ tonsky.me",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tonsky.me/blog/lockfiles/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dynogee.com/gen?id=24m2qx9uethuw6p\u0026amp;title=We+shouldn%E2%80%99t+have+needed+lockfiles\" alt=\"We shouldn’t have needed lockfiles — Lockfiles are an absolutely unnecessary concept that complicates things without a good reason. Dependency managers can and are working without it just the same.\" loading=\"lazy\"/ data-glightbox=\"description: We shouldn’t have needed lockfiles — Lockfiles are an absolutely unnecessary concept that complicates things without a good reason. Dependency managers can and are working without it just the same.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWe shouldn’t have needed lockfiles\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLockfiles are an absolutely unnecessary concept that complicates things without a good reason. Dependency managers can and are working without it just the same.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etonsky.me · tonsky.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI wholeheartedly agree that packaging is broken, semver is broken, expecting much better from a system of oss that is built on top of volunteers, passion projects, nights and weekends is a fools errand.  With that I disagree that we we dont need lockfiles.  Maybe its Nikki’s experience in java and my lack that puts us on this opposite spectrum, but without lockfiles the world changes underneath us as we release.  One small change to your source can introduce a whole set of new features/bugs that you did not plan on without a good locking system.  It can also cause you to need to do dependency resolution at application build time and not ahead of time.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tonsky.me/blog/lockfiles/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dynogee.com/gen?id=24m2qx9uethuw6p\u0026amp;title=We+shouldn%E2%80%99t+have+needed+lockfiles\" alt=\"We shouldn’t have needed lockfiles — Lockfiles are an absolutely unnecessary concept that complicates things without a good reason. Dependency managers can and are working without it just the same.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWe shouldn’t have needed lockfiles\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLockfiles are an absolutely unnecessary concept that complicates things without a good reason. Dependency managers can and are working without it just the same.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etonsky.me \u0026middot; tonsky.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI wholeheartedly agree that packaging is broken, semver is broken, expecting much better from a system of oss that is built on top of volunteers, passion projects, nights and weekends is a fools errand.  With that I disagree that we we dont need lockfiles.  Maybe its Nikki's experience in java and my lack that puts us on this opposite spectrum, but without lockfiles the world changes underneath us as we release.  One small change to your source can introduce a whole set of new features/bugs that you did not plan on without a good locking system.  It can also cause you to need to do dependency resolution at application build time and not ahead of time.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tonsky.me/blog/lockfiles/",
      "date_published": "2025-08-06T20:11:31Z",
      "date_modified": "2025-08-06T20:11:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-784/",
      "url": "https://go.waylonwalker.com/thought-784/",
      "title": "💭 I Will Fucking Piledrive You If You Mention AI Again — Ludicity",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at\" alt=\"https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at\"/ data-glightbox=\"description: https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eFantastic write up on their experience in ai, opinions on ai being a hoax with a veil of reasonable usefulness.  Arguing that most people do not understand enough to see the difference, and thought leaders see where it is now, see where it was yesterday, it must be going to general intelligence tomorrow and you all will loose your jobs without this.  I appreciate the satirical language here.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at](/static/https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at)\n\nFantastic write up on their experience in ai, opinions on ai being a hoax with a veil of reasonable usefulness.  Arguing that most people do not understand enough to see the difference, and thought leaders see where it is now, see where it was yesterday, it must be going to general intelligence tomorrow and you all will loose your jobs without this.  I appreciate the satirical language here.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/?ref=wheresyoured.at",
      "date_published": "2025-08-06T16:39:28Z",
      "date_modified": "2025-08-06T16:39:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-783/",
      "url": "https://go.waylonwalker.com/thought-783/",
      "title": "💭 DHH: Future of Programming, AI, Ruby on Rails, Productivity \u0026 ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"vagyIcmIGOQ\" title=\"✂️ DHH ai competence\" playlabel=\"Play: ✂️ DHH ai competence\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eLetting Ai drive code feels like giving up so much control.  It feels like its leaving so many brain cycles open for other things, yet its not quite good enough to do production level things on its own, so we must watch it, we must review it, yet its code can be some of the worst to review left unattended.  I’m feeling this right now as I’m avoiding writing a bit of js that I could probably do myself.  Some day this is likely to flip, and it will get better and we will spend our brain cycles thinking about architecture, security, marketing, big picture ideas about the problem we are trying to solve, but we are not yet there and as long as we still need to review I find it a much more pleasant workflow to have in a separate window than have it change the whole fucking project for a simple change.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"vagyIcmIGOQ\" title=\"✂️ DHH ai competence\" playlabel=\"Play: ✂️ DHH ai competence\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nLetting Ai drive code feels like giving up so much control.  It feels like its leaving so many brain cycles open for other things, yet its not quite good enough to do production level things on its own, so we must watch it, we must review it, yet its code can be some of the worst to review left unattended.  I'm feeling this right now as I'm avoiding writing a bit of js that I could probably do myself.  Some day this is likely to flip, and it will get better and we will spend our brain cycles thinking about architecture, security, marketing, big picture ideas about the problem we are trying to solve, but we are not yet there and as long as we still need to review I find it a much more pleasant workflow to have in a separate window than have it change the whole fucking project for a simple change.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/clip/UgkxskUJsmJ6E7KVPyPdn1jy1WZQerR-L1Bm",
      "date_published": "2025-08-06T01:22:39Z",
      "date_modified": "2025-08-06T01:22:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-782/",
      "url": "https://go.waylonwalker.com/thought-782/",
      "title": "💭 A quote from greyduet on r/teachers",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Aug/5/greyduet-on-rteachers/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from greyduet on r/teachers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI teach HS Science in the south. I can only speak for my district, but a few teacher work days in the wave of enthusiasm I\u0026#39;m seeing for AI tools …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWoof, ai is sucking the soul from everything, being forced onto teachers who don’t want or care about it and are simply sharing ai-slop to their kids without giving it much thought.  remember that it is \u003ca href=\"https://distantprovince.by/posts/its-rude-to-show-ai-output-to-people/\"\u003erude\u003c/a\u003e to share ai-slop with others that you have not vetted, It’s next level to turn this into teaching material for children who are forced into your classroom and have no choice about the matter, you should be ashamed.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Aug/5/greyduet-on-rteachers/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from greyduet on r/teachers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI teach HS Science in the south. I can only speak for my district, but a few teacher work days in the wave of enthusiasm I\u0026#39;m seeing for AI tools …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWoof, ai is sucking the soul from everything, being forced onto teachers who don't want or care about it and are simply sharing ai-slop to their kids without giving it much thought.  remember that it is [rude](https://distantprovince.by/posts/its-rude-to-show-ai-output-to-people/) to share ai-slop with others that you have not vetted, It's next level to turn this into teaching material for children who are forced into your classroom and have no choice about the matter, you should be ashamed.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Aug/5/greyduet-on-rteachers/#atom-everything",
      "date_published": "2025-08-05T16:01:16Z",
      "date_modified": "2025-08-05T16:01:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/qr-codes-in-python/",
      "url": "https://go.waylonwalker.com/qr-codes-in-python/",
      "title": "qr codes in python",
      "content_html": "\u003cp\u003eI have a couple of use cases for simple qr codes in python coming up.  One is\nfor blog posts, the other is for auth into a new server application logged to a\nterminal.  I tried the \u003ca href=\"https://pypi.org/project/qrcode/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003e\u003ccode\u003eqrcode\u003c/code\u003e\u003c/a\u003e library\nand it does not look as nice to me and I found\n\u003ca href=\"https://pypi.org/project/pyqrcode/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003e\u003ccode\u003epyqrcode\u003c/code\u003e\u003c/a\u003e to be quite nice.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eimport pyqrcode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e pyqrcode.create\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com/qr-codes-in-python\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eurl.svg\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;qr-codes-in-python.svg\u0026#39;\u003c/span\u003e, \u003cspan class=\"nv\"\u003escale\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e8\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eprint\u003cspan class=\"o\"\u003e(\u003c/span\u003eurl.terminal\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003equiet_zone\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e1\u003cspan class=\"o\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eurl.svg\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;qr-codes-in-python.svg\u0026#39;\u003c/span\u003e, \u003cspan class=\"nv\"\u003escale\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e12\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eurl.svg\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;qr-codes-in-python.svg\u0026#39;\u003c/span\u003e, \u003cspan class=\"nv\"\u003eomithw\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eTrue\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# width is controlled by the container\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eurl.svg\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;qr-codes-in-python.svg\u0026#39;\u003c/span\u003e, \u003cspan class=\"nv\"\u003eomithw\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eTrue, \u003cspan class=\"nv\"\u003emodule_color\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#ffd119\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eurl.svg\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;qr-codes-in-python.svg\u0026#39;\u003c/span\u003e, \u003cspan class=\"nv\"\u003eomithw\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eTrue, \u003cspan class=\"nv\"\u003emodule_color\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#ff69b4\u0026#39;\u003c/span\u003e, \u003cspan class=\"nv\"\u003ebackground\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#2b034c\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"result\"\u003eresult \u003ca href=\"#result\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is the final svg result.\u003c/p\u003e\n\u003c!--?xml version=\"1.0\" encoding=\"UTF-8\"?--\u003e\n\u003cp\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 45 45\" class=\"pyqrcode\"\u003e\u003cpath fill=\"#2b034c\" d=\"M0 0h45v45h-45z\"\u003e\u003c/path\u003e\u003cpath stroke=\"#ff69b4\" class=\"pyqrline\" d=\"M4 4.5h7m2 0h1m1 0h3m3 0h3m5 0h2m3 0h7m-37 1h1m5 0h1m1 0h2m3 0h1m3 0h1m2 0h2m2 0h2m2 0h1m1 0h1m5 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m2 0h2m1 0h2m1 0h1m1 0h1m1 0h1m2 0h2m2 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m2 0h1m1 0h2m1 0h1m3 0h6m2 0h1m1 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h2m1 0h1m2 0h1m1 0h2m1 0h1m2 0h1m1 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m5 0h1m1 0h5m2 0h1m2 0h1m3 0h1m1 0h1m3 0h1m1 0h1m5 0h1m-37 1h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7m-27 1h2m1 0h1m1 0h1m4 0h3m4 0h2m-27 1h1m2 0h5m2 0h2m1 0h4m1 0h5m3 0h2m1 0h5m-36 1h1m7 0h2m2 0h1m1 0h5m4 0h3m1 0h5m1 0h2m1 0h1m-37 1h2m1 0h1m2 0h6m1 0h7m1 0h1m1 0h2m2 0h4m1 0h1m1 0h1m1 0h1m-37 1h1m1 0h1m2 0h1m1 0h1m2 0h3m1 0h1m2 0h2m1 0h1m1 0h2m2 0h1m1 0h1m2 0h3m1 0h2m-34 1h1m2 0h1m2 0h1m1 0h1m3 0h1m1 0h1m1 0h2m3 0h1m2 0h2m1 0h1m2 0h1m1 0h2m-33 1h1m3 0h2m1 0h2m1 0h4m2 0h3m1 0h1m1 0h6m2 0h1m1 0h1m-37 1h1m1 0h1m1 0h6m1 0h1m1 0h1m1 0h2m1 0h4m3 0h1m1 0h1m2 0h1m2 0h2m1 0h1m-35 1h1m1 0h2m1 0h3m1 0h2m1 0h1m1 0h1m1 0h3m3 0h1m1 0h1m1 0h6m1 0h1m-36 1h1m3 0h1m1 0h1m4 0h2m6 0h1m1 0h2m5 0h1m1 0h1m4 0h1m-36 1h4m3 0h3m2 0h1m1 0h3m3 0h1m1 0h1m1 0h5m1 0h2m1 0h2m1 0h1m-35 1h1m2 0h2m1 0h2m2 0h3m8 0h2m2 0h5m1 0h2m1 0h1m-35 1h4m1 0h1m1 0h1m1 0h1m1 0h1m7 0h2m1 0h1m1 0h1m1 0h2m1 0h3m1 0h2m-37 1h3m1 0h3m1 0h1m1 0h2m3 0h1m1 0h3m2 0h1m1 0h1m3 0h1m1 0h1m2 0h1m1 0h1m-36 1h1m1 0h2m1 0h1m4 0h1m2 0h1m1 0h2m1 0h1m2 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h2m1 0h1m-37 1h1m1 0h1m1 0h1m1 0h1m2 0h2m1 0h4m1 0h3m1 0h3m3 0h6m2 0h2m-35 1h2m1 0h1m1 0h2m1 0h2m3 0h3m4 0h1m3 0h2m3 0h1m1 0h1m1 0h2m-37 1h4m1 0h2m4 0h2m1 0h4m1 0h1m4 0h1m5 0h2m1 0h1m1 0h2m-36 1h3m3 0h5m1 0h1m1 0h1m1 0h1m1 0h2m1 0h1m1 0h1m2 0h4m3 0h1m1 0h1m-37 1h4m1 0h2m1 0h3m1 0h1m3 0h3m2 0h1m2 0h1m2 0h1m1 0h3m2 0h1m1 0h1m-33 1h1m6 0h1m2 0h6m2 0h3m1 0h1m2 0h5m2 0h1m-37 1h5m1 0h6m1 0h1m6 0h1m1 0h1m5 0h6m-26 1h1m1 0h1m1 0h1m1 0h1m2 0h2m2 0h1m1 0h2m3 0h1m3 0h2m1 0h2m-37 1h7m1 0h1m1 0h5m2 0h2m1 0h1m1 0h2m2 0h1m1 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m5 0h1m1 0h2m1 0h1m1 0h1m1 0h2m2 0h2m3 0h1m3 0h1m3 0h2m1 0h1m-36 1h1m1 0h3m1 0h1m3 0h1m2 0h1m2 0h2m1 0h3m1 0h2m1 0h7m2 0h2m-37 1h1m1 0h3m1 0h1m4 0h1m2 0h2m1 0h1m1 0h1m1 0h1m6 0h1m3 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h4m1 0h1m1 0h7m1 0h2m2 0h2m2 0h2m-37 1h1m5 0h1m3 0h4m1 0h2m2 0h2m1 0h3m3 0h1m2 0h1m1 0h1m-34 1h7m4 0h2m1 0h1m3 0h2m4 0h1m3 0h1m1 0h1m2 0h1m2 0h1\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/p\u003e\n\u003cp\u003eHere is what it looks like in the terminal.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/c644bd34-b5da-48a3-b6cf-c89efb546114.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/c644bd34-b5da-48a3-b6cf-c89efb546114.png\" alt=\"screenshot-2025-08-05T13-53-17-368Z.png\"/ data-glightbox=\"description: screenshot-2025-08-05T13-53-17-368Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIf you want fancier qrcodes check out \u003ca href=\"https://mydigitalharbor.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/mydigitalharbor.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/mydigitalharbor.com.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://mydigitalharbor.com/\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI have a couple of use cases for simple qr codes in python coming up.  One is\nfor blog posts, the other is for auth into a new server application logged to a\nterminal.  I tried the [`qrcode`](https://pypi.org/project/qrcode/) library\nand it does not look as nice to me and I found\n[`pyqrcode`](https://pypi.org/project/pyqrcode/) to be quite nice.\n\n``` bash\nimport pyqrcode\nurl = pyqrcode.create('https://waylonwalker.com/qr-codes-in-python')\nurl.svg('qr-codes-in-python.svg', scale=8)\nprint(url.terminal(quiet_zone=1))\nurl.svg('qr-codes-in-python.svg', scale=12)\nurl.svg('qr-codes-in-python.svg', omithw=True) # width is controlled by the container\n\nurl.svg('qr-codes-in-python.svg', omithw=True, module_color='#ffd119')\nurl.svg('qr-codes-in-python.svg', omithw=True, module_color='#ff69b4', background='#2b034c')\n```\n\n## result\n\nHere is the final svg result.\n\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 45 45\" class=\"pyqrcode\"\u003e\u003cpath fill=\"#2b034c\" d=\"M0 0h45v45h-45z\"/\u003e\u003cpath stroke=\"#ff69b4\" class=\"pyqrline\" d=\"M4 4.5h7m2 0h1m1 0h3m3 0h3m5 0h2m3 0h7m-37 1h1m5 0h1m1 0h2m3 0h1m3 0h1m2 0h2m2 0h2m2 0h1m1 0h1m5 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m2 0h2m1 0h2m1 0h1m1 0h1m1 0h1m2 0h2m2 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m2 0h1m1 0h2m1 0h1m3 0h6m2 0h1m1 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h2m1 0h1m2 0h1m1 0h2m1 0h1m2 0h1m1 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m5 0h1m1 0h5m2 0h1m2 0h1m3 0h1m1 0h1m3 0h1m1 0h1m5 0h1m-37 1h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7m-27 1h2m1 0h1m1 0h1m4 0h3m4 0h2m-27 1h1m2 0h5m2 0h2m1 0h4m1 0h5m3 0h2m1 0h5m-36 1h1m7 0h2m2 0h1m1 0h5m4 0h3m1 0h5m1 0h2m1 0h1m-37 1h2m1 0h1m2 0h6m1 0h7m1 0h1m1 0h2m2 0h4m1 0h1m1 0h1m1 0h1m-37 1h1m1 0h1m2 0h1m1 0h1m2 0h3m1 0h1m2 0h2m1 0h1m1 0h2m2 0h1m1 0h1m2 0h3m1 0h2m-34 1h1m2 0h1m2 0h1m1 0h1m3 0h1m1 0h1m1 0h2m3 0h1m2 0h2m1 0h1m2 0h1m1 0h2m-33 1h1m3 0h2m1 0h2m1 0h4m2 0h3m1 0h1m1 0h6m2 0h1m1 0h1m-37 1h1m1 0h1m1 0h6m1 0h1m1 0h1m1 0h2m1 0h4m3 0h1m1 0h1m2 0h1m2 0h2m1 0h1m-35 1h1m1 0h2m1 0h3m1 0h2m1 0h1m1 0h1m1 0h3m3 0h1m1 0h1m1 0h6m1 0h1m-36 1h1m3 0h1m1 0h1m4 0h2m6 0h1m1 0h2m5 0h1m1 0h1m4 0h1m-36 1h4m3 0h3m2 0h1m1 0h3m3 0h1m1 0h1m1 0h5m1 0h2m1 0h2m1 0h1m-35 1h1m2 0h2m1 0h2m2 0h3m8 0h2m2 0h5m1 0h2m1 0h1m-35 1h4m1 0h1m1 0h1m1 0h1m1 0h1m7 0h2m1 0h1m1 0h1m1 0h2m1 0h3m1 0h2m-37 1h3m1 0h3m1 0h1m1 0h2m3 0h1m1 0h3m2 0h1m1 0h1m3 0h1m1 0h1m2 0h1m1 0h1m-36 1h1m1 0h2m1 0h1m4 0h1m2 0h1m1 0h2m1 0h1m2 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h2m1 0h1m-37 1h1m1 0h1m1 0h1m1 0h1m2 0h2m1 0h4m1 0h3m1 0h3m3 0h6m2 0h2m-35 1h2m1 0h1m1 0h2m1 0h2m3 0h3m4 0h1m3 0h2m3 0h1m1 0h1m1 0h2m-37 1h4m1 0h2m4 0h2m1 0h4m1 0h1m4 0h1m5 0h2m1 0h1m1 0h2m-36 1h3m3 0h5m1 0h1m1 0h1m1 0h1m1 0h2m1 0h1m1 0h1m2 0h4m3 0h1m1 0h1m-37 1h4m1 0h2m1 0h3m1 0h1m3 0h3m2 0h1m2 0h1m2 0h1m1 0h3m2 0h1m1 0h1m-33 1h1m6 0h1m2 0h6m2 0h3m1 0h1m2 0h5m2 0h1m-37 1h5m1 0h6m1 0h1m6 0h1m1 0h1m5 0h6m-26 1h1m1 0h1m1 0h1m1 0h1m2 0h2m2 0h1m1 0h2m3 0h1m3 0h2m1 0h2m-37 1h7m1 0h1m1 0h5m2 0h2m1 0h1m1 0h2m2 0h1m1 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m5 0h1m1 0h2m1 0h1m1 0h1m1 0h2m2 0h2m3 0h1m3 0h1m3 0h2m1 0h1m-36 1h1m1 0h3m1 0h1m3 0h1m2 0h1m2 0h2m1 0h3m1 0h2m1 0h7m2 0h2m-37 1h1m1 0h3m1 0h1m4 0h1m2 0h2m1 0h1m1 0h1m1 0h1m6 0h1m3 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h4m1 0h1m1 0h7m1 0h2m2 0h2m2 0h2m-37 1h1m5 0h1m3 0h4m1 0h2m2 0h2m1 0h3m3 0h1m2 0h1m1 0h1m-34 1h7m4 0h2m1 0h1m3 0h2m4 0h1m3 0h1m1 0h1m2 0h1m2 0h1\"/\u003e\u003c/svg\u003e\n\nHere is what it looks like in the terminal.\n\n![screenshot-2025-08-05T13-53-17-368Z.png](https://dropper.waylonwalker.com/api/file/c644bd34-b5da-48a3-b6cf-c89efb546114.png)\n\nIf you want fancier qrcodes check out \u003chttps://mydigitalharbor.com/\u003e\n",
      "summary": "I have a couple of use cases for simple qr codes in python coming up. One is for blog posts, the other is for auth into a new server application logged to a...",
      "date_published": "2025-08-05T08:32:12Z",
      "date_modified": "2025-08-05T08:32:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-780/",
      "url": "https://go.waylonwalker.com/thought-780/",
      "title": "💭 Colors • Pico CSS",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://picocss.com/docs/colors\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://picocss.com/opengraph.png\" alt=\"Colors • Pico CSS — Pico comes with 380 manually crafted colors to help you personalize your brand design system.\" loading=\"lazy\"/ data-glightbox=\"description: Colors • Pico CSS — Pico comes with 380 manually crafted colors to help you personalize your brand design system.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eColors • Pico CSS\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePico comes with 380 manually crafted colors to help you personalize your brand design system.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePico CSS · picocss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA great alternative to tailwind colors that has everything defined in one colors file for only 0.3kb.  it feels well worth the weight if you are trying to skip a build step or avoid npm/node.  It has even more colors than tailwind.  I appreciate that there is a grey palette that is fully desaturated.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://picocss.com/docs/colors\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://picocss.com/opengraph.png\" alt=\"Colors • Pico CSS — Pico comes with 380 manually crafted colors to help you personalize your brand design system.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eColors • Pico CSS\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePico comes with 380 manually crafted colors to help you personalize your brand design system.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePico CSS \u0026middot; picocss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA great alternative to tailwind colors that has everything defined in one colors file for only 0.3kb.  it feels well worth the weight if you are trying to skip a build step or avoid npm/node.  It has even more colors than tailwind.  I appreciate that there is a grey palette that is fully desaturated.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://picocss.com/docs/colors",
      "date_published": "2025-08-04T14:58:33Z",
      "date_modified": "2025-08-04T14:58:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-779/",
      "url": "https://go.waylonwalker.com/thought-779/",
      "title": "💭 rushter/selectolax: Python binding to Modest and Lexbor engine...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/rushter/selectolax\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/893ad5608bc9a2fc7e99a27080795a34c6655d38f86c1940855a2f10686cfd4d/rushter/selectolax\" alt=\"GitHub - rushter/selectolax: Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. — Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. - rushter/selectolax\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - rushter/selectolax: Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. — Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. - rushter/selectolax\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - rushter/selectolax: Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePython binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. - rushter/selectolax\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSelectolax you have my attention!  I will be giving this a try for markata which often suffers from slow beautifulsoup.  It appears to have everything I need for my simple use cases.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/b5d8930f-59e0-4947-9500-717f66ce33dc.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/b5d8930f-59e0-4947-9500-717f66ce33dc.png\" alt=\"screenshot-2025-08-04T13-46-04-068Z.png\"/ data-glightbox=\"description: screenshot-2025-08-04T13-46-04-068Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/rushter/selectolax\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/893ad5608bc9a2fc7e99a27080795a34c6655d38f86c1940855a2f10686cfd4d/rushter/selectolax\" alt=\"GitHub - rushter/selectolax: Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. — Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. - rushter/selectolax\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - rushter/selectolax: Python binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePython binding to Modest and Lexbor engines. Fast HTML5 parser with CSS selectors for Python. - rushter/selectolax\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSelectolax you have my attention!  I will be giving this a try for markata which often suffers from slow beautifulsoup.  It appears to have everything I need for my simple use cases.\n\n![screenshot-2025-08-04T13-46-04-068Z.png](https://dropper.wayl.one/api/file/b5d8930f-59e0-4947-9500-717f66ce33dc.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/rushter/selectolax",
      "date_published": "2025-08-04T13:52:15Z",
      "date_modified": "2025-08-04T13:52:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rushter-selectolax/",
      "url": "https://go.waylonwalker.com/rushter-selectolax/",
      "title": "⭐ rushter selectolax",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/rushter/selectolax\" 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\"\u003eselectolax\u003c/a\u003e, created by \u003ca href=\"https://github.com/rushter\" 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\"\u003erushter\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePython binding to Modest and Lexbor engines (fast HTML5 parser with CSS selectors).\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [selectolax](https://github.com/rushter/selectolax), created by [rushter](https://github.com/rushter).\n\nPython binding to Modest and Lexbor engines (fast HTML5 parser with CSS selectors).\n",
      "summary": "If you're into interesting projects, don't miss out on selectolax, created by rushter.",
      "date_published": "2025-08-04T13:45:54Z",
      "date_modified": "2025-08-04T13:45:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rqlite-rqlite/",
      "url": "https://go.waylonwalker.com/rqlite-rqlite/",
      "title": "⭐ rqlite rqlite",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/rqlite\" 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\"\u003erqlite’s\u003c/a\u003e project \u003ca href=\"https://github.com/rqlite/rqlite\" 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\"\u003erqlite\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe lightweight, user-friendly, distributed relational database built on SQLite.\u003c/p\u003e\n",
      "content_text": "\nI like [rqlite's](https://github.com/rqlite) project [rqlite](https://github.com/rqlite/rqlite).\n\nThe lightweight, user-friendly, distributed relational database built on SQLite.\n",
      "summary": "I like rqlite's project rqlite.",
      "date_published": "2025-08-04T01:17:07Z",
      "date_modified": "2025-08-04T01:17:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-776/",
      "url": "https://go.waylonwalker.com/thought-776/",
      "title": "💭 How To Build The Tallest Building In Town",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://garyvaynerchuk.com/build-the-tallest-building-in-town/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://garyvaynerchuk.com/wp-content/uploads/2020/06/Artboard-1.jpg\" alt=\"How To Build The Tallest Building In Town — There are two ways you can build the tallest building in town. Once you understand this, things get really good.\" loading=\"lazy\"/ data-glightbox=\"description: How To Build The Tallest Building In Town — There are two ways you can build the tallest building in town. Once you understand this, things get really good.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow To Build The Tallest Building In Town\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThere are two ways you can build the tallest building in town. Once you understand this, things get really good.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGary Vaynerchuk · garyvaynerchuk.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHave some positivity!  “Just Build the Tallest Fucking Building” is one of my favorite Gary Vee quotes.  Build good community, bring others up, and stop tearing everyone down, listen to the vid.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://garyvaynerchuk.com/build-the-tallest-building-in-town/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://garyvaynerchuk.com/wp-content/uploads/2020/06/Artboard-1.jpg\" alt=\"How To Build The Tallest Building In Town — There are two ways you can build the tallest building in town. Once you understand this, things get really good.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow To Build The Tallest Building In Town\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThere are two ways you can build the tallest building in town. Once you understand this, things get really good.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGary Vaynerchuk \u0026middot; garyvaynerchuk.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHave some positivity!  \"Just Build the Tallest Fucking Building\" is one of my favorite Gary Vee quotes.  Build good community, bring others up, and stop tearing everyone down, listen to the vid.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://garyvaynerchuk.com/build-the-tallest-building-in-town/",
      "date_published": "2025-08-02T15:04:49Z",
      "date_modified": "2025-08-02T15:04:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-775/",
      "url": "https://go.waylonwalker.com/thought-775/",
      "title": "💭 Meet Gor | I kind of hate Agentic IDEs for the sake of product...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.meetgor.com/thoughts/i-kind-of-hate-agentic-ides-for-the-sake-of-productivity/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.meetgor.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.meetgor.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emeetgor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYes, I can review the code and make changes, but who in the world loves reviewing code? Do you love reviewing peers’ PRs? really?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI’m with MeetGor here 100%. reviewing the nuance, not being as involved with the process of creating the architecture design, not solving the problems that arise in development make it hard to effectively review and not turn into LGTM man.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.meetgor.com/thoughts/i-kind-of-hate-agentic-ides-for-the-sake-of-productivity/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emeetgor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Yes, I can review the code and make changes, but who in the world loves reviewing code? Do you love reviewing peers' PRs? really?\n\nI'm with MeetGor here 100%. reviewing the nuance, not being as involved with the process of creating the architecture design, not solving the problems that arise in development make it hard to effectively review and not turn into LGTM man.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.meetgor.com/thoughts/i-kind-of-hate-agentic-ides-for-the-sake-of-productivity/",
      "date_published": "2025-08-02T15:00:38Z",
      "date_modified": "2025-08-02T15:00:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "agentic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dolphin-remote-storage-previews/",
      "url": "https://go.waylonwalker.com/dolphin-remote-storage-previews/",
      "title": "Dolphin Remote Storage Previews",
      "content_html": "\u003cp\u003eI’ve got a few samba shares going in my \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, and I’m struggling finding a\ngreat app to scroll through vacation photos with my wife.  I want something\nintuitive, non intimidating, and just works.  Turns out that the default file\nbrowser application for hyprland works great, but you need to enable previews\nfor remote storage for it to work for my use case here.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png\" alt=\"3940267e-3727-4e7b-8f7f-aebb49d79326.png\"/ data-glightbox=\"description: 3940267e-3727-4e7b-8f7f-aebb49d79326.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI've got a few samba shares going in my homelab, and I'm struggling finding a\ngreat app to scroll through vacation photos with my wife.  I want something\nintuitive, non intimidating, and just works.  Turns out that the default file\nbrowser application for hyprland works great, but you need to enable previews\nfor remote storage for it to work for my use case here.\n\n![3940267e-3727-4e7b-8f7f-aebb49d79326.png](https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png)\n",
      "summary": "I've got a few samba shares going in my homelab, and I'm struggling finding a great app to scroll through vacation photos with my wife. I want something...",
      "date_published": "2025-08-02T14:58:09Z",
      "date_modified": "2025-08-02T14:58:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "hyprland"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-774/",
      "url": "https://go.waylonwalker.com/thought-774/",
      "title": "💭 Meet Gor | Just Fucking use kubernetes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.meetgor.com/thoughts/just-fucking-use-kubernetes/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.meetgor.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.meetgor.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emeetgor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSometimes, all you need is a mindset shift, a blocker in your mind that holds you back from doing certain things. And for me, I have consumed enough tutorials and posts about Kubernetes, that I need to put to use and create. I have been stuck in the learning cycle, lets push to prod with kubernetes.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis hurts.  I know others with this learning style that need to see the full picture before actually doing something with new tech.  The way I first got into kubernetes I was looking for the easy route and somehow k8s came up several times as a suggested route \u003ca href=\"/looking-for-a-heroku-replacement/\" class=\"wikilink\" data-title=\"Looking for a Heroku replacement, What I found was shocking!\" data-description=\"Your browser does not support the audio element.\" data-date=\"2023-12-04\" data-preview=\"Your browser does not support the audio element.\"\u003eLooking for a Heroku replacement, What I found was shocking!\u003c/a\u003e, So I dove in head first with \u003ca href=\"https://k3s.io/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/k3s.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/k3s.io.ico\" class=\"has-avatar  has-avatar-before\"\u003ek3s\u003c/a\u003e and \u003ca href=\"https://kompose.io/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/kompose.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/kompose.io.png\" class=\"has-avatar  has-avatar-before\"\u003ekompose\u003c/a\u003e.  What I found was that it was not all that hard once you start to see how the pieces fit together, no amount of reading tutorials would have gotten me there.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDoes anyone care if you use simple yet fragile bash scripts or heavy weight Kubernetes cluster for just clicking buttons and creating and updating rows in a database? No!\u003c/p\u003e\n\u003cp\u003eYou know what, let’s fucking use Kubernetes.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eLet’s Gooo.  Use what is right for you and stop parroting kubernets is hard, heavy, for big companies, maybe actually try it first.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.meetgor.com/thoughts/just-fucking-use-kubernetes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emeetgor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Sometimes, all you need is a mindset shift, a blocker in your mind that holds you back from doing certain things. And for me, I have consumed enough tutorials and posts about Kubernetes, that I need to put to use and create. I have been stuck in the learning cycle, lets push to prod with kubernetes.\n\nThis hurts.  I know others with this learning style that need to see the full picture before actually doing something with new tech.  The way I first got into kubernetes I was looking for the easy route and somehow k8s came up several times as a suggested route \u003ca href=\"/looking-for-a-heroku-replacement/\" class=\"wikilink\" data-title=\"Looking for a Heroku replacement, What I found was shocking!\" data-description=\"Your browser does not support the audio element.\" data-date=\"2023-12-04\"\u003eLooking for a Heroku replacement, What I found was shocking!\u003c/a\u003e, So I dove in head first with [k3s](https://k3s.io/) and [kompose](https://kompose.io/).  What I found was that it was not all that hard once you start to see how the pieces fit together, no amount of reading tutorials would have gotten me there.\n\n\u003e Does anyone care if you use simple yet fragile bash scripts or heavy weight Kubernetes cluster for just clicking buttons and creating and updating rows in a database? No!\n\u003e \n\u003e You know what, let's fucking use Kubernetes.\n\nLet's Gooo.  Use what is right for you and stop parroting kubernets is hard, heavy, for big companies, maybe actually try it first.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.meetgor.com/thoughts/just-fucking-use-kubernetes/",
      "date_published": "2025-08-02T14:53:45Z",
      "date_modified": "2025-08-02T14:53:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-773/",
      "url": "https://go.waylonwalker.com/thought-773/",
      "title": "💭 Quoting Meet Gor | Kubernetes isn't for you",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.meetgor.com/thoughts/kubernetes-isn-t-for-you/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.meetgor.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.meetgor.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emeetgor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf you want to use it for the purpose of learning it, please do use it.\u003c/p\u003e\n\u003cp\u003eKubernetes as usual is a tool like others, you can’t use one tool everywhere. Where bash scripts work, they just work, where they don’t they fall apart too, kubernetes works like a charm.\u003c/p\u003e\n\u003cp\u003eUse your grug brains a little and choose wisely! In the end, who the hell cares if you use kubernetes or bash scripts to scale if your users are happy?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eWell Said!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.meetgor.com/thoughts/kubernetes-isn-t-for-you/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emeetgor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e If you want to use it for the purpose of learning it, please do use it.\n\u003e \n\u003e Kubernetes as usual is a tool like others, you can't use one tool everywhere. Where bash scripts work, they just work, where they don't they fall apart too, kubernetes works like a charm.\n\u003e \n\u003e Use your grug brains a little and choose wisely! In the end, who the hell cares if you use kubernetes or bash scripts to scale if your users are happy?\n\nWell Said!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.meetgor.com/thoughts/kubernetes-isn-t-for-you/",
      "date_published": "2025-08-02T14:44:18Z",
      "date_modified": "2025-08-02T14:44:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kuberntes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-772/",
      "url": "https://go.waylonwalker.com/thought-772/",
      "title": "💭 Kubernetes Isn't for You",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sliplane.io/blog/kubernetes-isnt-for-you\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://sliplane-frontend.sliplane.app/images/blog/kubernetes-isnt-for-you/kubernetes-isnt-for-you.webp\" alt=\"Kubernetes Isn — Kubernetes isn\" loading=\"lazy\"/ data-glightbox=\"description: Kubernetes Isn — Kubernetes isn\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKubernetes Isn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubernetes isn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esliplane.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis post feels like it was written by someone who has never tried kubernetes, someone who reads twitter, listens to t3.gg and thePrimeagen (who cant even container let alone kubernetes).  If you cant run linux, use bash, build your own docker images, run docker comfortably.  If infra is not your thing kubernetes is probably not for you.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eKubernetes Was Built for Google\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eJust like how react was built for facebook to solve facebook problems with many teams contributing effectively to the same interactive interfaces.  Turns out that react is actually a pretty good product if you have a highly interactive page, and if this is your bread and butter, you can make overly heavy static sites with too much build very effectively.  It works and runs much of the internet now.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWe are getting serious. We need serious tools.\nBig companies use Kubernetes. We should too.\nIt feels more professional. It sounds like we know what we are doing.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIf anyone uses these reasons to pitch kubernetes to me they don’t belong in a position to make any sort of decision.  The first one could be a heading with maybe something under it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBut Kubernetes should not be your first infrastructure step. It should be a response to real pain, not an emotional milestone\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAs with anything, \u003cstrong\u003eit depends\u003c/strong\u003e!  Keeping with the react example, if you have a team with these skills its a solid choice, maybe its overkill, but you got this skills to start here then go for it.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eIf you have never given something a real shot then don’t be writing articles shitting on the tech.  Actually if you do not have a deep expertise in it you probably should not be writing articles shitting on other tech.  If you are the CEO of an alternative, you definitely should not be writing articles shitting on your competition.  \u003ca href=\"https://garyvaynerchuk.com/build-the-tallest-building-in-town/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/garyvaynerchuk.com.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/garyvaynerchuk.com.jpg\" class=\"has-avatar  has-avatar-before\"\u003e just build the biggest fucking building in town \u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIf you are kube curios give kind and kompose a try, you will be surprised at how quickly you can get something up and running in kubernetes.  You might be surprised at how easy it is to remotely manage, add gitops workflows with \u003ca href=\"https://argoproj.github.io/cd/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/argoproj.github.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/argoproj.github.io.png\" class=\"has-avatar  has-avatar-before\"\u003eargocd\u003c/a\u003e.  Give \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 a try and you can see all of your nodes, services, ingress, pvcs, EVERYTHING you have deployed and its status in one easy to use TUI.\u003c/p\u003e\n\u003cp\u003eI avoided kubernetes for a long time because articles like this told me to and I never gave it a fair try.\u003c/p\u003e\n\u003cp\u003eCheck out \u003ca href=\"/just-fucking-use-kubernetes/\" class=\"wikilink\" data-title=\"just fucking use kubernetes\" data-description=\"You want to run containers?\" data-date=\"2025-07-01\" data-preview=\"You want to run containers?\"\u003ejust fucking use kubernetes\u003c/a\u003e for a satirical opposite take.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sliplane.io/blog/kubernetes-isnt-for-you\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sliplane-frontend.sliplane.app/images/blog/kubernetes-isnt-for-you/kubernetes-isnt-for-you.webp\" alt=\"Kubernetes Isn — Kubernetes isn\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKubernetes Isn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubernetes isn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esliplane.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis post feels like it was written by someone who has never tried kubernetes, someone who reads twitter, listens to t3.gg and thePrimeagen (who cant even container let alone kubernetes).  If you cant run linux, use bash, build your own docker images, run docker comfortably.  If infra is not your thing kubernetes is probably not for you.\n\n\u003e Kubernetes Was Built for Google\n\nJust like how react was built for facebook to solve facebook problems with many teams contributing effectively to the same interactive interfaces.  Turns out that react is actually a pretty good product if you have a highly interactive page, and if this is your bread and butter, you can make overly heavy static sites with too much build very effectively.  It works and runs much of the internet now.\n\n\u003e We are getting serious. We need serious tools.\n\u003e Big companies use Kubernetes. We should too.\n\u003e It feels more professional. It sounds like we know what we are doing.\n\nIf anyone uses these reasons to pitch kubernetes to me they don't belong in a position to make any sort of decision.  The first one could be a heading with maybe something under it.\n\n\u003e But Kubernetes should not be your first infrastructure step. It should be a response to real pain, not an emotional milestone\n\nAs with anything, **it depends**!  Keeping with the react example, if you have a team with these skills its a solid choice, maybe its overkill, but you got this skills to start here then go for it.\n\n---\n\nIf you have never given something a real shot then don't be writing articles shitting on the tech.  Actually if you do not have a deep expertise in it you probably should not be writing articles shitting on other tech.  If you are the CEO of an alternative, you definitely should not be writing articles shitting on your competition.  [ just build the biggest fucking building in town ](https://garyvaynerchuk.com/build-the-tallest-building-in-town/).\n\nIf you are kube curios give kind and kompose a try, you will be surprised at how quickly you can get something up and running in kubernetes.  You might be surprised at how easy it is to remotely manage, add gitops workflows with [argocd](https://argoproj.github.io/cd/).  Give [k9s](https://k9scli.io/) a try and you can see all of your nodes, services, ingress, pvcs, EVERYTHING you have deployed and its status in one easy to use TUI.\n\nI avoided kubernetes for a long time because articles like this told me to and I never gave it a fair try.\n\nCheck out \u003ca href=\"/just-fucking-use-kubernetes/\" class=\"wikilink\" data-title=\"just fucking use kubernetes\" data-description=\"You want to run containers?\" data-date=\"2025-07-01\"\u003ejust fucking use kubernetes\u003c/a\u003e for a satirical opposite take.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sliplane.io/blog/kubernetes-isnt-for-you",
      "date_published": "2025-08-02T14:40:42Z",
      "date_modified": "2025-08-02T14:40:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-771/",
      "url": "https://go.waylonwalker.com/thought-771/",
      "title": "💭 csi-driver-smb/deploy/example/smb-provisioner at master · kube...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/kubernetes-csi/csi-driver-smb/tree/master/deploy/example/smb-provisioner\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/c5c019ba0acf5fe38ed0afd46fca55f1a3a4898df83abfb004e5816b83b2cab1/kubernetes-csi/csi-driver-smb\" alt=\"csi-driver-smb/deploy/example/smb-provisioner at master · kubernetes-csi/csi-driver-smb — This driver allows Kubernetes to access SMB Server on both Linux and Windows nodes. - kubernetes-csi/csi-driver-smb\" loading=\"lazy\"/ data-glightbox=\"description: csi-driver-smb/deploy/example/smb-provisioner at master · kubernetes-csi/csi-driver-smb — This driver allows Kubernetes to access SMB Server on both Linux and Windows nodes. - kubernetes-csi/csi-driver-smb\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecsi-driver-smb/deploy/example/smb-provisioner at master · kubernetes-csi/csi-driver-smb\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis driver allows Kubernetes to access SMB Server on both Linux and Windows nodes. - kubernetes-csi/csi-driver-smb\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat guide to setting up a samba server right in kubernetes.  I tried it out after too long of playing with trying to get connected to a samba share on ucore, no idea what was wrong, but this just works, and will live in my \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 no matter what distro I’m on, no playbook required to set it up, just good ol k8s manifest.  TBH I cheated and haven’t set up the secrets yet, so its not quite in argocd or in my github repo, but POC is there and it works as advertised without issue.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/kubernetes-csi/csi-driver-smb/tree/master/deploy/example/smb-provisioner\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/c5c019ba0acf5fe38ed0afd46fca55f1a3a4898df83abfb004e5816b83b2cab1/kubernetes-csi/csi-driver-smb\" alt=\"csi-driver-smb/deploy/example/smb-provisioner at master · kubernetes-csi/csi-driver-smb — This driver allows Kubernetes to access SMB Server on both Linux and Windows nodes. - kubernetes-csi/csi-driver-smb\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecsi-driver-smb/deploy/example/smb-provisioner at master · kubernetes-csi/csi-driver-smb\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis driver allows Kubernetes to access SMB Server on both Linux and Windows nodes. - kubernetes-csi/csi-driver-smb\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat guide to setting up a samba server right in kubernetes.  I tried it out after too long of playing with trying to get connected to a samba share on ucore, no idea what was wrong, but this just works, and will live in my homelab no matter what distro I'm on, no playbook required to set it up, just good ol k8s manifest.  TBH I cheated and haven't set up the secrets yet, so its not quite in argocd or in my github repo, but POC is there and it works as advertised without issue.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/kubernetes-csi/csi-driver-smb/tree/master/deploy/example/smb-provisioner",
      "date_published": "2025-08-01T19:50:39Z",
      "date_modified": "2025-08-01T19:50:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-hosted",
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-769/",
      "url": "https://go.waylonwalker.com/thought-769/",
      "title": "💭 DHH on X: \"You have all the time you need, you're just spendin...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1950462181331349688\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe message so many of us need to hear, stop scrolling and start creating.  I’m not sure that I have a heavy issue with this, I barely scroll the socials anymore, I have my own rss reader curated with people that I enjoy consuming from.  YT is often done as a family activity (with my wife) or listening while doing something like dishes.  But I think I’ve been on the other side of this for awhile.  There’s something that ticks my brain by twiddling with linux nonsensically or \u003ccode\u003epip install thing-i-heard-about-today\u003c/code\u003e and try it.  I’m not imune  though, I often fill gaps in the day with nonsense short content, but try to avoid the short trap.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1950462181331349688\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe message so many of us need to hear, stop scrolling and start creating.  I'm not sure that I have a heavy issue with this, I barely scroll the socials anymore, I have my own rss reader curated with people that I enjoy consuming from.  YT is often done as a family activity (with my wife) or listening while doing something like dishes.  But I think I've been on the other side of this for awhile.  There's something that ticks my brain by twiddling with linux nonsensically or `pip install thing-i-heard-about-today` and try it.  I'm not imune  though, I often fill gaps in the day with nonsense short content, but try to avoid the short trap.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/dhh/status/1950462181331349688",
      "date_published": "2025-07-31T00:56:40Z",
      "date_modified": "2025-07-31T00:56:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-768/",
      "url": "https://go.waylonwalker.com/thought-768/",
      "title": "💭 Rewriting alt-tab to save 0.1s - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"RG69PCAslA0\" title=\"Rewriting Alt-Tab To Save 0.01s | Prime Reacts\" playlabel=\"Play: Rewriting Alt-Tab To Save 0.01s | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHow many times in one video can Prime say dude just use arch, dude arch would be way easier, dude you know how hard you are making this on yourself.\u003c/p\u003e\n\u003cp\u003eI do not envy those who desire full size configurability but stuck with the opinions of GatesJobs.  Windows and Mac are so rigid, that it makes it impossible to do any level of customizability that I would want to do for productivity.\u003c/p\u003e\n\u003cp\u003eUnless you \u003cstrong\u003eMust\u003c/strong\u003e work on win/mack for some reason of work, you make something for one of them, you use Adobe, or you play competitive online multiplayer with easy anticheat there is a distro for you.  The number of things that you need a win/mack for is greatly shrinking, you don’t have to submit yourself to the pain of Gates that this guy has done.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"RG69PCAslA0\" title=\"Rewriting Alt-Tab To Save 0.01s | Prime Reacts\" playlabel=\"Play: Rewriting Alt-Tab To Save 0.01s | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHow many times in one video can Prime say dude just use arch, dude arch would be way easier, dude you know how hard you are making this on yourself.\n\nI do not envy those who desire full size configurability but stuck with the opinions of GatesJobs.  Windows and Mac are so rigid, that it makes it impossible to do any level of customizability that I would want to do for productivity.\n\nUnless you **Must** work on win/mack for some reason of work, you make something for one of them, you use Adobe, or you play competitive online multiplayer with easy anticheat there is a distro for you.  The number of things that you need a win/mack for is greatly shrinking, you don't have to submit yourself to the pain of Gates that this guy has done.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtu.be/RG69PCAslA0?si=ZogGDP9TOI6gDcMM",
      "date_published": "2025-07-28T12:46:30Z",
      "date_modified": "2025-07-28T12:46:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "windows",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-767/",
      "url": "https://go.waylonwalker.com/thought-767/",
      "title": "💭 Copyparty - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"15_-hgsX2V0\" title=\"introducing copyparty, the FOSS file server\" playlabel=\"Play: introducing copyparty, the FOSS file server\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eCopyparty looks like a feature full \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 file server, putting this into my check out later when I get  back to my desk.  Impressive number of features I didn’t even know were a thing all from one .py file.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"15_-hgsX2V0\" title=\"introducing copyparty, the FOSS file server\" playlabel=\"Play: introducing copyparty, the FOSS file server\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nCopyparty looks like a feature full self hosted file server, putting this into my check out later when I get  back to my desk.  Impressive number of features I didn't even know were a thing all from one .py file.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://youtu.be/15_mX",
      "date_published": "2025-07-27T17:23:57Z",
      "date_modified": "2025-07-27T17:23:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "later",
        "self-host",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-766/",
      "url": "https://go.waylonwalker.com/thought-766/",
      "title": "💭 What the EDC Community Gets Wrong About Pry Bars - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hT_pzOURr5c\" title=\"What the EDC Community Gets Wrong About Pry Bars\" playlabel=\"Play: What the EDC Community Gets Wrong About Pry Bars\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBen sold me on the mini pocket pry here.  It’s funny how so many \u003cem\u003eminimalist\u003c/em\u003e tools become over the top titanium damascus with wild patterns and designs. they look amazing, but are they worth the insane price for simple things?  I like my edc to be things I don’t worry about breaking, loosing, or giving away.  Fancy ass prybars for $200+ gives me all of those negative feelings I don’t want on my edc.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hT_pzOURr5c\" title=\"What the EDC Community Gets Wrong About Pry Bars\" playlabel=\"Play: What the EDC Community Gets Wrong About Pry Bars\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nBen sold me on the mini pocket pry here.  It's funny how so many _minimalist_ tools become over the top titanium damascus with wild patterns and designs. they look amazing, but are they worth the insane price for simple things?  I like my edc to be things I don't worry about breaking, loosing, or giving away.  Fancy ass prybars for $200+ gives me all of those negative feelings I don't want on my edc.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=hT_pzOURr5c",
      "date_published": "2025-07-26T20:27:28Z",
      "date_modified": "2025-07-26T20:27:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "edc",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-765/",
      "url": "https://go.waylonwalker.com/thought-765/",
      "title": "💭 How I Use Computers Now - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"x-sW4sKZocA\" title=\"How I Use Computers Now\" playlabel=\"Play: How I Use Computers Now\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBen is always good for a banger of a video, this images app is something that i really want in my \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, he did some great polish here!  The idea of building vibe coded applications for your own personal use with all of your own personal opinions and workflows is something that has been an appealing part of ai,  I’ve definitely tossed a few apps in my homelab that I use occasionally and they do what I ask of them pretty accurately.\u003c/p\u003e\n\u003cp\u003eThis feels great to use, but also seems to kill any startup idea I have, as most of them feel like they could be vibe coded out by someone with a bit of skill and they just host their own.  Maybe this is a good thing, maybe we are moving into an era of more people owning their own app they use for themself, maybe i need a security related startup?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"x-sW4sKZocA\" title=\"How I Use Computers Now\" playlabel=\"Play: How I Use Computers Now\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nBen is always good for a banger of a video, this images app is something that i really want in my homelab, he did some great polish here!  The idea of building vibe coded applications for your own personal use with all of your own personal opinions and workflows is something that has been an appealing part of ai,  I've definitely tossed a few apps in my homelab that I use occasionally and they do what I ask of them pretty accurately.\n\nThis feels great to use, but also seems to kill any startup idea I have, as most of them feel like they could be vibe coded out by someone with a bit of skill and they just host their own.  Maybe this is a good thing, maybe we are moving into an era of more people owning their own app they use for themself, maybe i need a security related startup?\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=x-sW4sKZocA",
      "date_published": "2025-07-26T14:41:22Z",
      "date_modified": "2025-07-26T14:41:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "self-hosted",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-763/",
      "url": "https://go.waylonwalker.com/thought-763/",
      "title": "💭 Neovim vs Emacs | Roundtable w/ TJ DeVries, DistroTube, Greg A...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"SnhcXR9CKno\" title=\"✂️ vsc***\" playlabel=\"Play: ✂️ vsc***\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI don’t think I ever fully heard the full meaning of vsc*** and why it gets bleeped.  I knew that it had to do with M$, but Teej explains it so well here.  Its about the editor not really being open sources, but is marketed to be such.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"SnhcXR9CKno\" title=\"✂️ vsc***\" playlabel=\"Play: ✂️ vsc***\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI don't think I ever fully heard the full meaning of vsc*** and why it gets bleeped.  I knew that it had to do with M$, but Teej explains it so well here.  Its about the editor not really being open sources, but is marketed to be such.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/clip/UgkxQevfazaval9KH22a6BjMRkdBs7541Kry",
      "date_published": "2025-07-25T02:13:59Z",
      "date_modified": "2025-07-25T02:13:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vscode",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-762/",
      "url": "https://go.waylonwalker.com/thought-762/",
      "title": "💭 Glossary Web Component – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/05/07/glossary-web-component/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2025-05-07-glossary-web-component.png\" alt=\"Glossary Web Component — The one where I put the hypercard in the hyperlink\" loading=\"lazy\"/ data-glightbox=\"description: Glossary Web Component — The one where I put the hypercard in the hyperlink\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGlossary Web Component\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I put the hypercard in the hyperlink\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI really enjoy David’s Glossary, he has absolutely nailed it.  I’m working on one for myself that feels close but not quite.  I want to have a list of words that auto glossary to terms for me, maybe this is too much automation and I should just lean on wikilinks, i.e. \u003ca href=\"/sick-wikilink-hover/\" class=\"wikilink\" data-title=\"sick wikilink hover\" data-description=\"Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...\" data-date=\"2024-05-30\" data-preview=\"Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...\"\u003esick wikilink hover\u003c/a\u003e, they only take wrapping in brackets.   But like David mentions here its a lot of work to make sure they are right on all the older posts.  I think it needs to be done with js on my setup, I don’t have no fancy wroker to modify \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 on the way out, I’m fully static right now, so i would need to do full rebuilds any time the glossary changes, i’m trying to cut down on the number of features that require full site rebuilds and potential cache issues.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/05/07/glossary-web-component/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2025-05-07-glossary-web-component.png\" alt=\"Glossary Web Component — The one where I put the hypercard in the hyperlink\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGlossary Web Component\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I put the hypercard in the hyperlink\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI really enjoy David's Glossary, he has absolutely nailed it.  I'm working on one for myself that feels close but not quite.  I want to have a list of words that auto glossary to terms for me, maybe this is too much automation and I should just lean on wikilinks, i.e. \u003ca href=\"/sick-wikilink-hover/\" class=\"wikilink\" data-title=\"sick wikilink hover\" data-description=\"Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...\" data-date=\"2024-05-30\"\u003esick wikilink hover\u003c/a\u003e, they only take wrapping in brackets.   But like David mentions here its a lot of work to make sure they are right on all the older posts.  I think it needs to be done with js on my setup, I don't have no fancy wroker to modify html on the way out, I'm fully static right now, so i would need to do full rebuilds any time the glossary changes, i'm trying to cut down on the number of features that require full site rebuilds and potential cache issues.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2025/05/07/glossary-web-component/",
      "date_published": "2025-07-25T02:11:58Z",
      "date_modified": "2025-07-25T02:11:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-761/",
      "url": "https://go.waylonwalker.com/thought-761/",
      "title": "💭 An Ode To My 10-Year-Old Thinkpad T440",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://mbrizic.com/blog/thinkpad-t440/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/mbrizic.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/mbrizic.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAn Ode To My 10-Year-Old Thinkpad T440\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003embrizic.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI like reading about old hardware and how to keep it running, sending shit out to e-waste after barely using it for a year makes my skin crawl.  I find it interesting how most of these resurrections start with a linux build, and the author giving in and going for linux for the first time and enjoying being able to use something they thought was useless for real work.\u003c/p\u003e\n\u003cp\u003eThat being said I have weird thoughts similar to this guy about being able to take a machine and write a novel somewhere off in the distance, but any time I try to do real work form any laptop these days the ergonomics become so unappealing that I tend to just not do anything away from my desk.  Theres something that sounds so great about opening vim on old hardware that could last for hours, sip on coffee and write away, but it never works out like that in practice.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://mbrizic.com/blog/thinkpad-t440/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAn Ode To My 10-Year-Old Thinkpad T440\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003embrizic.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI like reading about old hardware and how to keep it running, sending shit out to e-waste after barely using it for a year makes my skin crawl.  I find it interesting how most of these resurrections start with a linux build, and the author giving in and going for linux for the first time and enjoying being able to use something they thought was useless for real work.  \n\nThat being said I have weird thoughts similar to this guy about being able to take a machine and write a novel somewhere off in the distance, but any time I try to do real work form any laptop these days the ergonomics become so unappealing that I tend to just not do anything away from my desk.  Theres something that sounds so great about opening vim on old hardware that could last for hours, sip on coffee and write away, but it never works out like that in practice.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://mbrizic.com/blog/thinkpad-t440/",
      "date_published": "2025-07-25T01:33:47Z",
      "date_modified": "2025-07-25T01:33:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-760/",
      "url": "https://go.waylonwalker.com/thought-760/",
      "title": "💭 Transparent Textures",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://transparenttextures.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/transparenttextures.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/transparenttextures.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTransparent Textures\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etransparenttextures.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFantastic resource of background textures, I will be using this for some projects.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://transparenttextures.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTransparent Textures\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etransparenttextures.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFantastic resource of background textures, I will be using this for some projects.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://transparenttextures.com/",
      "date_published": "2025-07-22T01:14:59Z",
      "date_modified": "2025-07-22T01:14:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-759/",
      "url": "https://go.waylonwalker.com/thought-759/",
      "title": "💭 uv run for running tests on versions of Python",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.feldroy.com/posts/2025-07-uv-run-for-testing-python-versions\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://f004.backblazeb2.com/file/daniel-feldroy-com/public/images/profile.jpg\" alt=\"uv run for running tests on versions of Python — Using uv run with make to replace tox or nox for testing multiple versions of Python locally.\" loading=\"lazy\"/ data-glightbox=\"description: uv run for running tests on versions of Python — Using uv run with make to replace tox or nox for testing multiple versions of Python locally.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003euv run for running tests on versions of Python\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsing uv run with make to replace tox or nox for testing multiple versions of Python locally.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehttps://daniel.feldroy.com · daniel.feldroy.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSuch a fantastic use of uv, its so fast and flexible and does everything I need that next time I go to set up some more complex testing like this I’m going to lean towards it more than i would something like tox.  In the post Daniel sets up matrix testing for testing out different versions of python with the same pytest test suite.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.feldroy.com/posts/2025-07-uv-run-for-testing-python-versions\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://f004.backblazeb2.com/file/daniel-feldroy-com/public/images/profile.jpg\" alt=\"uv run for running tests on versions of Python — Using uv run with make to replace tox or nox for testing multiple versions of Python locally.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003euv run for running tests on versions of Python\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsing uv run with make to replace tox or nox for testing multiple versions of Python locally.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehttps://daniel.feldroy.com \u0026middot; daniel.feldroy.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSuch a fantastic use of uv, its so fast and flexible and does everything I need that next time I go to set up some more complex testing like this I'm going to lean towards it more than i would something like tox.  In the post Daniel sets up matrix testing for testing out different versions of python with the same pytest test suite.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daniel.feldroy.com/posts/2025-07-uv-run-for-testing-python-versions",
      "date_published": "2025-07-21T20:25:40Z",
      "date_modified": "2025-07-21T20:25:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "uv",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-756/",
      "url": "https://go.waylonwalker.com/thought-756/",
      "title": "💭 2025-07-10 Notes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/2025-07-10-notes/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pype.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pype.dev.ico\"\u003e\n    \u003c/a\u003e\u003cdiv class=\"embed-card-image\"\u003e\u003ca href=\"https://pype.dev/2025-07-10-notes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"2025-07-10 Notes | Nic Payne — \u0026lt;a href=\" 2025-07-09-notes=\"\" \"=\"\" class=\"wikilink glightbox\" data-title=\"2025-07-09 Notes\" data-description=\"What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...\" data-date=\"2025-07-09\"/ data-glightbox=\"description: 2025-07-10 Notes | Nic Payne — \u0026lt;a href=\"\u003e2025-07-09 Notes\u003c/a\u003e from yesterday I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]] Been cleaning up my z\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e2025-07-10 Notes | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\u003ca href=\"/2025-07-09-notes/\" class=\"wikilink\" data-title=\"2025-07-09 Notes\" data-description=\"What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...\" data-date=\"2025-07-09\" data-preview=\"What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...\"\u003e2025-07-09 Notes\u003c/a\u003e from yesterday I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]] Been cleaning up my z\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \n\u003c/div\u003e\n\u003cp\u003ebig fan of eza and dust, I like these aliases to have some common commands at my fingertips.  I often use the tree command and yes it sometimes goes too deep to actually be useful.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003elt\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;eza -T --level=2\u0026#39;\u003c/span\u003e             \u003cspan class=\"c1\"\u003e# Tree view, 2 levels deep\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003eltt\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;eza -T --level=3\u0026#39;\u003c/span\u003e            \u003cspan class=\"c1\"\u003e# Tree view, 3 levels deep\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003edu1\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;dust -d 1\u0026#39;\u003c/span\u003e                   \u003cspan class=\"c1\"\u003e# Show only 1 level deep\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003edu2\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;dust -d 2\u0026#39;\u003c/span\u003e                   \u003cspan class=\"c1\"\u003e# Show 2 levels deep\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/2025-07-10-notes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"2025-07-10 Notes | Nic Payne — \u003ca href=\"/2025-07-09-notes/\" class=\"wikilink\" data-title=\"2025-07-09 Notes\" data-description=\"What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...\" data-date=\"2025-07-09\"\u003e2025-07-09 Notes\u003c/a\u003e from yesterday I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]] Been cleaning up my z\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e2025-07-10 Notes | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\u003ca href=\"/2025-07-09-notes/\" class=\"wikilink\" data-title=\"2025-07-09 Notes\" data-description=\"What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...\" data-date=\"2025-07-09\"\u003e2025-07-09 Notes\u003c/a\u003e from yesterday I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]] Been cleaning up my z\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nbig fan of eza and dust, I like these aliases to have some common commands at my fingertips.  I often use the tree command and yes it sometimes goes too deep to actually be useful.\n\n``` bash\n    alias lt='eza -T --level=2'             # Tree view, 2 levels deep\n    alias ltt='eza -T --level=3'            # Tree view, 3 levels deep\n\n    alias du1='dust -d 1'                   # Show only 1 level deep\n    alias du2='dust -d 2'                   # Show 2 levels deep\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/2025-07-10-notes/",
      "date_published": "2025-07-18T15:26:28Z",
      "date_modified": "2025-07-18T15:26:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "bash",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-755/",
      "url": "https://go.waylonwalker.com/thought-755/",
      "title": "💭 Vimothée Chalamet shares his new favorite shell command from a...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"0-SUk1G9xMg\" title=\"- YouTube\" playlabel=\"Play: - YouTube\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eLove this dudes casual dry humor style, not afraid to poke fun at things with his dry ass satire.  that being said, fc is new and as a long time fan of up arrow and !! I will be using this often.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"0-SUk1G9xMg\" title=\"- YouTube\" playlabel=\"Play: - YouTube\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nLove this dudes casual dry humor style, not afraid to poke fun at things with his dry ass satire.  that being said, fc is new and as a long time fan of up arrow and !! I will be using this often.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=0-SUk1G9xMg",
      "date_published": "2025-07-18T12:56:59Z",
      "date_modified": "2025-07-18T12:56:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fc/",
      "url": "https://go.waylonwalker.com/fc/",
      "title": "fc",
      "content_html": "\u003cp\u003eI am a linux user through and through.  Desktop, server, vms, containers,\neverything except my phone is linux.  With this I spend a lot of time in the\nterminal, and have been a long time user of \u003ccode\u003e!!\u003c/code\u003e to rerun the last command, but\nwith the ability to tack something on at the beginning or end.\u003c/p\u003e\n\u003cp\u003eTIL about \u003ccode\u003efc\u003c/code\u003e, which opens the last command in your shell history in your\n\u003ccode\u003e$EDITOR\u003c/code\u003e or pass in your editor \u003ccode\u003e-e nvim\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://manned.org/fc\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/manned.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/manned.org.ico\" class=\"has-avatar  has-avatar-before\"\u003eman fc\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"rcap-of-how--works\"\u003eRcap of how !! works \u003ca href=\"#rcap-of-how--works\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e!!\u003c/code\u003e pronounces \u003ccode\u003ebang bang\u003c/code\u003e and will run the last command in your history.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003els -l\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e!! \u003cspan class=\"p\"\u003e|\u003c/span\u003e wc -l\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ls -l | wc -l\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo !!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# sudo ls -l | wc -l\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e!!:s/-l/-l \u003cspan class=\"se\"\u003e\\/\u003c/span\u003etmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# sudo ls -l /tmp | wc -l\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"fc-enters-the-chat\"\u003e\u003ccode\u003efc\u003c/code\u003e enters the chat \u003ca href=\"#fc-enters-the-chat\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow making complex edits in your shell can be a bit of a chore, so \u003ccode\u003efc\u003c/code\u003e moves\nthis work to your \u003ccode\u003e$EDITOR\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003efc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis pops open your $EDITOR with the last command in your history.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esudo\u003c/span\u003e \u003cspan class=\"nx\"\u003els\u003c/span\u003e \u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003el\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nx\"\u003ewc\u003c/span\u003e \u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003el\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png\" alt=\"screenshot-2025-07-18T13-21-46-775Z.png\"/ data-glightbox=\"description: screenshot-2025-07-18T13-21-46-775Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"shell-history\"\u003eShell History \u003ca href=\"#shell-history\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003efc\u003c/code\u003e shows up in shell history, but \u003ccode\u003e!!\u003c/code\u003e does not, \u003ccode\u003e!!\u003c/code\u003e gets replaced by the\ncommand that it becomes.\u003c/p\u003e\n\u003ch2 id=\"up-arrow\"\u003eUp Arrow \u003ca href=\"#up-arrow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eyaya yaya, I know you can also \u003ccode\u003eup-arrow c-e\u003c/code\u003e, but what fun is that, it’s barely a\nflex.  \u003ccode\u003efc\u003c/code\u003e just looks big brained and like you really know what you are doing.\u003c/p\u003e\n",
      "content_text": "\nI am a linux user through and through.  Desktop, server, vms, containers,\neverything except my phone is linux.  With this I spend a lot of time in the\nterminal, and have been a long time user of `!!` to rerun the last command, but\nwith the ability to tack something on at the beginning or end.\n\nTIL about `fc`, which opens the last command in your shell history in your\n`$EDITOR` or pass in your editor `-e nvim`.\n\n[man fc](https://manned.org/fc)\n\n## Rcap of how !! works\n\n`!!` pronounces `bang bang` and will run the last command in your history.\n\n``` bash\nls -l\n\n!! | wc -l\n# ls -l | wc -l\n\nsudo !!\n# sudo ls -l | wc -l\n\n!!:s/-l/-l \\/tmp\n# sudo ls -l /tmp | wc -l\n```\n\n## `fc` enters the chat\n\nNow making complex edits in your shell can be a bit of a chore, so `fc` moves\nthis work to your `$EDITOR`.\n\n``` bash\nfc\n```\n\nThis pops open your $EDITOR with the last command in your history.\n\n``` vim\nsudo ls -l | wc -l\n```\n\n![screenshot-2025-07-18T13-21-46-775Z.png](https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png)\n\n## Shell History\n\n`fc` shows up in shell history, but `!!` does not, `!!` gets replaced by the\ncommand that it becomes.\n\n## Up Arrow\n\nyaya yaya, I know you can also `up-arrow c-e`, but what fun is that, it's barely a\nflex.  `fc` just looks big brained and like you really know what you are doing.\n",
      "summary": "I am a linux user through and through. Desktop, server, vms, containers, everything except my phone is linux. With this I spend a lot of time in the...",
      "date_published": "2025-07-18T07:52:53Z",
      "date_modified": "2025-07-18T07:52:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pygments-htmlformatter/",
      "url": "https://go.waylonwalker.com/pygments-htmlformatter/",
      "title": "pygments htmlformatter",
      "content_html": "\u003cp\u003eI’ve been a long user of pygments, it’s been the thing that injects \u003ccode\u003e\u0026lt;spans\u0026gt;\u003c/code\u003e\nwith funny little class names like \u003ccode\u003esc\u003c/code\u003e and \u003ccode\u003esi\u003c/code\u003e into the code blocks of my\nwebsite.  I’ve even gone as far as implementing a \u003ca href=\"https://github.com/WaylonWalker/markata/blob/main/markata/plugins/md_it_highlight_code.py\" 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\"\u003eplugin for\nmd-it\u003c/a\u003e,\nbut I had no idea how to re-style it.  I long ago got a theme that looked good\nenough from somewhere and just used it, maybe I pulled something from their\ndocs site and forgot.  Today I learned you can list all the themes easily from\nthe library itself, and render out new css.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epygments.styles\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_all_styles\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_all_styles\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# [\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;abap\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;algol_nu\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;algol\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;arduino\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;autumn\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;borland\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;bw\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;colorful\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;default\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;dracula\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;emacs\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;friendly_grayscale\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;friendly\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;fruity\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;github-dark\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;gruvbox-dark\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;gruvbox-light\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;igor\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;inkpot\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;lightbulb\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;lilypond\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;lovelace\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;manni\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;material\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;monokai\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;murphy\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;native\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;nord-darker\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;nord\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;one-dark\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;paraiso-dark\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;paraiso-light\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;pastie\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;perldoc\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;rainbow_dash\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;rrt\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;sas\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;solarized-dark\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;solarized-light\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;staroffice\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;stata-dark\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;stata-light\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;stata\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;tango\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;trac\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;vim\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;vs\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;xcode\u0026#39;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#39;zenburn\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epygments.formatters\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eHtmlFormatter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epygments.styles\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_style_by_name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eget_style_by_name\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;monokai\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eformatter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eHtmlFormatter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eformatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_style_defs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;.highlight\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd now you get styles that you can add to your css and be any theme from the\nlist above.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003epre\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003eline-height\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e125\u003c/span\u003e\u003cspan class=\"kt\"\u003e%\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003etd\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003elinenos\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enormal\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003einherit\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etransparent\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-left\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-right\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003espan\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003elinenos\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003einherit\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etransparent\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-left\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-right\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003etd\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003elinenos\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003especial\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#000000\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ffffc0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-left\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-right\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003espan\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003elinenos\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003especial\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#000000\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ffffc0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-left\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003epadding-right\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehll\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#49483e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#272822\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ec\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eerr\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ed007e\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#1e0010\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Error */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eesc\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Escape */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eg\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ek\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003el\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003en\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ff4689\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Operator */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ex\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Other */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ep\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Punctuation */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ech\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment.Hashbang */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ecm\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment.Multiline */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ecp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment.Preproc */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ecpf\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment.PreprocFile */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ec1\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment.Single */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ecs\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Comment.Special */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egd\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ff4689\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Deleted */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ege\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efont-style\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eitalic\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Emph */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eges\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efont-weight\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003ebold\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efont-style\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eitalic\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.EmphStrong */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egr\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Error */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egh\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Heading */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egi\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Inserted */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ego\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Output */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ff4689\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efont-weight\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003ebold\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Prompt */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egs\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efont-weight\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003ebold\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Strong */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egu\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#959077\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Subheading */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003egt\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Generic.Traceback */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ekc\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword.Constant */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ekd\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword.Declaration */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ekn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ff4689\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword.Namespace */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ekp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword.Pseudo */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ekr\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword.Reserved */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ekt\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Keyword.Type */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eld\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Date */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003em\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003es\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ena\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Attribute */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Builtin */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enc\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Class */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eno\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#66d9ef\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Constant */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003end\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Decorator */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eni\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Entity */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ene\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Exception */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enf\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Function */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enl\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Label */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Namespace */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003enx\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Other */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003epy\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Property */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ent\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ff4689\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Tag */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003env\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Variable */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eow\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ff4689\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Operator.Word */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003epm\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Punctuation.Marker */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ew\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Text.Whitespace */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003emb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number.Bin */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003emf\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number.Float */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003emh\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number.Hex */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003emi\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number.Integer */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003emo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number.Oct */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esa\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Affix */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Backtick */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esc\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Char */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003edl\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Delimiter */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esd\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Doc */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003es2\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Double */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ese\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Escape */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esh\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Heredoc */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esi\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Interpol */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esx\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Other */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esr\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Regex */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003es1\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Single */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ess\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#e6db74\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.String.Symbol */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ebp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Builtin.Pseudo */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003efm\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#a6e22e\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Function.Magic */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003evc\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Variable.Class */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003evg\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Variable.Global */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003evi\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Variable.Instance */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003evm\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f8f8f2\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Name.Variable.Magic */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehighlight\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003eil\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#ae81ff\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e/* Literal.Number.Integer.Long */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been a long user of pygments, it's been the thing that injects `\u003cspans\u003e`\nwith funny little class names like `sc` and `si` into the code blocks of my\nwebsite.  I've even gone as far as implementing a [plugin for\nmd-it](https://github.com/WaylonWalker/markata/blob/main/markata/plugins/md_it_highlight_code.py),\nbut I had no idea how to re-style it.  I long ago got a theme that looked good\nenough from somewhere and just used it, maybe I pulled something from their\ndocs site and forgot.  Today I learned you can list all the themes easily from\nthe library itself, and render out new css.\n\n``` python\nfrom pygments.styles import get_all_styles\nlist(get_all_styles())\n# [\n#     'abap',\n#     'algol_nu',\n#     'algol',\n#     'arduino',\n#     'autumn',\n#     'borland',\n#     'bw',\n#     'colorful',\n#     'default',\n#     'dracula',\n#     'emacs',\n#     'friendly_grayscale',\n#     'friendly',\n#     'fruity',\n#     'github-dark',\n#     'gruvbox-dark',\n#     'gruvbox-light',\n#     'igor',\n#     'inkpot',\n#     'lightbulb',\n#     'lilypond',\n#     'lovelace',\n#     'manni',\n#     'material',\n#     'monokai',\n#     'murphy',\n#     'native',\n#     'nord-darker',\n#     'nord',\n#     'one-dark',\n#     'paraiso-dark',\n#     'paraiso-light',\n#     'pastie',\n#     'perldoc',\n#     'rainbow_dash',\n#     'rrt',\n#     'sas',\n#     'solarized-dark',\n#     'solarized-light',\n#     'staroffice',\n#     'stata-dark',\n#     'stata-light',\n#     'stata',\n#     'tango',\n#     'trac',\n#     'vim',\n#     'vs',\n#     'xcode',\n#     'zenburn'\n# ]\n```\n\n``` python\nfrom pygments.formatters import HtmlFormatter\nfrom pygments.styles import get_style_by_name\nstyle = get_style_by_name(\"monokai\")\nformatter = HtmlFormatter(style=style)\nprint(formatter.get_style_defs('.highlight'))\n```\n\nAnd now you get styles that you can add to your css and be any theme from the\nlist above.\n\n``` css\npre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #49483e }\n.highlight { background: #272822; color: #f8f8f2 }\n.highlight .c { color: #959077 } /* Comment */\n.highlight .err { color: #ed007e; background-color: #1e0010 } /* Error */\n.highlight .esc { color: #f8f8f2 } /* Escape */\n.highlight .g { color: #f8f8f2 } /* Generic */\n.highlight .k { color: #66d9ef } /* Keyword */\n.highlight .l { color: #ae81ff } /* Literal */\n.highlight .n { color: #f8f8f2 } /* Name */\n.highlight .o { color: #ff4689 } /* Operator */\n.highlight .x { color: #f8f8f2 } /* Other */\n.highlight .p { color: #f8f8f2 } /* Punctuation */\n.highlight .ch { color: #959077 } /* Comment.Hashbang */\n.highlight .cm { color: #959077 } /* Comment.Multiline */\n.highlight .cp { color: #959077 } /* Comment.Preproc */\n.highlight .cpf { color: #959077 } /* Comment.PreprocFile */\n.highlight .c1 { color: #959077 } /* Comment.Single */\n.highlight .cs { color: #959077 } /* Comment.Special */\n.highlight .gd { color: #ff4689 } /* Generic.Deleted */\n.highlight .ge { color: #f8f8f2; font-style: italic } /* Generic.Emph */\n.highlight .ges { color: #f8f8f2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n.highlight .gr { color: #f8f8f2 } /* Generic.Error */\n.highlight .gh { color: #f8f8f2 } /* Generic.Heading */\n.highlight .gi { color: #a6e22e } /* Generic.Inserted */\n.highlight .go { color: #66d9ef } /* Generic.Output */\n.highlight .gp { color: #ff4689; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { color: #f8f8f2; font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #959077 } /* Generic.Subheading */\n.highlight .gt { color: #f8f8f2 } /* Generic.Traceback */\n.highlight .kc { color: #66d9ef } /* Keyword.Constant */\n.highlight .kd { color: #66d9ef } /* Keyword.Declaration */\n.highlight .kn { color: #ff4689 } /* Keyword.Namespace */\n.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */\n.highlight .kr { color: #66d9ef } /* Keyword.Reserved */\n.highlight .kt { color: #66d9ef } /* Keyword.Type */\n.highlight .ld { color: #e6db74 } /* Literal.Date */\n.highlight .m { color: #ae81ff } /* Literal.Number */\n.highlight .s { color: #e6db74 } /* Literal.String */\n.highlight .na { color: #a6e22e } /* Name.Attribute */\n.highlight .nb { color: #f8f8f2 } /* Name.Builtin */\n.highlight .nc { color: #a6e22e } /* Name.Class */\n.highlight .no { color: #66d9ef } /* Name.Constant */\n.highlight .nd { color: #a6e22e } /* Name.Decorator */\n.highlight .ni { color: #f8f8f2 } /* Name.Entity */\n.highlight .ne { color: #a6e22e } /* Name.Exception */\n.highlight .nf { color: #a6e22e } /* Name.Function */\n.highlight .nl { color: #f8f8f2 } /* Name.Label */\n.highlight .nn { color: #f8f8f2 } /* Name.Namespace */\n.highlight .nx { color: #a6e22e } /* Name.Other */\n.highlight .py { color: #f8f8f2 } /* Name.Property */\n.highlight .nt { color: #ff4689 } /* Name.Tag */\n.highlight .nv { color: #f8f8f2 } /* Name.Variable */\n.highlight .ow { color: #ff4689 } /* Operator.Word */\n.highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */\n.highlight .w { color: #f8f8f2 } /* Text.Whitespace */\n.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */\n.highlight .mf { color: #ae81ff } /* Literal.Number.Float */\n.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */\n.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */\n.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */\n.highlight .sa { color: #e6db74 } /* Literal.String.Affix */\n.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */\n.highlight .sc { color: #e6db74 } /* Literal.String.Char */\n.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */\n.highlight .sd { color: #e6db74 } /* Literal.String.Doc */\n.highlight .s2 { color: #e6db74 } /* Literal.String.Double */\n.highlight .se { color: #ae81ff } /* Literal.String.Escape */\n.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */\n.highlight .si { color: #e6db74 } /* Literal.String.Interpol */\n.highlight .sx { color: #e6db74 } /* Literal.String.Other */\n.highlight .sr { color: #e6db74 } /* Literal.String.Regex */\n.highlight .s1 { color: #e6db74 } /* Literal.String.Single */\n.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */\n.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #a6e22e } /* Name.Function.Magic */\n.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */\n.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */\n.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */\n.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */\n.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */\n```\n",
      "summary": "I've been a long user of pygments, it's been the thing that injects with funny little class names like and into the code blocks of my website. I've even gone...",
      "date_published": "2025-07-17T19:45:19Z",
      "date_modified": "2025-07-17T19:45:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/caelestia-dots-shell/",
      "url": "https://go.waylonwalker.com/caelestia-dots-shell/",
      "title": "⭐ caelestia-dots shell",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/caelestia-dots/shell\" 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\"\u003eshell\u003c/a\u003e by \u003ca href=\"https://github.com/caelestia-dots\" 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\"\u003ecaelestia-dots\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA very segsy desktop shell\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [shell](https://github.com/caelestia-dots/shell) by [caelestia-dots](https://github.com/caelestia-dots).\n\nA very segsy desktop shell\n",
      "summary": "Looking for inspiration? shell by caelestia-dots.",
      "date_published": "2025-07-16T00:32:16Z",
      "date_modified": "2025-07-16T00:32:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-751/",
      "url": "https://go.waylonwalker.com/thought-751/",
      "title": "💭 Quickshell",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://quickshell.org/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQuickshell\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA fully user customizable desktop shell\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003equickshell · quickshell.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis has to be the most incredible looking Desktop experience I’ve ever seen, riced to the nines, more polished than macos, more features than kde plasma, this looks incredible and I want to try it and feel it.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://quickshell.org/assets/showcase/end4.mp4\"\u003ehttps://quickshell.org/assets/showcase/end4.mp4\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://quickshell.org/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQuickshell\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA fully user customizable desktop shell\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003equickshell \u0026middot; quickshell.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis has to be the most incredible looking Desktop experience I've ever seen, riced to the nines, more polished than macos, more features than kde plasma, this looks incredible and I want to try it and feel it.\n\nhttps://quickshell.org/assets/showcase/end4.mp4\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://quickshell.org/",
      "date_published": "2025-07-16T00:30:48Z",
      "date_modified": "2025-07-16T00:30:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-750/",
      "url": "https://go.waylonwalker.com/thought-750/",
      "title": "💭 Stop Complaining About Ubuntu...Just Switch To Arch Already! -...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"HbBF-bmGe2I\" title=\"Stop Complaining About Ubuntu...Just Switch To Arch Already!\" playlabel=\"Play: Stop Complaining About Ubuntu...Just Switch To Arch Already!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDT says it so well in this video, I’ve never really been one to shit on software projects, with maybe a VERY small handful of exceptions.  The shitting on ubuntu always rubbed me wrong, shitting on flatpak and snap I never got, shitting on systemd because of Leonard Pottering I never got, DT puts it in such good words here.  If you don’t like it you are probably not the target audience.\u003c/p\u003e\n\u003cp\u003eIf Ubuntu is too bloated, don’t try to debloat it, this is not windows, we have options, Ubuntu is one option and so much is intertwined together in something like Ubuntu if you think you want to try to \u003cem\u003e“debloat”\u003c/em\u003e it good luck.  If you have a problem with Snaps, this is probably not for you.  You are probably looking for a distro with more control, probably something that you choose everything for.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"HbBF-bmGe2I\" title=\"Stop Complaining About Ubuntu...Just Switch To Arch Already!\" playlabel=\"Play: Stop Complaining About Ubuntu...Just Switch To Arch Already!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDT says it so well in this video, I've never really been one to shit on software projects, with maybe a VERY small handful of exceptions.  The shitting on ubuntu always rubbed me wrong, shitting on flatpak and snap I never got, shitting on systemd because of Leonard Pottering I never got, DT puts it in such good words here.  If you don't like it you are probably not the target audience.  \n\nIf Ubuntu is too bloated, don't try to debloat it, this is not windows, we have options, Ubuntu is one option and so much is intertwined together in something like Ubuntu if you think you want to try to _\"debloat\"_ it good luck.  If you have a problem with Snaps, this is probably not for you.  You are probably looking for a distro with more control, probably something that you choose everything for.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=HbBF-bmGe2I",
      "date_published": "2025-07-15T01:48:46Z",
      "date_modified": "2025-07-15T01:48:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-747/",
      "url": "https://go.waylonwalker.com/thought-747/",
      "title": "💭 Lab Update | Cloudy with a Chance of Tech",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.thomaswimprine.com/blog/2025-07-07-Lab-Update/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://blog.thomaswimprine.com/assets/img/blog/Kub_gnomes_building_cluster_blog.jpg\" alt=\"Lab Update — Update on the lab setup and what I’ve been working on recently.\" loading=\"lazy\"/ data-glightbox=\"description: Lab Update — Update on the lab setup and what I’ve been working on recently.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLab Update\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUpdate on the lab setup and what I’ve been working on recently.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCloudy with a Chance of Tech · blog.thomaswimprine.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAlways enjoy a good read through someone elses setup.  I appreciate the desire for pi clusters they are cute, they seem cheap, but feel a bit overrated (at least for those of us with relatively cheap electricity).  I love seeing the refurb “tiny desktops” getting a second useful life in a \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 after they have serve their useful life in the corporate world sitting behind the monitor of some reception desk.  These things rock, they are underrated, x86_64, not ARM, so they just work.  Until ARM becomes \u003cem\u003emore\u003c/em\u003e normalized in the datacenter this is where its at.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.thomaswimprine.com/blog/2025-07-07-Lab-Update/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://blog.thomaswimprine.com/assets/img/blog/Kub_gnomes_building_cluster_blog.jpg\" alt=\"Lab Update — Update on the lab setup and what I’ve been working on recently.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLab Update\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUpdate on the lab setup and what I’ve been working on recently.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCloudy with a Chance of Tech \u0026middot; blog.thomaswimprine.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAlways enjoy a good read through someone elses setup.  I appreciate the desire for pi clusters they are cute, they seem cheap, but feel a bit overrated (at least for those of us with relatively cheap electricity).  I love seeing the refurb \"tiny desktops\" getting a second useful life in a homelab after they have serve their useful life in the corporate world sitting behind the monitor of some reception desk.  These things rock, they are underrated, x86_64, not ARM, so they just work.  Until ARM becomes _more_ normalized in the datacenter this is where its at.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.thomaswimprine.com/blog/2025-07-07-Lab-Update/",
      "date_published": "2025-07-12T02:16:40Z",
      "date_modified": "2025-07-12T02:16:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-744/",
      "url": "https://go.waylonwalker.com/thought-744/",
      "title": "💭 Notes – 17:00 Wed 9 Jul 2025 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-07-09T17:00Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 17:00 Wed 9 Jul 2025 — Notes – 17:00 Wed 9 Jul 2025\" loading=\"lazy\"/ data-glightbox=\"description: Notes – 17:00 Wed 9 Jul 2025 — Notes – 17:00 Wed 9 Jul 2025\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 17:00 Wed 9 Jul 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 17:00 Wed 9 Jul 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eEnjoying watching David bring together his rss reader day by day. Excited to see where it goes.  Im trying to get better at dropping notes like this without a ton of context, without needing to be right, just a note of whats on my mind and what I’m doing.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-07-09T17:00Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 17:00 Wed 9 Jul 2025 — Notes – 17:00 Wed 9 Jul 2025\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 17:00 Wed 9 Jul 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 17:00 Wed 9 Jul 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nEnjoying watching David bring together his rss reader day by day. Excited to see where it goes.  Im trying to get better at dropping notes like this without a ton of context, without needing to be right, just a note of whats on my mind and what I'm doing.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/notes/2025-07-09T17:00Z/",
      "date_published": "2025-07-09T21:35:23Z",
      "date_modified": "2025-07-09T21:35:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-743/",
      "url": "https://go.waylonwalker.com/thought-743/",
      "title": "💭 uv cache prune",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Jul/8/uv-cache-prune/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003euv cache prune\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you\u0026#39;re running low on disk space and are a uv user, don\u0026#39;t forget about uv cache prune: uv cache prune removes all unused cache entries. For example, the cache …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGood point to check on your uv cache if you are running low on disk space.  I checked mine today, and it wasn’t too bad so I left it alone.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edu -sh \u003cspan class=\"sb\"\u003e`\u003c/span\u003euv cache dir\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/Jul/8/uv-cache-prune/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003euv cache prune\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you\u0026#39;re running low on disk space and are a uv user, don\u0026#39;t forget about uv cache prune: uv cache prune removes all unused cache entries. For example, the cache …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGood point to check on your uv cache if you are running low on disk space.  I checked mine today, and it wasn't too bad so I left it alone.\n\n``` bash\ndu -sh `uv cache dir`\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/Jul/8/uv-cache-prune/#atom-everything",
      "date_published": "2025-07-09T19:41:13Z",
      "date_modified": "2025-07-09T19:41:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "uv",
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-741/",
      "url": "https://go.waylonwalker.com/thought-741/",
      "title": "💭 omarchy/install/webapps.sh at master · basecamp/omarchy",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/basecamp/omarchy/blob/master/install/webapps.sh\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/basecamp/omarchy/blob/master/install/webapps.sh\" alt=\"https://github.com/basecamp/omarchy/blob/master/install/webapps.sh\"/ data-glightbox=\"description: https://github.com/basecamp/omarchy/blob/master/install/webapps.sh\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI’m digging these web2app’s from DHH’s omarchy for setting up an opinionated archlinux hyprland.  This gives a way to quickly open a web app as an app either with a hotkey or run launcher in its own dedicated window that you can put on it’s own workspace.  I really like a workflow of keeping one window per workspace on one monitor and I can quickly navigate between apps with a single hotkey.  This gives you the power to switch through things like chat, terminal, browser, steam game with blazing speed from the keybaord, no clicking no searching, just going directly to it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/basecamp/omarchy/blob/master/install/webapps.sh](/static/https://github.com/basecamp/omarchy/blob/master/install/webapps.sh)\n\nI'm digging these web2app's from DHH's omarchy for setting up an opinionated archlinux hyprland.  This gives a way to quickly open a web app as an app either with a hotkey or run launcher in its own dedicated window that you can put on it's own workspace.  I really like a workflow of keeping one window per workspace on one monitor and I can quickly navigate between apps with a single hotkey.  This gives you the power to switch through things like chat, terminal, browser, steam game with blazing speed from the keybaord, no clicking no searching, just going directly to it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/basecamp/omarchy/blob/master/install/webapps.sh",
      "date_published": "2025-07-08T18:02:18Z",
      "date_modified": "2025-07-08T18:02:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "archlinux",
        "hyprland",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kyantech-palmr/",
      "url": "https://go.waylonwalker.com/kyantech-palmr/",
      "title": "⭐ kyantech Palmr",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/kyantech\" 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\"\u003ekyantech\u003c/a\u003e and their project \u003ca href=\"https://github.com/kyantech/Palmr\" 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\"\u003ePalmr\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🌴 Palmr. is an open-source file-sharing platform focused on privacy and security. It enables users to upload, manage, and share files with features like password protection, custom links, and access control without tracking or limitations. Designed for seamless and secure sharing, Palmr. is completely free.\u003c/p\u003e\n",
      "content_text": "\nCheck out [kyantech](https://github.com/kyantech) and their project [Palmr](https://github.com/kyantech/Palmr).\n\n🌴 Palmr. is an open-source file-sharing platform focused on privacy and security. It enables users to upload, manage, and share files with features like password protection, custom links, and access control without tracking or limitations. Designed for seamless and secure sharing, Palmr. is completely free.\n",
      "summary": "Check out kyantech and their project Palmr.",
      "date_published": "2025-07-08T13:56:21Z",
      "date_modified": "2025-07-08T13:56:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-738/",
      "url": "https://go.waylonwalker.com/thought-738/",
      "title": "💭 GitHub - chase/awrit: A full graphical web browser for Kitty t...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/chase/awrit\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/095d1dc8d30b5ad9464214ed43b6ccc113b40b6741281c7b469420e2e9f73176/chase/awrit\" alt=\"GitHub - chase/awrit: A full graphical web browser for Kitty terminal with mouse and keyboard support — A full graphical web browser for Kitty terminal with mouse and keyboard support - chase/awrit\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - chase/awrit: A full graphical web browser for Kitty terminal with mouse and keyboard support — A full graphical web browser for Kitty terminal with mouse and keyboard support - chase/awrit\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - chase/awrit: A full graphical web browser for Kitty terminal with mouse and keyboard support\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA full graphical web browser for Kitty terminal with mouse and keyboard support - chase/awrit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eawrit is a full graphical browser that runs inside of kitty.  I’ve moved on some of my machines away from kitty as the maintainer has seemed so hostile and there are other great therminals out there, but I’m going to give this a go.  I have kitty running on my hyprland setup as it is the default anyways.  It is actual chromium rendering to a kitty graphics protocol.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/chase/awrit\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/095d1dc8d30b5ad9464214ed43b6ccc113b40b6741281c7b469420e2e9f73176/chase/awrit\" alt=\"GitHub - chase/awrit: A full graphical web browser for Kitty terminal with mouse and keyboard support — A full graphical web browser for Kitty terminal with mouse and keyboard support - chase/awrit\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - chase/awrit: A full graphical web browser for Kitty terminal with mouse and keyboard support\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA full graphical web browser for Kitty terminal with mouse and keyboard support - chase/awrit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nawrit is a full graphical browser that runs inside of kitty.  I've moved on some of my machines away from kitty as the maintainer has seemed so hostile and there are other great therminals out there, but I'm going to give this a go.  I have kitty running on my hyprland setup as it is the default anyways.  It is actual chromium rendering to a kitty graphics protocol.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/chase/awrit",
      "date_published": "2025-07-07T17:57:42Z",
      "date_modified": "2025-07-07T17:57:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "terminal",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tmux-clipboard-on-hyprland/",
      "url": "https://go.waylonwalker.com/tmux-clipboard-on-hyprland/",
      "title": "tmux clipboard on hyprland",
      "content_html": "\u003cp\u003eSmooth clipboard settings for tmux is critical for my workflow.  I’m often\ngrabbing snippets of terminal output to paste into team chats, blog posts, or\nllm prompts.  Admittedly, I’m often doing this with the mouse, unless it’s\ncoming from neovim, which I generally do with motions.  Moving from an \u003ccode\u003exorg\u003c/code\u003e\nbased setup to hyprland has required me to reconfigure my tmux clipboard\nsettings.  This is what I did.\u003c/p\u003e\n\u003cp\u003eFirst install wl-clipboard with \u003ca href=\"/paru/\" class=\"glossary-term\" title=\"paru is a package manager for archlinux that installs packages from the \u003ca href=\"/aur/\" class=\"glossary-term\" title=\"Arch User Repository, a collection of community maintained packages for archlinux.\"\u003eAUR\u003c/a\u003e.\"\u003eparu\u003c/a\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S wl-clipboard\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNext add this to your tmux config.  I’ve long had this config, but with only\nthe \u003ccode\u003exorg\u003c/code\u003e/\u003ccode\u003exclip\u003c/code\u003e setup, now this checks for wl-copy, uses it, or falls back to\nmy old \u003ccode\u003exclip\u003c/code\u003e setup.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel \u003cspan class=\"s2\"\u003e\u0026#34;bash -c \u0026#39;command -v wl-copy \u0026gt;/dev/null \u0026amp;\u0026amp; wl-copy || xclip -i -f -selection primary | xclip -i -selection clipboard\u0026#39;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eset-option -s set-clipboard off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel \u003cspan class=\"s2\"\u003e\u0026#34;bash -c \u0026#39;command -v wl-copy \u0026gt;/dev/null \u0026amp;\u0026amp; wl-copy || xclip -i -f -selection primary | xclip -i -selection clipboard\u0026#39;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nSmooth clipboard settings for tmux is critical for my workflow.  I'm often\ngrabbing snippets of terminal output to paste into team chats, blog posts, or\nllm prompts.  Admittedly, I'm often doing this with the mouse, unless it's\ncoming from neovim, which I generally do with motions.  Moving from an `xorg`\nbased setup to hyprland has required me to reconfigure my tmux clipboard\nsettings.  This is what I did.\n\nFirst install wl-clipboard with paru.\n\n``` bash\nparu -S wl-clipboard\n```\n\nNext add this to your tmux config.  I've long had this config, but with only\nthe `xorg`/`xclip` setup, now this checks for wl-copy, uses it, or falls back to\nmy old `xclip` setup.\n\n``` bash\nbind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel \"bash -c 'command -v wl-copy \u003e/dev/null \u0026\u0026 wl-copy || xclip -i -f -selection primary | xclip -i -selection clipboard'\"\nset-option -s set-clipboard off\nbind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel \"bash -c 'command -v wl-copy \u003e/dev/null \u0026\u0026 wl-copy || xclip -i -f -selection primary | xclip -i -selection clipboard'\"\n```\n",
      "summary": "Smooth clipboard settings for tmux is critical for my workflow. I'm often grabbing snippets of terminal output to paste into team chats, blog posts, or llm...",
      "date_published": "2025-07-06T20:45:47Z",
      "date_modified": "2025-07-06T20:45:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "archlinux",
        "hyprland"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-734/",
      "url": "https://go.waylonwalker.com/thought-734/",
      "title": "💭 tailwind hover",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/56755439/modifying-hover-in-tailwindcss\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI need to give this a try for markata glossary\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/56755439/modifying-hover-in-tailwindcss\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI need to give this a try for markata glossary\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/56755439/modifying-hover-in-tailwindcss",
      "date_published": "2025-07-06T02:05:52Z",
      "date_modified": "2025-07-06T02:05:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-733/",
      "url": "https://go.waylonwalker.com/thought-733/",
      "title": "💭 I was wrong - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ZH3iKbEiks0\" title=\"I was wrong btw\" playlabel=\"Play: I was wrong btw\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eNever did I think I would see the day that theprimeagen decided to run \u003ca href=\"https://archlinux.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/archlinux.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/archlinux.org.png\" class=\"has-avatar  has-avatar-before\"\u003earchlinux\u003c/a\u003e.  Furthermore him to start ricing it, EVEN furthermore, \u003ca href=\"https://www.youtube.com/watch?v=pVI_smLgTY0\" 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\"\u003ePewdiepie runs arch\u003c/a\u003e now, and thinks you should too?? and is promoting it on one of the \u003ca href=\"https://socialblade.com/youtube/lists/top/100/subscribers/all/global\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/socialblade.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/socialblade.com.ico\" class=\"has-avatar  has-avatar-before\"\u003elargest YouTube channels ever\u003c/a\u003e??  Even DHH is getting in the mix with \u003ca href=\"https://omarchy.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/omarchy.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/omarchy.org.png\" class=\"has-avatar  has-avatar-before\"\u003eomarchy\u003c/a\u003e Such a cool transistion to see everyone find their way to linux and diving deep into the freedom and customization.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ZH3iKbEiks0\" title=\"I was wrong btw\" playlabel=\"Play: I was wrong btw\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nNever did I think I would see the day that theprimeagen decided to run [archlinux](https://archlinux.org/).  Furthermore him to start ricing it, EVEN furthermore, [Pewdiepie runs arch](https://www.youtube.com/watch?v=pVI_smLgTY0) now, and thinks you should too?? and is promoting it on one of the [largest YouTube channels ever](https://socialblade.com/youtube/lists/top/100/subscribers/all/global)??  Even DHH is getting in the mix with [omarchy](https://omarchy.org/) Such a cool transistion to see everyone find their way to linux and diving deep into the freedom and customization.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ZH3iKbEiks0",
      "date_published": "2025-07-04T16:53:47Z",
      "date_modified": "2025-07-04T16:53:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "archlinux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-731/",
      "url": "https://go.waylonwalker.com/thought-731/",
      "title": "💭 { TechDufus }",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://techdufus.com/#timeline\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://techdufus.com/img/social-default.jpg\" alt=\"Home | { TechDufus } — TechDufus writes about platform engineering, homelab rebuilds, and agent workflows that hold up in the real world.\" loading=\"lazy\"/ data-glightbox=\"description: Home | { TechDufus } — TechDufus writes about platform engineering, homelab rebuilds, and agent workflows that hold up in the real world.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome | { TechDufus }\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTechDufus writes about platform engineering, homelab rebuilds, and agent workflows that hold up in the real world.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e{ TechDufus } · techdufus.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis has to be top tier dopest home page of all time.  The commands are all so well customized and whimsical on the terminal.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/5387bb34-4a9d-4a51-95d2-ed6242c411f8.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/5387bb34-4a9d-4a51-95d2-ed6242c411f8.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://techdufus.com/#timeline\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://techdufus.com/img/social-default.jpg\" alt=\"Home | { TechDufus } — TechDufus writes about platform engineering, homelab rebuilds, and agent workflows that hold up in the real world.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome | { TechDufus }\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTechDufus writes about platform engineering, homelab rebuilds, and agent workflows that hold up in the real world.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e{ TechDufus } \u0026middot; techdufus.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis has to be top tier dopest home page of all time.  The commands are all so well customized and whimsical on the terminal.\n\n![image](https://dropper.wayl.one/api/file/5387bb34-4a9d-4a51-95d2-ed6242c411f8.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://techdufus.com/#timeline",
      "date_published": "2025-07-02T13:35:45Z",
      "date_modified": "2025-07-02T13:35:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homepage",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-726/",
      "url": "https://go.waylonwalker.com/thought-726/",
      "title": "💭 { TechDufus } | Building a Talos Kubernetes Homelab with Terra...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html\" alt=\"https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html\"/ data-glightbox=\"description: https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI’ve ran my \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 on k3s for a year and a half now, and have had talos fomo the whole time.  I’m not sure if this article helps or hurts.  Helps to see that techdufus struggled and wished he went k3s first, but theres so much good to it that I want it.\u003c/p\u003e\n\u003ch2 id=\"prometheus-and-grafana-for-monitoring-because-you-cant-manage-what-you-cant-see\"\u003ePrometheus and Grafana for monitoring (because you can’t manage what you can’t see) \u003ca href=\"#prometheus-and-grafana-for-monitoring-because-you-cant-manage-what-you-cant-see\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’m getting there, ok, I have some of it figured out but not firing on all cylinders like I want.\u003c/p\u003e\n\u003ch2 id=\"cloudnativepg\"\u003eCloudNativePG \u003ca href=\"#cloudnativepg\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003efor PostgreSQL (way better than managing databases manually)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAmen to this, cnpg is kick ass and has me tempted to drop sqlite for my production database default.  I mostly make small shit on the side that is never going to blow up.  sqlite is really good, but the automation that comes along with cnpg to just run it on all nodes and backups once you establish the pattern with the first one is sick.\u003c/p\u003e\n\u003ch2 id=\"-actually-read-the-docs-\"\u003e🤣🤣🤣 actually read the docs 🤣🤣🤣 \u003ca href=\"#-actually-read-the-docs-\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/9c41132e-7808-49af-9aaa-68a5e5870a4b.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/9c41132e-7808-49af-9aaa-68a5e5870a4b.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"is-this-overkill-for-a-homelab\"\u003eIs This Overkill for a Homelab? \u003ca href=\"#is-this-overkill-for-a-homelab\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAbsolutely. Could do most of this with k3s or Docker Compose. But where’s the fun in that?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSpeaking my language here!  Again I’m well past the 1 year mark of running k3s and i’ve had no regrets.  Kubernetes is about establishing and replicating patterns, its a dream to deploy to.  It gets so much hate for being obtuse, hard to use, yaml intense.  You get full control of ever damn thing you need through configuration, and if you keep it simple you can deploy some sick shit out of it without needing to go hard on the yaml, again, think really hard about it a few times, and replicate.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html](/static/https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html)\n\nI've ran my homelab on k3s for a year and a half now, and have had talos fomo the whole time.  I'm not sure if this article helps or hurts.  Helps to see that techdufus struggled and wished he went k3s first, but theres so much good to it that I want it.\n\n## Prometheus and Grafana for monitoring (because you can’t manage what you can’t see)\n\nI'm getting there, ok, I have some of it figured out but not firing on all cylinders like I want.\n\n## CloudNativePG\n\n\u003e for PostgreSQL (way better than managing databases manually)\n\nAmen to this, cnpg is kick ass and has me tempted to drop sqlite for my production database default.  I mostly make small shit on the side that is never going to blow up.  sqlite is really good, but the automation that comes along with cnpg to just run it on all nodes and backups once you establish the pattern with the first one is sick.\n\n## 🤣🤣🤣 actually read the docs 🤣🤣🤣\n\n![image](https://dropper.wayl.one/api/file/9c41132e-7808-49af-9aaa-68a5e5870a4b.webp)\n\n## Is This Overkill for a Homelab?\n\n\u003eAbsolutely. Could do most of this with k3s or Docker Compose. But where’s the fun in that?\n\nSpeaking my language here!  Again I'm well past the 1 year mark of running k3s and i've had no regrets.  Kubernetes is about establishing and replicating patterns, its a dream to deploy to.  It gets so much hate for being obtuse, hard to use, yaml intense.  You get full control of ever damn thing you need through configuration, and if you keep it simple you can deploy some sick shit out of it without needing to go hard on the yaml, again, think really hard about it a few times, and replicate.\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html",
      "date_published": "2025-07-02T01:45:11Z",
      "date_modified": "2025-07-02T01:45:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-725/",
      "url": "https://go.waylonwalker.com/thought-725/",
      "title": "💭 Forming URIs for Autofill | Bitwarden",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bitwarden.com/help/uri-match-detection/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://bitwarden.com/assets/5FndoP1yuFJUfR7o6DZvLw/a29643e884f9e3dcac7461336c591f17/help-uri-match-detection-og.png\" alt=\"Forming URIs for Autofill | Bitwarden — Find out more about how URI match detection works in the Bitwarden password manager.\" loading=\"lazy\"/ data-glightbox=\"description: Forming URIs for Autofill | Bitwarden — Find out more about how URI match detection works in the Bitwarden password manager.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eForming URIs for Autofill | Bitwarden\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFind out more about how URI match detection works in the Bitwarden password manager.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBitwarden · bitwarden.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFor anyone self hosting a bunch of apps under one domain, I just swapped all of mine to Host matching which includes the full subdomain, and it is glorious to not have 9+ items hit on all of your pages and only the one that you actually want.\u003c/p\u003e\n\u003cp\u003eopen one \u0026gt; edit \u0026gt; gear icon next to url \u0026gt; Host\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bitwarden.com/help/uri-match-detection/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://bitwarden.com/assets/5FndoP1yuFJUfR7o6DZvLw/a29643e884f9e3dcac7461336c591f17/help-uri-match-detection-og.png\" alt=\"Forming URIs for Autofill | Bitwarden — Find out more about how URI match detection works in the Bitwarden password manager.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eForming URIs for Autofill | Bitwarden\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFind out more about how URI match detection works in the Bitwarden password manager.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBitwarden \u0026middot; bitwarden.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFor anyone self hosting a bunch of apps under one domain, I just swapped all of mine to Host matching which includes the full subdomain, and it is glorious to not have 9+ items hit on all of your pages and only the one that you actually want.\n\nopen one \u003e edit \u003e gear icon next to url \u003e Host\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bitwarden.com/help/uri-match-detection/",
      "date_published": "2025-06-30T13:21:15Z",
      "date_modified": "2025-06-30T13:21:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-724/",
      "url": "https://go.waylonwalker.com/thought-724/",
      "title": "💭 The decline of \"i use vim btw\" - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"RmnqdAidVeE\" title=\"- YouTube\" playlabel=\"Play: - YouTube\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003evim usage is becoming normie level.  Just like \u003ccode\u003earchinstall\u003c/code\u003e made it too easy to install arch and brought normies into the ecosystem.  It killed ArchBTW^TM^, distros like lazyvim have killed vimBTW^TM^.  It used to be that to run arch, vim, nvim you had to read the docs, and go deep on understanding.  running \u003ccode\u003earchinstall\u003c/code\u003eor lazyvim make it so easy to get started that you miss all of the details, you no longer have to understand ctags, quickfix, what an lsp is, or even how to set your own keybindings.  You just use the damn thing, like you would with VSC****.  No shame to anyone who does this, but you are probably missing out on a bunch of really useful features of a very core tool in your workflow.\u003c/p\u003e\n\u003cp\u003eJust discovered Sylvan Franklin in this post and he is cracked, sub now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"RmnqdAidVeE\" title=\"- YouTube\" playlabel=\"Play: - YouTube\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nvim usage is becoming normie level.  Just like `archinstall` made it too easy to install arch and brought normies into the ecosystem.  It killed ArchBTW^TM^, distros like lazyvim have killed vimBTW^TM^.  It used to be that to run arch, vim, nvim you had to read the docs, and go deep on understanding.  running `archinstall`or lazyvim make it so easy to get started that you miss all of the details, you no longer have to understand ctags, quickfix, what an lsp is, or even how to set your own keybindings.  You just use the damn thing, like you would with VSC****.  No shame to anyone who does this, but you are probably missing out on a bunch of really useful features of a very core tool in your workflow.\n\nJust discovered Sylvan Franklin in this post and he is cracked, sub now.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=RmnqdAidVeE",
      "date_published": "2025-06-29T17:46:52Z",
      "date_modified": "2025-06-29T17:46:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "arch",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-723/",
      "url": "https://go.waylonwalker.com/thought-723/",
      "title": "💭 distrobox/docs/posts/run_libvirt_in_distrobox.md at main · 89l...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md\" alt=\"https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md\"/ data-glightbox=\"description: https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eWish I would have saw this guide and provided assembly file for setting up virt-manager in distrobox.  They call out immutable distros like the knew I was coming.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md](/static/https://github.com/89luca89/distrobox/blob/main/docs/posts/run_libvirt_in_distrobox.md)\n\nWish I would have saw this guide and provided assembly file for setting up virt-manager in distrobox.  They call out immutable distros like the knew I was coming.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/89luca89/distrobox/blob/main/docs/posts/run_in_distrobox.md",
      "date_published": "2025-06-29T02:11:28Z",
      "date_modified": "2025-06-29T02:11:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/virt-manager-on-bazzite/",
      "url": "https://go.waylonwalker.com/virt-manager-on-bazzite/",
      "title": "virt manager on bazzite",
      "content_html": "\u003cp\u003eI got virtual machine manager running on two Bazzite machines today.  It was a\nbit tricky, more than I thought actually.  I ran into all sorts of\nvirtualisation not setup issues when I tried the flatpak.  Then I found that\nBazzite comes with a \u003ccode\u003eujust setup-virtualization\u003c/code\u003e command that does all the\nwork for me.  I tried that and again virtual machine manager was here, but not\nworking, this time it feels like flatpak issues.\u003c/p\u003e\n\u003cp\u003eIn a Hail Mary attempt I got it working by using an ubuntu distrobox container\nto run the UI.  And it worked!\u003c/p\u003e\n\u003ch2 id=\"from-the-host\"\u003efrom the host \u003ca href=\"#from-the-host\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFrom the host we create the container to use from distrobox.  This is an ubuntu\nmachine, it can be any os of your choosing, preferably one that you are\nfamiliar with and contains virt-manager in its package repos.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edistrobox create -i ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edistrobox enter ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"from-inside-the-distrobox-container\"\u003efrom inside the distrobox container \u003ca href=\"#from-inside-the-distrobox-container\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that we are in the distrobox we are no longer in an immutable distro and we\ncan easily install anything we want.  I actually like this process.  I might\nhave shit like this that I use for a month or a few months, on a normal distro,\nthis is fully installed on the os, raises the potential of package conflicts\nand lengthens the update time.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt upgrade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install virtinst virt-manager\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evirt-manager\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"along-the-way\"\u003eAlong the way \u003ca href=\"#along-the-way\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI tried adding myself to the libvirt group, and expicitly setting the socket\npath. After setting up another machine I realized these steps were unnecessary.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo usermod -aG libvirt \u003cspan class=\"nv\"\u003e$USER\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eLIBVIRT_DEFAULT_URI\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;qemu+unix:///system\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003els -l /run/libvirt/libvirt-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evirt-install --version\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eAfter fully reading through `ujust setup-virtualization` I realized that it\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eadds me to the libvirt group, so that’s why it is not needed.\u003c/p\u003e\n\u003c/div\u003e\n\u003ch2 id=\"an-even-better-guide\"\u003eAn even Better Guide \u003ca href=\"#an-even-better-guide\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI later found [[ thoughts-723 ]] there is documentation for setting up virtual\nmachine manager in distrobox in the distrobox docs.  It even calls out running\non an immutable distro like bazzite like it knew I was coming.\u003c/p\u003e\n\u003ch2 id=\"full-log\"\u003efull log \u003ca href=\"#full-log\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylon@razorcrest:~$ distrobox create -i ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eImage ubuntu not found.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDo you want to pull the image now? \u003cspan class=\"o\"\u003e[\u003c/span\u003eY/n\u003cspan class=\"o\"\u003e]\u003c/span\u003e: y\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eResolved \u003cspan class=\"s2\"\u003e\u0026#34;ubuntu\u0026#34;\u003c/span\u003e as an \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e/etc/containers/registries.conf.d/000-shortnames.conf\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTrying to pull docker.io/library/ubuntu:latest...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGetting image \u003cspan class=\"nb\"\u003esource\u003c/span\u003e signatures\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCopying blob d9d352c11bbd \u003cspan class=\"k\"\u003edone\u003c/span\u003e   \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCopying config bf16bdcff9 \u003cspan class=\"k\"\u003edone\u003c/span\u003e   \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWriting manifest to image destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebf16bdcff9c96b76a6d417bd8f0a3abe0e55c0ed9bdb3549e906834e2592fd5f\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating \u003cspan class=\"s1\"\u003e\u0026#39;ubuntu\u0026#39;\u003c/span\u003e using image ubuntu  \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDistrobox \u003cspan class=\"s1\"\u003e\u0026#39;ubuntu\u0026#39;\u003c/span\u003e successfully created.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTo enter, run:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edistrobox enter ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylon@razorcrest:~$ distrobox enter ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eStarting container...                     \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstalling basic packages...              \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up devpts mounts...               \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up read-only mounts...            \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up read-write mounts...           \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up host\u003cspan class=\"s1\"\u003e\u0026#39;s sockets integration...  [ OK ]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003eIntegrating host\u0026#39;\u003c/span\u003es themes, icons, fonts...  \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up distrobox profile...           \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up sudo...                        \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up user groups...                 \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up user\u003cspan class=\"s1\"\u003e\u0026#39;s group list...           [ OK ]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003eSetting up existing user...               [ OK ]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003eEnsuring user\u0026#39;\u003c/span\u003es access...                 \u003cspan class=\"o\"\u003e[\u003c/span\u003e OK \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eContainer Setup Complete!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ sudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install virtinst\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:1 http://security.ubuntu.com/ubuntu noble-security InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:2 http://archive.ubuntu.com/ubuntu noble InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading package lists... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBuilding dependency tree... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading state information... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e packages can be upgraded. Run \u003cspan class=\"s1\"\u003e\u0026#39;apt list --upgradable\u0026#39;\u003c/span\u003e to see them.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading package lists... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBuilding dependency tree... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading state information... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe following additional packages will be installed:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaio1t64 libasyncns0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libboost-iostreams1.83.0 libboost-thread1.83.0 libburn4t64 libcacard0 libcdparanoia0 libcurl3t64-gnutls\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libdaxctl1 libduktape207 libdw1t64 libflac12t64 libfuse3-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libgtk-vnc-2.0-0 libgvnc-1.0-0 libigdgmm12 libiscsi7 libisoburn1t64 libisofs6t64 libjson-glib-1.0-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libjson-glib-1.0-common libmp3lame0 libmpg123-0t64 libndctl6 libnfs14 libnspr4 libnss3 libnuma1 libogg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libopus0 liborc-0.4-0t64 libosinfo-1.0-0 libosinfo-l10n libpcsclite1 libphodav-3.0-0 libphodav-3.0-common\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libpmem1 libpmemobj1 libpolkit-gobject-1-0 libproxy1v5 libpulse0 librados2 librbd1 librdmacm1t64 libsndfile1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libsoup-3.0-0 libsoup-3.0-common libspice-client-glib-2.0-8 libspice-client-gtk-3.0-5 libtheora0 libunwind8\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  liburing2 libusb-1.0-0 libusbredirhost1t64 libusbredirparser1t64 libva-x11-2 libva2 libvirt-clients\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-glib-1.0-0 libvirt-glib-1.0-data libvirt-l10n libvirt0 libvisual-0.4-0 libvorbis0a libvorbisenc2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvte-2.91-0 libxslt1.1 libyajl2 mesa-va-drivers osinfo-db pci.ids python3-certifi python3-chardet\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  python3-idna python3-libvirt python3-libxml2 python3-pkg-resources python3-requests python3-urllib3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  qemu-block-extra qemu-utils spice-client-glib-usb-acl-helper usb.ids va-driver-all virt-viewer xorriso\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSuggested packages:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gvfs i965-va-driver-shaders isoquery fuse3 libvisual-0.4-plugins gstreamer1.0-tools opus-tools pcscd pulseaudio\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-good libvirt-clients-qemu libvirt-daemon\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-login-shell python3-setuptools python3-cryptography python3-openssl python3-socks python-requests-doc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  python3-brotli netcat python3-argcomplete xorriso-tcltk jigit cdck\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe following NEW packages will be installed:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaio1t64 libasyncns0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libboost-iostreams1.83.0 libboost-thread1.83.0 libburn4t64 libcacard0 libcdparanoia0 libcurl3t64-gnutls\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libdaxctl1 libduktape207 libdw1t64 libflac12t64 libfuse3-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libgtk-vnc-2.0-0 libgvnc-1.0-0 libigdgmm12 libiscsi7 libisoburn1t64 libisofs6t64 libjson-glib-1.0-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libjson-glib-1.0-common libmp3lame0 libmpg123-0t64 libndctl6 libnfs14 libnspr4 libnss3 libnuma1 libogg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libopus0 liborc-0.4-0t64 libosinfo-1.0-0 libosinfo-l10n libpcsclite1 libphodav-3.0-0 libphodav-3.0-common\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libpmem1 libpmemobj1 libpolkit-gobject-1-0 libproxy1v5 libpulse0 librados2 librbd1 librdmacm1t64 libsndfile1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libsoup-3.0-0 libsoup-3.0-common libspice-client-glib-2.0-8 libspice-client-gtk-3.0-5 libtheora0 libunwind8\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  liburing2 libusb-1.0-0 libusbredirhost1t64 libusbredirparser1t64 libva-x11-2 libva2 libvirt-clients\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-glib-1.0-0 libvirt-glib-1.0-data libvirt-l10n libvirt0 libvisual-0.4-0 libvorbis0a libvorbisenc2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvte-2.91-0 libxslt1.1 libyajl2 mesa-va-drivers osinfo-db pci.ids python3-certifi python3-chardet\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  python3-idna python3-libvirt python3-libxml2 python3-pkg-resources python3-requests python3-urllib3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  qemu-block-extra qemu-utils spice-client-glib-usb-acl-helper usb.ids va-driver-all virt-viewer virtinst xorriso\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e upgraded, \u003cspan class=\"m\"\u003e98\u003c/span\u003e newly installed, \u003cspan class=\"m\"\u003e0\u003c/span\u003e to remove and \u003cspan class=\"m\"\u003e4\u003c/span\u003e not upgraded.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNeed to get 34.2 MB of archives.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAfter this operation, \u003cspan class=\"m\"\u003e143\u003c/span\u003e MB of additional disk space will be used.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDo you want to \u003cspan class=\"k\"\u003econtinue\u003c/span\u003e? \u003cspan class=\"o\"\u003e[\u003c/span\u003eY/n\u003cspan class=\"o\"\u003e]\u003c/span\u003e y\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:1 http://archive.ubuntu.com/ubuntu noble/main amd64 iso-codes all 4.16.0-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e3,492 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:2 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-pkg-resources all 68.1.2-2ubuntu1.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e168\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:3 http://archive.ubuntu.com/ubuntu noble/main amd64 libfuse3-3 amd64 3.14.0-5build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e83.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:4 http://archive.ubuntu.com/ubuntu noble/main amd64 libnuma1 amd64 2.0.18-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e23.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:5 http://archive.ubuntu.com/ubuntu noble/main amd64 libusb-1.0-0 amd64 2:1.0.27-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e54.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 pci.ids all 0.0~2024.03.31-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e275\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:7 http://archive.ubuntu.com/ubuntu noble/main amd64 usb.ids all 2024.03.18-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e223\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:8 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-freedesktop amd64 1.80.1-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e49.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:9 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libcurl3t64-gnutls amd64 8.5.0-2ubuntu10.6 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e333\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:10 http://archive.ubuntu.com/ubuntu noble/main amd64 libduktape207 amd64 2.7.0+tests-0ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e143\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libproxy1v5 amd64 0.5.4-4build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e26.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:12 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking-common all 2.80.0-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e6,702 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:13 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking-services amd64 2.80.0-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e12.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:14 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking amd64 2.80.0-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e64.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:15 http://archive.ubuntu.com/ubuntu noble/main amd64 libcdparanoia0 amd64 3.10.2+debian-14build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e48.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:16 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdw1t64 amd64 0.190-1.1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e261\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:17 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libunwind8 amd64 1.6.2-3build1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e55.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:18 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer1.0-0 amd64 1.24.2-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,165 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liborc-0.4-0t64 amd64 1:0.4.38-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e207\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:20 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-base1.0-0 amd64 1.24.2-1ubuntu0.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e862\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:21 http://archive.ubuntu.com/ubuntu noble/main amd64 libogg0 amd64 1.3.5-3build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e22.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:22 http://archive.ubuntu.com/ubuntu noble/main amd64 libopus0 amd64 1.4-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e208\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:23 http://archive.ubuntu.com/ubuntu noble/main amd64 libtheora0 amd64 1.1.1+dfsg.1-16.1build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e211\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:24 http://archive.ubuntu.com/ubuntu noble/main amd64 libvisual-0.4-0 amd64 0.4.2-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e115\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:25 http://archive.ubuntu.com/ubuntu noble/main amd64 libvorbis0a amd64 1.3.7-1build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e97.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:26 http://archive.ubuntu.com/ubuntu noble/main amd64 libvorbisenc2 amd64 1.3.7-1build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e80.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:27 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-base amd64 1.24.2-1ubuntu0.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e721\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:28 http://archive.ubuntu.com/ubuntu noble/universe amd64 libva2 amd64 2.20.0-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e66.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:29 http://archive.ubuntu.com/ubuntu noble/universe amd64 libigdgmm12 amd64 22.3.17+ds1-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e145\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:30 http://archive.ubuntu.com/ubuntu noble/universe amd64 intel-media-va-driver amd64 24.1.0+dfsg1-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e4,022 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:31 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libaio1t64 amd64 0.3.113-6build1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e7,210 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:32 http://archive.ubuntu.com/ubuntu noble/main amd64 libasyncns0 amd64 0.8-6build4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e11.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:33 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-iostreams1.83.0 amd64 1.83.0-2.1ubuntu3.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e259\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:34 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-thread1.83.0 amd64 1.83.0-2.1ubuntu3.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e276\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libburn4t64 amd64 1.5.6-1.1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e158\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libnspr4 amd64 2:4.35-1.1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e117\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:37 http://archive.ubuntu.com/ubuntu noble/main amd64 libnss3 amd64 2:3.98-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,445 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:38 http://archive.ubuntu.com/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.3-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e21.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libcacard0 amd64 1:2.8.0-3build4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e36.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:40 http://archive.ubuntu.com/ubuntu noble/main amd64 libdaxctl1 amd64 77-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e21.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:41 http://archive.ubuntu.com/ubuntu noble/main amd64 libflac12t64 amd64 1.4.3+ds-2.1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e197\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:42 http://archive.ubuntu.com/ubuntu noble/main amd64 libmp3lame0 amd64 3.100-6build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e142\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:43 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libmpg123-0t64 amd64 1.32.5-1ubuntu1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e169\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:44 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsndfile1 amd64 1.2.2-1ubuntu5.24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e209\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:45 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpulse0 amd64 1:16.1+dfsg1-2ubuntu10.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e292\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:46 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgvnc-1.0-0 amd64 1.3.1-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e67.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:47 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtk-vnc-2.0-0 amd64 1.3.1-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e28.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:48 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librdmacm1t64 amd64 50.0-2ubuntu0.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e70.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:49 http://archive.ubuntu.com/ubuntu noble/main amd64 libiscsi7 amd64 1.19.0-3build4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e68.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:50 http://archive.ubuntu.com/ubuntu noble/main amd64 libisofs6t64 amd64 1.5.6.pl01-1.1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e220\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:51 http://archive.ubuntu.com/ubuntu noble/main amd64 libisoburn1t64 amd64 1:1.5.6-1.1ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e405\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:52 http://archive.ubuntu.com/ubuntu noble/main amd64 libjson-glib-1.0-common all 1.8.0-2build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e4,244 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:53 http://archive.ubuntu.com/ubuntu noble/main amd64 libjson-glib-1.0-0 amd64 1.8.0-2build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e68.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:54 http://archive.ubuntu.com/ubuntu noble/main amd64 libndctl6 amd64 77-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e62.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:55 http://archive.ubuntu.com/ubuntu noble/main amd64 libnfs14 amd64 5.0.2-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e109\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:56 http://archive.ubuntu.com/ubuntu noble/universe amd64 libphodav-3.0-common all 3.0-8build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e14.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:57 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsoup-3.0-common all 3.4.4-5ubuntu0.4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e11.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:58 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsoup-3.0-0 amd64 3.4.4-5ubuntu0.4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e290\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:59 http://archive.ubuntu.com/ubuntu noble/universe amd64 libphodav-3.0-0 amd64 3.0-8build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e29.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:60 http://archive.ubuntu.com/ubuntu noble/main amd64 libpmem1 amd64 1.13.1-1.1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e84.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:61 http://archive.ubuntu.com/ubuntu noble/main amd64 libpmemobj1 amd64 1.13.1-1.1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e116\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:62 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpolkit-gobject-1-0 amd64 124-2ubuntu1.24.04.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e49.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:63 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librados2 amd64 19.2.0-0ubuntu0.24.04.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e3,972 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:64 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librbd1 amd64 19.2.0-0ubuntu0.24.04.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e3,351 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:65 http://archive.ubuntu.com/ubuntu noble/universe amd64 spice-client-glib-usb-acl-helper amd64 0.42-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e12.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libusbredirparser1t64 amd64 0.13.0-2.1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e16.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libusbredirhost1t64 amd64 0.13.0-2.1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e20.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:68 http://archive.ubuntu.com/ubuntu noble/universe amd64 libspice-client-glib-2.0-8 amd64 0.42-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e314\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:69 http://archive.ubuntu.com/ubuntu noble/universe amd64 libva-x11-2 amd64 2.20.0-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e12.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:70 http://archive.ubuntu.com/ubuntu noble/universe amd64 libspice-client-gtk-3.0-5 amd64 0.42-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e56.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:71 http://archive.ubuntu.com/ubuntu noble/main amd64 liburing2 amd64 2.5-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e21.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:72 http://archive.ubuntu.com/ubuntu noble/main amd64 libyajl2 amd64 2.1.0-5build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e20.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:73 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt0 amd64 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,826 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:74 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-clients amd64 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e438\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:75 http://archive.ubuntu.com/ubuntu noble/universe amd64 libvirt-glib-1.0-data all 5.0.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e17.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:76 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-l10n all 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,150 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:77 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvte-2.91-0 amd64 0.76.0-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e230\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:78 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxslt1.1 amd64 1.1.39-0exp1ubuntu0.24.04.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e167\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:79 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 mesa-va-drivers amd64 24.2.8-1ubuntu1~24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e19.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:80 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 osinfo-db all 0.20250124-0ubuntu0.24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e176\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:81 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-certifi all 2023.11.17-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e165\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:82 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-chardet all 5.2.0+dfsg-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e117\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:83 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-idna all 3.6-2ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e49.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:84 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-libvirt amd64 10.0.0-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e164\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:85 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-libxml2 amd64 2.9.14+dfsg-1.3ubuntu3.3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e140\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:86 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-urllib3 all 2.0.7-1ubuntu0.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e93.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:87 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-requests all 2.31.0+dfsg-1ubuntu1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e50.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:88 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-utils amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e2,220 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:89 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-block-extra amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e111\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:90 http://archive.ubuntu.com/ubuntu noble/universe amd64 i965-va-driver amd64 2.4.1+dfsg1-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e332\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:91 http://archive.ubuntu.com/ubuntu noble/universe amd64 va-driver-all amd64 2.20.0-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e4,844 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:92 http://archive.ubuntu.com/ubuntu noble/universe amd64 libvirt-glib-1.0-0 amd64 5.0.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e121\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:93 http://archive.ubuntu.com/ubuntu noble/universe amd64 virt-viewer amd64 11.0-3build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e285\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:94 http://archive.ubuntu.com/ubuntu noble/main amd64 xorriso amd64 1:1.5.6-1.1ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e297\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:95 http://archive.ubuntu.com/ubuntu noble/universe amd64 libosinfo-l10n all 1.11.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e50.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:96 http://archive.ubuntu.com/ubuntu noble/universe amd64 libosinfo-1.0-0 amd64 1.11.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e91.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:97 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-libosinfo-1.0 amd64 1.11.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e18.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:98 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 virtinst all 1:4.1.0-3ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e891\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFetched 34.2 MB in 3s \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.8 MB/s\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExtracting templates from packages: 100%\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package iso-codes.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003eReading database ... \u003cspan class=\"m\"\u003e26588\u003c/span\u003e files and directories currently installed.\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../00-iso-codes_4.16.0-1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking iso-codes \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.16.0-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-pkg-resources.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../01-python3-pkg-resources_68.1.2-2ubuntu1.2_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-pkg-resources \u003cspan class=\"o\"\u003e(\u003c/span\u003e68.1.2-2ubuntu1.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libfuse3-3:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../02-libfuse3-3_3.14.0-5build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libfuse3-3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.14.0-5build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnuma1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../03-libnuma1_2.0.18-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnuma1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.0.18-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libusb-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../04-libusb-1.0-0_2%3a1.0.27-1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libusb-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.0.27-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package pci.ids.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../05-pci.ids_0.0~2024.03.31-1ubuntu0.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking pci.ids \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.0~2024.03.31-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package usb.ids.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../06-usb.ids_2024.03.18-1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking usb.ids \u003cspan class=\"o\"\u003e(\u003c/span\u003e2024.03.18-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-freedesktop:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../07-gir1.2-freedesktop_1.80.1-1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-freedesktop:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.80.1-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libcurl3t64-gnutls:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../08-libcurl3t64-gnutls_8.5.0-2ubuntu10.6_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libcurl3t64-gnutls:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e8.5.0-2ubuntu10.6\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libduktape207:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../09-libduktape207_2.7.0+tests-0ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libduktape207:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.7.0+tests-0ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libproxy1v5:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../10-libproxy1v5_0.5.4-4build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libproxy1v5:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.4-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package glib-networking-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../11-glib-networking-common_2.80.0-1build1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking glib-networking-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package glib-networking-services.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../12-glib-networking-services_2.80.0-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking glib-networking-services \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package glib-networking:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../13-glib-networking_2.80.0-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking glib-networking:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libcdparanoia0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../14-libcdparanoia0_3.10.2+debian-14build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libcdparanoia0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.10.2+debian-14build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdw1t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../15-libdw1t64_0.190-1.1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdw1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.190-1.1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libunwind8:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../16-libunwind8_1.6.2-3build1.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libunwind8:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.6.2-3build1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgstreamer1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../17-libgstreamer1.0-0_1.24.2-1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgstreamer1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package liborc-0.4-0t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../18-liborc-0.4-0t64_1%3a0.4.38-1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking liborc-0.4-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:0.4.38-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgstreamer-plugins-base1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../19-libgstreamer-plugins-base1.0-0_1.24.2-1ubuntu0.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgstreamer-plugins-base1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libogg0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../20-libogg0_1.3.5-3build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libogg0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.5-3build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libopus0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../21-libopus0_1.4-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libopus0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.4-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libtheora0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../22-libtheora0_1.1.1+dfsg.1-16.1build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libtheora0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.1.1+dfsg.1-16.1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvisual-0.4-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../23-libvisual-0.4-0_0.4.2-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvisual-0.4-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.4.2-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvorbis0a:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../24-libvorbis0a_1.3.7-1build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvorbis0a:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.7-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvorbisenc2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../25-libvorbisenc2_1.3.7-1build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvorbisenc2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.7-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gstreamer1.0-plugins-base:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../26-gstreamer1.0-plugins-base_1.24.2-1ubuntu0.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gstreamer1.0-plugins-base:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libva2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../27-libva2_2.20.0-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libva2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.20.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libigdgmm12:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../28-libigdgmm12_22.3.17+ds1-1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libigdgmm12:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e22.3.17+ds1-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package intel-media-va-driver:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../29-intel-media-va-driver_24.1.0+dfsg1-1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking intel-media-va-driver:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e24.1.0+dfsg1-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libaio1t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../30-libaio1t64_0.3.113-6build1.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libaio1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.3.113-6build1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libasyncns0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../31-libasyncns0_0.8-6build4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libasyncns0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.8-6build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libboost-iostreams1.83.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../32-libboost-iostreams1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libboost-iostreams1.83.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.83.0-2.1ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libboost-thread1.83.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../33-libboost-thread1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libboost-thread1.83.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.83.0-2.1ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libburn4t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../34-libburn4t64_1.5.6-1.1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libburn4t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.5.6-1.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnspr4:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../35-libnspr4_2%3a4.35-1.1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnspr4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:4.35-1.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnss3:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../36-libnss3_2%3a3.98-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnss3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:3.98-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpcsclite1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../37-libpcsclite1_2.0.3-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpcsclite1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.0.3-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libcacard0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../38-libcacard0_1%3a2.8.0-3build4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libcacard0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:2.8.0-3build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdaxctl1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../39-libdaxctl1_77-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdaxctl1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e77-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libflac12t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../40-libflac12t64_1.4.3+ds-2.1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libflac12t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.4.3+ds-2.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libmp3lame0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../41-libmp3lame0_3.100-6build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libmp3lame0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.100-6build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libmpg123-0t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../42-libmpg123-0t64_1.32.5-1ubuntu1.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libmpg123-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.32.5-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libsndfile1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../43-libsndfile1_1.2.2-1ubuntu5.24.04.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libsndfile1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.2-1ubuntu5.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpulse0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../44-libpulse0_1%3a16.1+dfsg1-2ubuntu10.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpulse0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:16.1+dfsg1-2ubuntu10.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgvnc-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../45-libgvnc-1.0-0_1.3.1-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgvnc-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgtk-vnc-2.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../46-libgtk-vnc-2.0-0_1.3.1-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgtk-vnc-2.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package librdmacm1t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../47-librdmacm1t64_50.0-2ubuntu0.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking librdmacm1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e50.0-2ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libiscsi7:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../48-libiscsi7_1.19.0-3build4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libiscsi7:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.19.0-3build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libisofs6t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../49-libisofs6t64_1.5.6.pl01-1.1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libisofs6t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.5.6.pl01-1.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libisoburn1t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../50-libisoburn1t64_1%3a1.5.6-1.1ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libisoburn1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:1.5.6-1.1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libjson-glib-1.0-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../51-libjson-glib-1.0-common_1.8.0-2build2_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libjson-glib-1.0-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libjson-glib-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../52-libjson-glib-1.0-0_1.8.0-2build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libjson-glib-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libndctl6:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../53-libndctl6_77-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libndctl6:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e77-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnfs14:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../54-libnfs14_5.0.2-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnfs14:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.2-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libphodav-3.0-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../55-libphodav-3.0-common_3.0-8build3_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libphodav-3.0-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.0-8build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libsoup-3.0-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../56-libsoup-3.0-common_3.4.4-5ubuntu0.4_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libsoup-3.0-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.4.4-5ubuntu0.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libsoup-3.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../57-libsoup-3.0-0_3.4.4-5ubuntu0.4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libsoup-3.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.4.4-5ubuntu0.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libphodav-3.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../58-libphodav-3.0-0_3.0-8build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libphodav-3.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.0-8build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpmem1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../59-libpmem1_1.13.1-1.1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpmem1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpmemobj1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../60-libpmemobj1_1.13.1-1.1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpmemobj1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpolkit-gobject-1-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../61-libpolkit-gobject-1-0_124-2ubuntu1.24.04.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpolkit-gobject-1-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e124-2ubuntu1.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package librados2.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../62-librados2_19.2.0-0ubuntu0.24.04.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking librados2 \u003cspan class=\"o\"\u003e(\u003c/span\u003e19.2.0-0ubuntu0.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package librbd1.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../63-librbd1_19.2.0-0ubuntu0.24.04.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking librbd1 \u003cspan class=\"o\"\u003e(\u003c/span\u003e19.2.0-0ubuntu0.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package spice-client-glib-usb-acl-helper.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../64-spice-client-glib-usb-acl-helper_0.42-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking spice-client-glib-usb-acl-helper \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libusbredirparser1t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../65-libusbredirparser1t64_0.13.0-2.1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libusbredirparser1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.13.0-2.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libusbredirhost1t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../66-libusbredirhost1t64_0.13.0-2.1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libusbredirhost1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.13.0-2.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libspice-client-glib-2.0-8:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../67-libspice-client-glib-2.0-8_0.42-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libspice-client-glib-2.0-8:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libva-x11-2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../68-libva-x11-2_2.20.0-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libva-x11-2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.20.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libspice-client-gtk-3.0-5:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../69-libspice-client-gtk-3.0-5_0.42-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libspice-client-gtk-3.0-5:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package liburing2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../70-liburing2_2.5-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking liburing2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.5-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libyajl2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../71-libyajl2_2.1.0-5build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libyajl2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.1.0-5build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../72-libvirt0_10.0.0-2ubuntu8.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-clients.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../73-libvirt-clients_10.0.0-2ubuntu8.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-clients \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-glib-1.0-data.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../74-libvirt-glib-1.0-data_5.0.0-2build3_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-glib-1.0-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-l10n.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../75-libvirt-l10n_10.0.0-2ubuntu8.7_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-l10n \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvte-2.91-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../76-libvte-2.91-0_0.76.0-1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvte-2.91-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.76.0-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libxslt1.1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../77-libxslt1.1_1.1.39-0exp1ubuntu0.24.04.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libxslt1.1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.1.39-0exp1ubuntu0.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package mesa-va-drivers:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../78-mesa-va-drivers_24.2.8-1ubuntu1~24.04.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking mesa-va-drivers:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e24.2.8-1ubuntu1~24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package osinfo-db.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../79-osinfo-db_0.20250124-0ubuntu0.24.04.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking osinfo-db \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.20250124-0ubuntu0.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-certifi.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../80-python3-certifi_2023.11.17-1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-certifi \u003cspan class=\"o\"\u003e(\u003c/span\u003e2023.11.17-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-chardet.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../81-python3-chardet_5.2.0+dfsg-1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-chardet \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.2.0+dfsg-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-idna.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../82-python3-idna_3.6-2ubuntu0.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-idna \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.6-2ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-libvirt.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../83-python3-libvirt_10.0.0-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-libvirt \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-libxml2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../84-python3-libxml2_2.9.14+dfsg-1.3ubuntu3.3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-libxml2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.9.14+dfsg-1.3ubuntu3.3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-urllib3.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../85-python3-urllib3_2.0.7-1ubuntu0.2_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-urllib3 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.0.7-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-requests.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../86-python3-requests_2.31.0+dfsg-1ubuntu1.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-requests \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.31.0+dfsg-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-utils.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../87-qemu-utils_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-utils \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-block-extra.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../88-qemu-block-extra_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-block-extra \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package i965-va-driver:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../89-i965-va-driver_2.4.1+dfsg1-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking i965-va-driver:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.4.1+dfsg1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package va-driver-all:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../90-va-driver-all_2.20.0-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking va-driver-all:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.20.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-glib-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../91-libvirt-glib-1.0-0_5.0.0-2build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-glib-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package virt-viewer.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../92-virt-viewer_11.0-3build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking virt-viewer \u003cspan class=\"o\"\u003e(\u003c/span\u003e11.0-3build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package xorriso.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../93-xorriso_1%3a1.5.6-1.1ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking xorriso \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:1.5.6-1.1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libosinfo-l10n.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../94-libosinfo-l10n_1.11.0-2build3_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libosinfo-l10n \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.11.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libosinfo-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../95-libosinfo-1.0-0_1.11.0-2build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libosinfo-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.11.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-libosinfo-1.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../96-gir1.2-libosinfo-1.0_1.11.0-2build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-libosinfo-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.11.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package virtinst.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../97-virtinst_1%3a4.1.0-3ubuntu0.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking virtinst \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:4.1.0-3ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-pkg-resources \u003cspan class=\"o\"\u003e(\u003c/span\u003e68.1.2-2ubuntu1.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libcdparanoia0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.10.2+debian-14build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up pci.ids \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.0~2024.03.31-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-freedesktop:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.80.1-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libogg0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.5-3build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libphodav-3.0-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.0-8build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvisual-0.4-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.4.2-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libyajl2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.1.0-5build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libcurl3t64-gnutls:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e8.5.0-2ubuntu10.6\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libboost-thread1.83.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.83.0-2.1ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libigdgmm12:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e22.3.17+ds1-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libsoup-3.0-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.4.4-5ubuntu0.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libmpg123-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.32.5-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvte-2.91-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.76.0-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libunwind8:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.6.2-3build1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnfs14:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.2-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up liborc-0.4-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:0.4.38-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdw1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.190-1.1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-libxml2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.9.14+dfsg-1.3ubuntu3.3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-chardet \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.2.0+dfsg-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-glib-1.0-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libva2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.20.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-certifi \u003cspan class=\"o\"\u003e(\u003c/span\u003e2023.11.17-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnspr4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:4.35-1.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libboost-iostreams1.83.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.83.0-2.1ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libopus0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.4-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up intel-media-va-driver:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e24.1.0+dfsg1-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvorbis0a:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.7-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-idna \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.6-2ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up usb.ids \u003cspan class=\"o\"\u003e(\u003c/span\u003e2024.03.18-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up osinfo-db \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.20250124-0ubuntu0.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpcsclite1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.0.3-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libfuse3-3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.14.0-5build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdaxctl1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e77-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-urllib3 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.0.7-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnuma1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.0.18-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libaio1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.3.113-6build1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-glib-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libisofs6t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.5.6.pl01-1.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libduktape207:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.7.0+tests-0ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libasyncns0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.8-6build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libusbredirparser1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.13.0-2.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libtheora0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.1.1+dfsg.1-16.1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libxslt1.1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.1.39-0exp1ubuntu0.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libburn4t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.5.6-1.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libndctl6:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e77-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up librdmacm1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e50.0-2ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libjson-glib-1.0-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libflac12t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.4.3+ds-2.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libusb-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.0.27-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up mesa-va-drivers:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e24.2.8-1ubuntu1~24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up glib-networking-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up liburing2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.5-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libiscsi7:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.19.0-3build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libisoburn1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:1.5.6-1.1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up xorriso \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:1.5.6-1.1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpmem1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libva-x11-2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.20.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up iso-codes \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.16.0-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpolkit-gobject-1-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e124-2ubuntu1.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgstreamer1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetcap worked! gst-ptp-helper is not suid!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libmp3lame0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.100-6build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up i965-va-driver:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.4.1+dfsg1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libosinfo-l10n \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.11.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvorbisenc2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.7-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up librados2 \u003cspan class=\"o\"\u003e(\u003c/span\u003e19.2.0-0ubuntu0.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libproxy1v5:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.4-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-libvirt \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-clients \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up spice-client-glib-usb-acl-helper \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgstreamer-plugins-base1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnss3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:3.98-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libcacard0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:2.8.0-3build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libusbredirhost1t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.13.0-2.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libjson-glib-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gstreamer1.0-plugins-base:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-l10n \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up va-driver-all:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.20.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-requests \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.31.0+dfsg-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpmemobj1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1.1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up librbd1 \u003cspan class=\"o\"\u003e(\u003c/span\u003e19.2.0-0ubuntu0.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libsndfile1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.2-1ubuntu5.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-utils \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-block-extra \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/multi-user.target.wants/run-qemu.mount → /usr/lib/systemd/system/run-qemu.mount\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up glib-networking-services \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpulse0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:16.1+dfsg1-2ubuntu10.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgvnc-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up glib-networking:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgtk-vnc-2.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libsoup-3.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.4.4-5ubuntu0.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libphodav-3.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.0-8build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libosinfo-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.11.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-libosinfo-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.11.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libspice-client-glib-2.0-8:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up virtinst \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:4.1.0-3ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libspice-client-gtk-3.0-5:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up virt-viewer \u003cspan class=\"o\"\u003e(\u003c/span\u003e11.0-3build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e libc-bin \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.39-0ubuntu8.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e man-db \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.12.0-4build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e libglib2.0-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-6ubuntu3.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e shared-mime-info \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.4-4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e hicolor-icon-theme \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.17-2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ virt-install --version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evirsh list --all\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e4.1.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eerror: failed to connect to the hypervisor\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eerror: binary \u003cspan class=\"s1\"\u003e\u0026#39;/usr/sbin/libvirtd\u0026#39;\u003c/span\u003e does not exist in \u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e: No such file or directory\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elogout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylon@razorcrest:~$ distrobox enter --additional-flags \u003cspan class=\"s2\"\u003e\u0026#34;--device /dev/kvm\u0026#34;\u003c/span\u003e ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eError: unknown flag: --device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSee \u003cspan class=\"s1\"\u003e\u0026#39;podman exec --help\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylon@razorcrest:~$ distrobox enter ubuntu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ ls -l /run/libvirt/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommon/               libvirt-sock          nodedev/              secrets/              virtlogd-admin-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehostdevmgr/           libvirt-sock-ro       nwfilter/             storage/              virtlogd-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einterface/            lxc/                  nwfilter-binding/     virtlockd-admin-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elibvirt-admin-sock    network/              qemu/                 virtlockd-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ ls -l /run/libvirt/libvirt-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esrw-rw-rw-. \u003cspan class=\"m\"\u003e1\u003c/span\u003e nobody nogroup \u003cspan class=\"m\"\u003e0\u003c/span\u003e Jun \u003cspan class=\"m\"\u003e27\u003c/span\u003e 11:09 /run/libvirt/libvirt-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ sudo usermod -aG libvirt \u003cspan class=\"nv\"\u003e$USER\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eusermod: group \u003cspan class=\"s1\"\u003e\u0026#39;libvirt\u0026#39;\u003c/span\u003e does not exist\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ \u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eLIBVIRT_DEFAULT_URI\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;qemu+unix:///system\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evirsh list --all\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e Id   Name   State\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--------------------\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ ls -l /run/libvirt/libvirt-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esrw-rw-rw-. \u003cspan class=\"m\"\u003e1\u003c/span\u003e nobody nogroup \u003cspan class=\"m\"\u003e0\u003c/span\u003e Jun \u003cspan class=\"m\"\u003e27\u003c/span\u003e 11:09 /run/libvirt/libvirt-sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ virt-install --version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evirsh list --all\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e4.1.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e Id   Name   State\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--------------------\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ sudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install virt-manager -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:1 http://security.ubuntu.com/ubuntu noble-security InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:2 http://archive.ubuntu.com/ubuntu noble InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading package lists... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBuilding dependency tree... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading state information... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e packages can be upgraded. Run \u003cspan class=\"s1\"\u003e\u0026#39;apt list --upgradable\u0026#39;\u003c/span\u003e to see them.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading package lists... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBuilding dependency tree... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReading state information... Done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe following additional packages will be installed:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  acl alsa-topology-conf alsa-ucm-conf cpu-checker dmeventd dmidecode dns-root-data dnsmasq-base gettext-base\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-atk-1.0 gir1.2-ayatanaappindicator3-0.1 gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-harfbuzz-0.0 gir1.2-libvirt-glib-1.0 gir1.2-pango-1.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 gstreamer1.0-plugins-good gstreamer1.0-x\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  iptables ipxe-qemu ipxe-qemu-256k-compat-efi-roms libaa1 libasound2-data libasound2t64 libavc1394-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libbrlapi0.8 libcaca0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdecor-0-0 libdecor-0-plugin-1-gtk libdevmapper-event1.02.1 libdv4t64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libfdt1 libgstreamer-plugins-good1.0-0 libgtksourceview-4-0 libgtksourceview-4-common libgudev-1.0-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libharfbuzz-gobject0 libiec61883-0 libip4tc2 libip6tc2 libjack-jackd2-0 liblvm2cmd2.03 libnetfilter-conntrack3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libnfnetlink0 libnftables1 libnftnl11 libnss-mymachines libpangoxft-1.0-0 libparted2t64 libpipewire-0.3-0t64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libpipewire-0.3-common libpolkit-agent-1-0 libraw1394-11 libsamplerate0 libsdl2-2.0-0 libshout3 libslang2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libslirp0 libspa-0.2-modules libspeex1 libspice-server1 libtag1v5 libtag1v5-vanilla libtpms0 libtwolame0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libv4l-0t64 libv4lconvert0t64 libvirglrenderer1 libvirt-daemon libvirt-daemon-config-network\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-daemon-config-nwfilter libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvpx9 libwavpack1 libwebrtc-audio-processing1 libxft2 libxml2-utils libxss1 libxv1 logrotate lvm2 mdevctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  msr-tools netcat-openbsd nftables ovmf parted polkitd python3-cairo python3-gi-cairo qemu-system-common\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  qemu-system-data qemu-system-gui qemu-system-modules-opengl qemu-system-modules-spice qemu-system-x86 seabios\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  sgml-base swtpm swtpm-tools systemd-container systemd-hwe-hwdb thin-provisioning-tools udev xml-core\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSuggested packages:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  firewalld kmod alsa-utils libasound2-plugins libdv-bin oss-compat jackd2 libparted-dev libparted-i18n pipewire\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libraw1394-doc xdg-utils speex gstreamer1.0-libav gstreamer1.0-plugins-ugly\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-daemon-driver-storage-gluster libvirt-daemon-driver-storage-iscsi-direct\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-zfs libvirt-daemon-driver-lxc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-daemon-driver-vbox libvirt-daemon-driver-xen numad passt apparmor auditd nfs-common open-iscsi pm-utils\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  systemtap zfsutils bsd-mailx \u003cspan class=\"p\"\u003e|\u003c/span\u003e mailx parted-doc polkitd-pkla samba vde2 sgml-base-doc trousers gir1.2-secret-1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gnome-keyring python3-guestfs ssh-askpass debhelper\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe following NEW packages will be installed:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  acl alsa-topology-conf alsa-ucm-conf cpu-checker dmeventd dmidecode dns-root-data dnsmasq-base gettext-base\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-atk-1.0 gir1.2-ayatanaappindicator3-0.1 gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-harfbuzz-0.0 gir1.2-libvirt-glib-1.0 gir1.2-pango-1.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 gstreamer1.0-plugins-good gstreamer1.0-x\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  iptables ipxe-qemu ipxe-qemu-256k-compat-efi-roms libaa1 libasound2-data libasound2t64 libavc1394-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libbrlapi0.8 libcaca0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdecor-0-0 libdecor-0-plugin-1-gtk libdevmapper-event1.02.1 libdv4t64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libfdt1 libgstreamer-plugins-good1.0-0 libgtksourceview-4-0 libgtksourceview-4-common libgudev-1.0-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libharfbuzz-gobject0 libiec61883-0 libip4tc2 libip6tc2 libjack-jackd2-0 liblvm2cmd2.03 libnetfilter-conntrack3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libnfnetlink0 libnftables1 libnftnl11 libnss-mymachines libpangoxft-1.0-0 libparted2t64 libpipewire-0.3-0t64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libpipewire-0.3-common libpolkit-agent-1-0 libraw1394-11 libsamplerate0 libsdl2-2.0-0 libshout3 libslang2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libslirp0 libspa-0.2-modules libspeex1 libspice-server1 libtag1v5 libtag1v5-vanilla libtpms0 libtwolame0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libv4l-0t64 libv4lconvert0t64 libvirglrenderer1 libvirt-daemon libvirt-daemon-config-network\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvirt-daemon-config-nwfilter libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  libvpx9 libwavpack1 libwebrtc-audio-processing1 libxft2 libxml2-utils libxss1 libxv1 logrotate lvm2 mdevctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  msr-tools netcat-openbsd nftables ovmf parted polkitd python3-cairo python3-gi-cairo qemu-system-common\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  qemu-system-data qemu-system-gui qemu-system-modules-opengl qemu-system-modules-spice qemu-system-x86 seabios\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  sgml-base swtpm swtpm-tools systemd-container systemd-hwe-hwdb thin-provisioning-tools udev virt-manager\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  xml-core\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e upgraded, \u003cspan class=\"m\"\u003e119\u003c/span\u003e newly installed, \u003cspan class=\"m\"\u003e0\u003c/span\u003e to remove and \u003cspan class=\"m\"\u003e4\u003c/span\u003e not upgraded.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNeed to get 43.2 MB of archives.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAfter this operation, \u003cspan class=\"m\"\u003e180\u003c/span\u003e MB of additional disk space will be used.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:1 http://archive.ubuntu.com/ubuntu noble/main amd64 sgml-base all 1.31 \u003cspan class=\"o\"\u003e[\u003c/span\u003e11.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:2 http://archive.ubuntu.com/ubuntu noble/main amd64 libslang2 amd64 2.3.3-3build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e506\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:3 http://archive.ubuntu.com/ubuntu noble/main amd64 logrotate amd64 3.21.0-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e52.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:4 http://archive.ubuntu.com/ubuntu noble/main amd64 netcat-openbsd amd64 1.226-1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e44.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:5 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 udev amd64 255.4-1ubuntu8.8 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,874 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 systemd-hwe-hwdb all 255.1.4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e3,200 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:7 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dmidecode amd64 3.5-3ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e73.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:8 http://archive.ubuntu.com/ubuntu noble/main amd64 gettext-base amd64 0.21-14ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e38.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:9 http://archive.ubuntu.com/ubuntu noble/main amd64 libip4tc2 amd64 1.8.10-3ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e23.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:10 http://archive.ubuntu.com/ubuntu noble/main amd64 libip6tc2 amd64 1.8.10-3ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e23.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libnfnetlink0 amd64 1.0.2-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e14.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:12 http://archive.ubuntu.com/ubuntu noble/main amd64 libnetfilter-conntrack3 amd64 1.0.9-6build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e45.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:13 http://archive.ubuntu.com/ubuntu noble/main amd64 libnftnl11 amd64 1.2.6-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e66.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:14 http://archive.ubuntu.com/ubuntu noble/main amd64 iptables amd64 1.8.10-3ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e381\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:15 http://archive.ubuntu.com/ubuntu noble/main amd64 libnftables1 amd64 1.0.9-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e358\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:16 http://archive.ubuntu.com/ubuntu noble/main amd64 libparted2t64 amd64 3.6-4build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e152\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:17 http://archive.ubuntu.com/ubuntu noble/main amd64 nftables amd64 1.0.9-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e69.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:18 http://archive.ubuntu.com/ubuntu noble/main amd64 parted amd64 3.6-4build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e43.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 acl amd64 2.3.2-1build1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e39.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:20 http://archive.ubuntu.com/ubuntu noble/main amd64 alsa-topology-conf all 1.2.5.1-2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e15.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:21 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libasound2-data all 1.2.11-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e21.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:22 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libasound2t64 amd64 1.2.11-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e399\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:23 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 alsa-ucm-conf all 1.2.10-1ubuntu5.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e66.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:24 http://archive.ubuntu.com/ubuntu noble/main amd64 msr-tools amd64 1.3-5build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e9,610 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:25 http://archive.ubuntu.com/ubuntu noble/main amd64 cpu-checker amd64 0.7-1.3build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e6,148 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:26 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdevmapper-event1.02.1 amd64 2:1.02.185-3ubuntu3.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e12.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:27 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liblvm2cmd2.03 amd64 2.03.16-3ubuntu3.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e797\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:28 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dmeventd amd64 2:1.02.185-3ubuntu3.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e38.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:29 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dns-root-data all 2024071801~ubuntu0.24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e5,918 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:30 http://archive.ubuntu.com/ubuntu noble/main amd64 dnsmasq-base amd64 2.90-2build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e375\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:31 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-atk-1.0 amd64 2.52.0-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e23.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:32 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.10+dfsg-3ubuntu3.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e9,486 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:33 http://archive.ubuntu.com/ubuntu noble/main amd64 libharfbuzz-gobject0 amd64 8.3.0-2build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e34.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:34 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-harfbuzz-0.0 amd64 8.3.0-2build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e44.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libxft2 amd64 2.3.6-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e45.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libpangoxft-1.0-0 amd64 1.52.1+ds-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e20.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:37 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-pango-1.0 amd64 1.52.1+ds-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e34.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:38 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gtk-3.0 amd64 3.24.41-4ubuntu1.3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e245\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-ido3-0.4-0 amd64 0.10.1-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e56.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:40 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-indicator3-7 amd64 0.9.4-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e31.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:41 http://archive.ubuntu.com/ubuntu noble/main amd64 libdbusmenu-glib4 amd64 18.10.20180917~bzr492+repack1-3.1ubuntu5 \u003cspan class=\"o\"\u003e[\u003c/span\u003e43.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:42 http://archive.ubuntu.com/ubuntu noble/main amd64 libdbusmenu-gtk3-4 amd64 18.10.20180917~bzr492+repack1-3.1ubuntu5 \u003cspan class=\"o\"\u003e[\u003c/span\u003e27.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:43 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-appindicator3-1 amd64 0.5.93-1build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e24.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:44 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-ayatanaappindicator3-0.1 amd64 0.5.93-1build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e5,838 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:45 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gstreamer-1.0 amd64 1.24.2-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e88.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:46 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-gtk-vnc-2.0 amd64 1.3.1-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e12.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:47 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtksourceview-4-common all 4.8.4-5build4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e590\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:48 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtksourceview-4-0 amd64 4.8.4-5build4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e233\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:49 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-gtksource-4 amd64 4.8.4-5build4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e20.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:50 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-spiceclientglib-2.0 amd64 0.42-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e14.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:51 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-spiceclientgtk-3.0 amd64 0.42-2ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e5,610 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:52 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-vte-2.91 amd64 0.76.0-1ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e11.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:53 http://archive.ubuntu.com/ubuntu noble/main amd64 libaa1 amd64 1.4p5-51.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e49.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:54 http://archive.ubuntu.com/ubuntu noble/main amd64 libraw1394-11 amd64 2.1.2-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e26.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:55 http://archive.ubuntu.com/ubuntu noble/main amd64 libavc1394-0 amd64 0.5.4-5build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e15.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:56 http://archive.ubuntu.com/ubuntu noble/main amd64 libcaca0 amd64 0.99.beta20-4build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e208\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:57 http://archive.ubuntu.com/ubuntu noble/main amd64 libdv4t64 amd64 1.0.0-17.1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e63.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:58 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-good1.0-0 amd64 1.24.2-1ubuntu1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e32.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:59 http://archive.ubuntu.com/ubuntu noble/main amd64 libgudev-1.0-0 amd64 1:238-5ubuntu1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e15.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:60 http://archive.ubuntu.com/ubuntu noble/main amd64 libiec61883-0 amd64 1.2.0-6build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e24.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:61 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libspeex1 amd64 1.2.1-2ubuntu2.24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e59.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:62 http://archive.ubuntu.com/ubuntu noble/main amd64 libshout3 amd64 2.4.6-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e50.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:63 http://archive.ubuntu.com/ubuntu noble/main amd64 libtag1v5-vanilla amd64 1.13.1-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e326\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:64 http://archive.ubuntu.com/ubuntu noble/main amd64 libtag1v5 amd64 1.13.1-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e11.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:65 http://archive.ubuntu.com/ubuntu noble/main amd64 libtwolame0 amd64 0.4.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e52.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libv4lconvert0t64 amd64 1.26.1-4build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e87.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libv4l-0t64 amd64 1.26.1-4build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e46.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:68 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvpx9 amd64 1.14.0-1ubuntu2.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,143 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:69 http://archive.ubuntu.com/ubuntu noble/main amd64 libwavpack1 amd64 5.6.0-1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e84.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:70 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-good amd64 1.24.2-1ubuntu1.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e2,238 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:71 http://archive.ubuntu.com/ubuntu noble/main amd64 libxv1 amd64 2:1.0.11-1.1build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e10.7 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:72 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-x amd64 1.24.2-1ubuntu0.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e85.0 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:73 http://archive.ubuntu.com/ubuntu noble/main amd64 ipxe-qemu all 1.21.1+git-20220113.fbbdc3926-0ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,565 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:74 http://archive.ubuntu.com/ubuntu noble/main amd64 ipxe-qemu-256k-compat-efi-roms all 1.0.0+git-20150424.a25a16d-0ubuntu5 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e548\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:75 http://archive.ubuntu.com/ubuntu noble/main amd64 libbrlapi0.8 amd64 6.6-4ubuntu5 \u003cspan class=\"o\"\u003e[\u003c/span\u003e31.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:76 http://archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-0 amd64 0.2.2-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e16.5 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:77 http://archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-plugin-1-gtk amd64 0.2.2-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e22.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:78 http://archive.ubuntu.com/ubuntu noble/main amd64 libsamplerate0 amd64 0.2.2-4build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,344 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:79 http://archive.ubuntu.com/ubuntu noble/main amd64 libjack-jackd2-0 amd64 1.9.21~dfsg-3ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e289\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:80 http://archive.ubuntu.com/ubuntu noble/main amd64 libwebrtc-audio-processing1 amd64 0.3.1-0ubuntu6 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e290\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:81 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libspa-0.2-modules amd64 1.0.5-1ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e626\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:82 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpipewire-0.3-0t64 amd64 1.0.5-1ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e252\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:83 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpipewire-0.3-common all 1.0.5-1ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e18.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:84 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpolkit-agent-1-0 amd64 124-2ubuntu1.24.04.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e17.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:85 http://archive.ubuntu.com/ubuntu noble/main amd64 libxss1 amd64 1:1.2.3-1build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e7,204 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:86 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsdl2-2.0-0 amd64 2.30.0+dfsg-1ubuntu3.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e686\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:87 http://archive.ubuntu.com/ubuntu noble/main amd64 libslirp0 amd64 4.7.0-1ubuntu3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e63.8 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:88 http://archive.ubuntu.com/ubuntu noble/main amd64 libspice-server1 amd64 0.15.1-1build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e349\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:89 http://archive.ubuntu.com/ubuntu noble/main amd64 libtpms0 amd64 0.9.3-0ubuntu4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e373\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:90 http://archive.ubuntu.com/ubuntu noble/main amd64 libvirglrenderer1 amd64 1.0.0-1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e226\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:91 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-driver-qemu amd64 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e740\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:92 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon amd64 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e431\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:93 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-config-network all 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e3,120 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:94 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-config-nwfilter all 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e6,042 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:95 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 systemd-container amd64 255.4-1ubuntu8.8 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e417\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:96 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-system-systemd all 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,376 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:97 http://archive.ubuntu.com/ubuntu noble/main amd64 xml-core all 0.19 \u003cspan class=\"o\"\u003e[\u003c/span\u003e20.3 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:98 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 polkitd amd64 124-2ubuntu1.24.04.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e95.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:99 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-system amd64 10.0.0-2ubuntu8.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e49.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:100 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxml2-utils amd64 2.9.14+dfsg-1.3ubuntu3.3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e39.4 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:101 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 lvm2 amd64 2.03.16-3ubuntu3.2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,186 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:102 http://archive.ubuntu.com/ubuntu noble/main amd64 mdevctl amd64 1.3.0-1ubuntu2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e936\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:103 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-cairo amd64 1.25.1-2build2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e119\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:104 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-gi-cairo amd64 3.48.2-1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e8,132 B\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:105 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-common amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,253 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:106 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-data all 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e1,793 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:107 http://archive.ubuntu.com/ubuntu noble/main amd64 libfdt1 amd64 1.7.0-2build1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e20.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:108 http://archive.ubuntu.com/ubuntu noble/main amd64 seabios all 1.16.3-2 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e175\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:109 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-x86 amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e11.2 MB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:110 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-modules-opengl amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e184\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:111 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-gui amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e314\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:112 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-modules-spice amd64 1:8.2.2+ds-0ubuntu1.7 \u003cspan class=\"o\"\u003e[\u003c/span\u003e70.2 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:113 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 swtpm amd64 0.7.3-0ubuntu5.24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e53.1 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:114 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 swtpm-tools amd64 0.7.3-0ubuntu5.24.04.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e92.9 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:115 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 thin-provisioning-tools amd64 0.9.0-2ubuntu5.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e436\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:116 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-libvirt-glib-1.0 amd64 5.0.0-2build3 \u003cspan class=\"o\"\u003e[\u003c/span\u003e32.6 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:117 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 virt-manager all 1:4.1.0-3ubuntu0.1 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e263\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:118 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libnss-mymachines amd64 255.4-1ubuntu8.8 \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"m\"\u003e153\u003c/span\u003e kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGet:119 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 ovmf all 2024.02-2ubuntu0.4 \u003cspan class=\"o\"\u003e[\u003c/span\u003e4,571 kB\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFetched 43.2 MB in 5s \u003cspan class=\"o\"\u003e(\u003c/span\u003e9,539 kB/s\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExtracting templates from packages: 100%\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreconfiguring packages ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package sgml-base.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003eReading database ... \u003cspan class=\"m\"\u003e30439\u003c/span\u003e files and directories currently installed.\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../000-sgml-base_1.31_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking sgml-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.31\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libslang2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../001-libslang2_2.3.3-3build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libslang2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.3.3-3build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package logrotate.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../002-logrotate_3.21.0-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking logrotate \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.21.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package netcat-openbsd.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../003-netcat-openbsd_1.226-1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking netcat-openbsd \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.226-1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package udev.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../004-udev_255.4-1ubuntu8.8_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking udev \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.4-1ubuntu8.8\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package systemd-hwe-hwdb.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../005-systemd-hwe-hwdb_255.1.4_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking systemd-hwe-hwdb \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.1.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package dmidecode.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../006-dmidecode_3.5-3ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking dmidecode \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.5-3ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gettext-base.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../007-gettext-base_0.21-14ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gettext-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.21-14ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libip4tc2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../008-libip4tc2_1.8.10-3ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libip4tc2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.10-3ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libip6tc2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../009-libip6tc2_1.8.10-3ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libip6tc2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.10-3ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnfnetlink0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../010-libnfnetlink0_1.0.2-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnfnetlink0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.2-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnetfilter-conntrack3:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../011-libnetfilter-conntrack3_1.0.9-6build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnetfilter-conntrack3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.9-6build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnftnl11:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../012-libnftnl11_1.2.6-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnftnl11:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.6-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package iptables.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../013-iptables_1.8.10-3ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking iptables \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.10-3ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnftables1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../014-libnftables1_1.0.9-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnftables1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.9-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libparted2t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../015-libparted2t64_3.6-4build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAdding \u003cspan class=\"s1\"\u003e\u0026#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2 to /lib/x86_64-linux-gnu/libparted.so.2.usr-is-merged by\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003elibparted2t64\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAdding \u003cspan class=\"s1\"\u003e\u0026#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2.0.5 to /lib/x86_64-linux-gnu/libparted.so.2.0.5.usr-is-me\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003erged by libparted2t64\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libparted2t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.6-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package nftables.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../016-nftables_1.0.9-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking nftables \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.9-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package parted.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../017-parted_3.6-4build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking parted \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.6-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package acl.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../018-acl_2.3.2-1build1.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking acl \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.3.2-1build1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package alsa-topology-conf.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../019-alsa-topology-conf_1.2.5.1-2_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking alsa-topology-conf \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.5.1-2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libasound2-data.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../020-libasound2-data_1.2.11-1ubuntu0.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libasound2-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.11-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libasound2t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../021-libasound2t64_1.2.11-1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libasound2t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.11-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package alsa-ucm-conf.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../022-alsa-ucm-conf_1.2.10-1ubuntu5.7_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking alsa-ucm-conf \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.10-1ubuntu5.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package msr-tools.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../023-msr-tools_1.3-5build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking msr-tools \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3-5build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package cpu-checker.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../024-cpu-checker_0.7-1.3build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking cpu-checker \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.7-1.3build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdevmapper-event1.02.1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../025-libdevmapper-event1.02.1_2%3a1.02.185-3ubuntu3.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdevmapper-event1.02.1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.02.185-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package liblvm2cmd2.03:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../026-liblvm2cmd2.03_2.03.16-3ubuntu3.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking liblvm2cmd2.03:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.03.16-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package dmeventd.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../027-dmeventd_2%3a1.02.185-3ubuntu3.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking dmeventd \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.02.185-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package dns-root-data.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../028-dns-root-data_2024071801~ubuntu0.24.04.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking dns-root-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e2024071801~ubuntu0.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package dnsmasq-base.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../029-dnsmasq-base_2.90-2build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking dnsmasq-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.90-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-atk-1.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../030-gir1.2-atk-1.0_2.52.0-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-atk-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.52.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../031-gir1.2-gdkpixbuf-2.0_2.42.10+dfsg-3ubuntu3.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-gdkpixbuf-2.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.42.10+dfsg-3ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libharfbuzz-gobject0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../032-libharfbuzz-gobject0_8.3.0-2build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libharfbuzz-gobject0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e8.3.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-harfbuzz-0.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../033-gir1.2-harfbuzz-0.0_8.3.0-2build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-harfbuzz-0.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e8.3.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libxft2:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../034-libxft2_2.3.6-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libxft2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.3.6-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpangoxft-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../035-libpangoxft-1.0-0_1.52.1+ds-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpangoxft-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.52.1+ds-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-pango-1.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../036-gir1.2-pango-1.0_1.52.1+ds-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-pango-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.52.1+ds-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-gtk-3.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../037-gir1.2-gtk-3.0_3.24.41-4ubuntu1.3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-gtk-3.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.24.41-4ubuntu1.3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libayatana-ido3-0.4-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../038-libayatana-ido3-0.4-0_0.10.1-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libayatana-ido3-0.4-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.10.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libayatana-indicator3-7:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../039-libayatana-indicator3-7_0.9.4-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libayatana-indicator3-7:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.9.4-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdbusmenu-glib4:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../040-libdbusmenu-glib4_18.10.20180917~bzr492+repack1-3.1ubuntu5_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdbusmenu-glib4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e18.10.20180917~bzr492+repack1-3.1ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdbusmenu-gtk3-4:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../041-libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-3.1ubuntu5_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdbusmenu-gtk3-4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e18.10.20180917~bzr492+repack1-3.1ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libayatana-appindicator3-1.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../042-libayatana-appindicator3-1_0.5.93-1build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libayatana-appindicator3-1 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.93-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-ayatanaappindicator3-0.1.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../043-gir1.2-ayatanaappindicator3-0.1_0.5.93-1build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-ayatanaappindicator3-0.1 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.93-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-gstreamer-1.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../044-gir1.2-gstreamer-1.0_1.24.2-1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-gstreamer-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-gtk-vnc-2.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../045-gir1.2-gtk-vnc-2.0_1.3.1-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-gtk-vnc-2.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgtksourceview-4-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../046-libgtksourceview-4-common_4.8.4-5build4_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgtksourceview-4-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.8.4-5build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgtksourceview-4-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../047-libgtksourceview-4-0_4.8.4-5build4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgtksourceview-4-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.8.4-5build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-gtksource-4:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../048-gir1.2-gtksource-4_4.8.4-5build4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-gtksource-4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.8.4-5build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-spiceclientglib-2.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../049-gir1.2-spiceclientglib-2.0_0.42-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-spiceclientglib-2.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-spiceclientgtk-3.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../050-gir1.2-spiceclientgtk-3.0_0.42-2ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-spiceclientgtk-3.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-vte-2.91:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../051-gir1.2-vte-2.91_0.76.0-1ubuntu0.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-vte-2.91:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.76.0-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libaa1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../052-libaa1_1.4p5-51.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libaa1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.4p5-51.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libraw1394-11:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../053-libraw1394-11_2.1.2-2build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libraw1394-11:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.1.2-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libavc1394-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../054-libavc1394-0_0.5.4-5build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libavc1394-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.4-5build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libcaca0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../055-libcaca0_0.99.beta20-4build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libcaca0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.99.beta20-4build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdv4t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../056-libdv4t64_1.0.0-17.1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdv4t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.0-17.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgstreamer-plugins-good1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../057-libgstreamer-plugins-good1.0-0_1.24.2-1ubuntu1.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgstreamer-plugins-good1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libgudev-1.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../058-libgudev-1.0-0_1%3a238-5ubuntu1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libgudev-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:238-5ubuntu1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libiec61883-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../059-libiec61883-0_1.2.0-6build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libiec61883-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.0-6build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libspeex1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../060-libspeex1_1.2.1-2ubuntu2.24.04.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libspeex1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.1-2ubuntu2.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libshout3:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../061-libshout3_2.4.6-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libshout3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.4.6-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libtag1v5-vanilla:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../062-libtag1v5-vanilla_1.13.1-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libtag1v5-vanilla:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libtag1v5:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../063-libtag1v5_1.13.1-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libtag1v5:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libtwolame0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../064-libtwolame0_0.4.0-2build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libtwolame0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.4.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libv4lconvert0t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../065-libv4lconvert0t64_1.26.1-4build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libv4lconvert0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.26.1-4build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libv4l-0t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../066-libv4l-0t64_1.26.1-4build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libv4l-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.26.1-4build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvpx9:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../067-libvpx9_1.14.0-1ubuntu2.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvpx9:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.14.0-1ubuntu2.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libwavpack1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../068-libwavpack1_5.6.0-1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libwavpack1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.6.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gstreamer1.0-plugins-good:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../069-gstreamer1.0-plugins-good_1.24.2-1ubuntu1.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gstreamer1.0-plugins-good:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libxv1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../070-libxv1_2%3a1.0.11-1.1build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libxv1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.0.11-1.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gstreamer1.0-x:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../071-gstreamer1.0-x_1.24.2-1ubuntu0.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gstreamer1.0-x:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package ipxe-qemu.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../072-ipxe-qemu_1.21.1+git-20220113.fbbdc3926-0ubuntu2_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking ipxe-qemu \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.21.1+git-20220113.fbbdc3926-0ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package ipxe-qemu-256k-compat-efi-roms.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../073-ipxe-qemu-256k-compat-efi-roms_1.0.0+git-20150424.a25a16d-0ubuntu5_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking ipxe-qemu-256k-compat-efi-roms \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.0+git-20150424.a25a16d-0ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libbrlapi0.8:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../074-libbrlapi0.8_6.6-4ubuntu5_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libbrlapi0.8:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e6.6-4ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdecor-0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../075-libdecor-0-0_0.2.2-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdecor-0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.2.2-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libdecor-0-plugin-1-gtk:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../076-libdecor-0-plugin-1-gtk_0.2.2-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libdecor-0-plugin-1-gtk:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.2.2-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libsamplerate0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../077-libsamplerate0_0.2.2-4build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libsamplerate0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.2.2-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libjack-jackd2-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../078-libjack-jackd2-0_1.9.21~dfsg-3ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libjack-jackd2-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.9.21~dfsg-3ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libwebrtc-audio-processing1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../079-libwebrtc-audio-processing1_0.3.1-0ubuntu6_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libwebrtc-audio-processing1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.3.1-0ubuntu6\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libspa-0.2-modules:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../080-libspa-0.2-modules_1.0.5-1ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libspa-0.2-modules:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.5-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpipewire-0.3-0t64:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../081-libpipewire-0.3-0t64_1.0.5-1ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpipewire-0.3-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.5-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpipewire-0.3-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../082-libpipewire-0.3-common_1.0.5-1ubuntu3_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpipewire-0.3-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.5-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libpolkit-agent-1-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../083-libpolkit-agent-1-0_124-2ubuntu1.24.04.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libpolkit-agent-1-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e124-2ubuntu1.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libxss1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../084-libxss1_1%3a1.2.3-1build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libxss1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:1.2.3-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libsdl2-2.0-0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../085-libsdl2-2.0-0_2.30.0+dfsg-1ubuntu3.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libsdl2-2.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.30.0+dfsg-1ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libslirp0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../086-libslirp0_4.7.0-1ubuntu3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libslirp0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.7.0-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libspice-server1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../087-libspice-server1_0.15.1-1build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libspice-server1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.15.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libtpms0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../088-libtpms0_0.9.3-0ubuntu4_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libtpms0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.9.3-0ubuntu4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirglrenderer1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../089-libvirglrenderer1_1.0.0-1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirglrenderer1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.0-1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-daemon-driver-qemu.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../090-libvirt-daemon-driver-qemu_10.0.0-2ubuntu8.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-daemon-driver-qemu \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-daemon.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../091-libvirt-daemon_10.0.0-2ubuntu8.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-daemon \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-daemon-config-network.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../092-libvirt-daemon-config-network_10.0.0-2ubuntu8.7_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-daemon-config-network \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-daemon-config-nwfilter.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../093-libvirt-daemon-config-nwfilter_10.0.0-2ubuntu8.7_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-daemon-config-nwfilter \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package systemd-container.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../094-systemd-container_255.4-1ubuntu8.8_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking systemd-container \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.4-1ubuntu8.8\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-daemon-system-systemd.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../095-libvirt-daemon-system-systemd_10.0.0-2ubuntu8.7_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-daemon-system-systemd \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package xml-core.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../096-xml-core_0.19_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking xml-core \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.19\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package polkitd.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../097-polkitd_124-2ubuntu1.24.04.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking polkitd \u003cspan class=\"o\"\u003e(\u003c/span\u003e124-2ubuntu1.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libvirt-daemon-system.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../098-libvirt-daemon-system_10.0.0-2ubuntu8.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libvirt-daemon-system \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libxml2-utils.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../099-libxml2-utils_2.9.14+dfsg-1.3ubuntu3.3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libxml2-utils \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.9.14+dfsg-1.3ubuntu3.3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package lvm2.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../100-lvm2_2.03.16-3ubuntu3.2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking lvm2 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.03.16-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package mdevctl.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../101-mdevctl_1.3.0-1ubuntu2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking mdevctl \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.0-1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-cairo.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../102-python3-cairo_1.25.1-2build2_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-cairo \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.25.1-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package python3-gi-cairo.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../103-python3-gi-cairo_3.48.2-1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking python3-gi-cairo \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.48.2-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-system-common.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../104-qemu-system-common_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-system-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-system-data.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../105-qemu-system-data_1%3a8.2.2+ds-0ubuntu1.7_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-system-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libfdt1:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../106-libfdt1_1.7.0-2build1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libfdt1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.7.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package seabios.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../107-seabios_1.16.3-2_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking seabios \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.16.3-2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-system-x86.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../108-qemu-system-x86_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-system-x86 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-system-modules-opengl.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../109-qemu-system-modules-opengl_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-system-modules-opengl \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-system-gui.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../110-qemu-system-gui_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-system-gui \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package qemu-system-modules-spice.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../111-qemu-system-modules-spice_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking qemu-system-modules-spice \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package swtpm.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../112-swtpm_0.7.3-0ubuntu5.24.04.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking swtpm \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.7.3-0ubuntu5.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package swtpm-tools.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../113-swtpm-tools_0.7.3-0ubuntu5.24.04.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking swtpm-tools \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.7.3-0ubuntu5.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package thin-provisioning-tools.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../114-thin-provisioning-tools_0.9.0-2ubuntu5.1_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking thin-provisioning-tools \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.9.0-2ubuntu5.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package gir1.2-libvirt-glib-1.0:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../115-gir1.2-libvirt-glib-1.0_5.0.0-2build3_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking gir1.2-libvirt-glib-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package virt-manager.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../116-virt-manager_1%3a4.1.0-3ubuntu0.1_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking virt-manager \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:4.1.0-3ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package libnss-mymachines:amd64.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../117-libnss-mymachines_255.4-1ubuntu8.8_amd64.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking libnss-mymachines:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.4-1ubuntu8.8\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSelecting previously unselected package ovmf.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePreparing to unpack .../118-ovmf_2024.02-2ubuntu0.4_all.deb ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnpacking ovmf \u003cspan class=\"o\"\u003e(\u003c/span\u003e2024.02-2ubuntu0.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libip4tc2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.10-3ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpipewire-0.3-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.5-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up logrotate \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.21.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/timers.target.wants/logrotate.timer → /usr/lib/systemd/system/logrotate.timer.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-daemon-config-network \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-gstreamer-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libraw1394-11:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.1.2-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libxft2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.3.6-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libtag1v5-vanilla:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-cairo \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.25.1-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libspeex1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.1-2ubuntu2.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdevmapper-event1.02.1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.02.185-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libv4lconvert0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.26.1-4build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpangoxft-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.52.1+ds-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libtwolame0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.4.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-gdkpixbuf-2.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.42.10+dfsg-3ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-spiceclientglib-2.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-atk-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.52.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libip6tc2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.10-3ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdbusmenu-glib4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e18.10.20180917~bzr492+repack1-3.1ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libspice-server1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.15.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up netcat-openbsd \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.226-1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /bin/nc.openbsd to provide /bin/nc \u003cspan class=\"o\"\u003e(\u003c/span\u003enc\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-libvirt-glib-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.0.0-2build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up msr-tools \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3-5build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libwebrtc-audio-processing1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.3.1-0ubuntu6\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gettext-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.21-14ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnftnl11:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.6-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libharfbuzz-gobject0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e8.3.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libfdt1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.7.0-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libayatana-ido3-0.4-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.10.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-harfbuzz-0.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e8.3.0-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up acl \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.3.2-1build1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up ovmf \u003cspan class=\"o\"\u003e(\u003c/span\u003e2024.02-2ubuntu0.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up dns-root-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e2024071801~ubuntu0.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libasound2-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.11-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-pango-1.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.52.1+ds-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgstreamer-plugins-good1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libasound2t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.11-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libslang2:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.3.3-3build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirglrenderer1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.0-1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libspa-0.2-modules:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.5-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libxv1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.0.11-1.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libshout3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.4.6-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up thin-provisioning-tools \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.9.0-2ubuntu5.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up udev \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.4-1ubuntu8.8\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating group \u003cspan class=\"s1\"\u003e\u0026#39;input\u0026#39;\u003c/span\u003e with GID 995.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating group \u003cspan class=\"s1\"\u003e\u0026#39;sgx\u0026#39;\u003c/span\u003e with GID 994.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating group \u003cspan class=\"s1\"\u003e\u0026#39;kvm\u0026#39;\u003c/span\u003e with GID 993.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating group \u003cspan class=\"s1\"\u003e\u0026#39;render\u0026#39;\u003c/span\u003e with GID 992.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efchownat\u003cspan class=\"o\"\u003e()\u003c/span\u003e of /dev/snd/seq failed: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efchownat\u003cspan class=\"o\"\u003e()\u003c/span\u003e of /dev/snd/timer failed: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efchownat\u003cspan class=\"o\"\u003e()\u003c/span\u003e of /dev/loop-control failed: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efchmod\u003cspan class=\"o\"\u003e()\u003c/span\u003e of /dev/kvm failed: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efchmod\u003cspan class=\"o\"\u003e()\u003c/span\u003e of /dev/vhost-net failed: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efchmod\u003cspan class=\"o\"\u003e()\u003c/span\u003e of /dev/vhost-vsock failed: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-daemon-driver-qemu \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdv4t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.0-17.1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-system-data \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up seabios \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.16.3-2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up systemd-hwe-hwdb \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.1.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libv4l-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.26.1-4build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up systemd-container \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.4-1ubuntu8.8\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/multi-user.target.wants/machines.target → /usr/lib/systemd/system/machines.targ\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eet.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvpx9:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.14.0-1ubuntu2.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libslirp0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.7.0-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up alsa-topology-conf \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.5.1-2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libtag1v5:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.13.1-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up cpu-checker \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.7-1.3build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libwavpack1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e5.6.0-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnfnetlink0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.2-2build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up ipxe-qemu \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.21.1+git-20220113.fbbdc3926-0ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdecor-0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.2.2-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpolkit-agent-1-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e124-2ubuntu1.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up ipxe-qemu-256k-compat-efi-roms \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.0+git-20150424.a25a16d-0ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up sgml-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.31\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libbrlapi0.8:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e6.6-4ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libxss1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:1.2.3-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libtpms0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.9.3-0ubuntu4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up dmidecode \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.5-3ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libxml2-utils \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.9.14+dfsg-1.3ubuntu3.3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-daemon-config-nwfilter \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libsamplerate0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.2.2-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libayatana-indicator3-7:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.9.4-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up python3-gi-cairo \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.48.2-1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgtksourceview-4-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.8.4-5build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libpipewire-0.3-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.5-1ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdecor-0-plugin-1-gtk:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.2.2-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgudev-1.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:238-5ubuntu1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libaa1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.4p5-51.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libiec61883-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.0-6build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up mdevctl \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.0-1ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libavc1394-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.4-5build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libdbusmenu-gtk3-4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e18.10.20180917~bzr492+repack1-3.1ubuntu5\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnftables1:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.9-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gstreamer1.0-x:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu0.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up nftables \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.9-1build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-system-common \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/multi-user.target.wants/qemu-kvm.service → /usr/lib/systemd/system/qemu-kvm.ser\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evice.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libcaca0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.99.beta20-4build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up alsa-ucm-conf \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.2.10-1ubuntu5.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gstreamer1.0-plugins-good:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.24.2-1ubuntu1.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-system-x86 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-gtk-3.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.24.41-4ubuntu1.3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libparted2t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.6-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRemoving \u003cspan class=\"s1\"\u003e\u0026#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2 to /lib/x86_64-linux-gnu/libparted.so.2.usr-is-merged b\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003ey libparted2t64\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRemoving \u003cspan class=\"s1\"\u003e\u0026#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2.0.5 to /lib/x86_64-linux-gnu/libparted.so.2.0.5.usr-is-\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003emerged by libparted2t64\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libgtksourceview-4-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.8.4-5build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnss-mymachines:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e255.4-1ubuntu8.8\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libayatana-appindicator3-1 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.93-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up swtpm \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.7.3-0ubuntu5.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-gtk-vnc-2.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.3.1-1build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-daemon-system-systemd \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-spiceclientgtk-3.0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.42-2ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libjack-jackd2-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.9.21~dfsg-3ubuntu3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libnetfilter-conntrack3:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.0.9-6build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up xml-core \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.19\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-vte-2.91:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.76.0-1ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-daemon \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libsdl2-2.0-0:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.30.0+dfsg-1ubuntu3.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-ayatanaappindicator3-0.1 \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.5.93-1build3\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up gir1.2-gtksource-4:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e4.8.4-5build4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-system-modules-opengl \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up iptables \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.8.10-3ubuntu2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables \u003cspan class=\"o\"\u003e(\u003c/span\u003eiptables\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables \u003cspan class=\"o\"\u003e(\u003c/span\u003eip6tables\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /usr/sbin/iptables-nft to provide /usr/sbin/iptables \u003cspan class=\"o\"\u003e(\u003c/span\u003eiptables\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /usr/sbin/ip6tables-nft to provide /usr/sbin/ip6tables \u003cspan class=\"o\"\u003e(\u003c/span\u003eip6tables\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /usr/sbin/arptables-nft to provide /usr/sbin/arptables \u003cspan class=\"o\"\u003e(\u003c/span\u003earptables\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-alternatives: using /usr/sbin/ebtables-nft to provide /usr/sbin/ebtables \u003cspan class=\"o\"\u003e(\u003c/span\u003eebtables\u003cspan class=\"o\"\u003e)\u003c/span\u003e in auto mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-system-gui \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up parted \u003cspan class=\"o\"\u003e(\u003c/span\u003e3.6-4build1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up dnsmasq-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.90-2build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up swtpm-tools \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.7.3-0ubuntu5.24.04.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo: Selecting GID from range \u003cspan class=\"m\"\u003e100\u003c/span\u003e to \u003cspan class=\"m\"\u003e999\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo: Adding group \u003cspan class=\"sb\"\u003e`\u003c/span\u003eswtpm\u003cspan class=\"s1\"\u003e\u0026#39; (GID 107) ...\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003einfo: The home dir /var/lib/swtpm you specified can\u0026#39;\u003c/span\u003et be accessed: No such file or directory\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo: Selecting UID from range \u003cspan class=\"m\"\u003e100\u003c/span\u003e to \u003cspan class=\"m\"\u003e999\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo: Adding system user \u003cspan class=\"sb\"\u003e`\u003c/span\u003eswtpm\u003cspan class=\"s1\"\u003e\u0026#39; (UID 103) ...\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003einfo: Adding new user `swtpm\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003eUID 103\u003cspan class=\"o\"\u003e)\u003c/span\u003e with group \u003cspan class=\"sb\"\u003e`\u003c/span\u003eswtpm\u003cspan class=\"s1\"\u003e\u0026#39; ...\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003einfo: Not creating home directory `/var/lib/swtpm\u0026#39;\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up virt-manager \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:4.1.0-3ubuntu0.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up qemu-system-modules-spice \u003cspan class=\"o\"\u003e(\u003c/span\u003e1:8.2.2+ds-0ubuntu1.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up liblvm2cmd2.03:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.03.16-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up dmeventd \u003cspan class=\"o\"\u003e(\u003c/span\u003e2:1.02.185-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/sockets.target.wants/dm-event.socket → /usr/lib/systemd/system/dm-event.socket.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up lvm2 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.03.16-3ubuntu3.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/sysinit.target.wants/blk-availability.service → /usr/lib/systemd/system/blk-ava\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eilability.service.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service → /usr/lib/systemd/system/lvm2-monito\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003er.service.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreated symlink /etc/systemd/system/sysinit.target.wants/lvm2-lvmpolld.socket → /usr/lib/systemd/system/lvm2-lvmpol\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eld.socket.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e libglib2.0-0t64:amd64 \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.80.0-6ubuntu3.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e dbus \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.14.10-4ubuntu4.1\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e hicolor-icon-theme \u003cspan class=\"o\"\u003e(\u003c/span\u003e0.17-2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e libc-bin \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.39-0ubuntu8.4\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e man-db \u003cspan class=\"o\"\u003e(\u003c/span\u003e2.12.0-4build2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProcessing triggers \u003cspan class=\"k\"\u003efor\u003c/span\u003e sgml-base \u003cspan class=\"o\"\u003e(\u003c/span\u003e1.31\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up polkitd \u003cspan class=\"o\"\u003e(\u003c/span\u003e124-2ubuntu1.24.04.2\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating group \u003cspan class=\"s1\"\u003e\u0026#39;polkitd\u0026#39;\u003c/span\u003e with GID 991.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCreating user \u003cspan class=\"s1\"\u003e\u0026#39;polkitd\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003eUser \u003cspan class=\"k\"\u003efor\u003c/span\u003e polkitd\u003cspan class=\"o\"\u003e)\u003c/span\u003e with UID \u003cspan class=\"m\"\u003e991\u003c/span\u003e and GID 991.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einvoke-rc.d: could not determine current runlevel\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einvoke-rc.d: policy-rc.d denied execution of reload.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estart-stop-daemon: unable to stat /usr/libexec/polkitd \u003cspan class=\"o\"\u003e(\u003c/span\u003eNo such file or directory\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSetting up libvirt-daemon-system \u003cspan class=\"o\"\u003e(\u003c/span\u003e10.0.0-2ubuntu8.7\u003cspan class=\"o\"\u003e)\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euseradd warning: libvirt-qemu\u003cspan class=\"s1\"\u003e\u0026#39;s uid 64055 is greater than SYS_UID_MAX 999\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003echown: changing ownership of \u0026#39;\u003c/span\u003e/var/lib/libvirt/qemu/\u003cspan class=\"err\"\u003e\u0026#39;\u003c/span\u003e: Operation not permitted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edpkg: error processing package libvirt-daemon-system \u003cspan class=\"o\"\u003e(\u003c/span\u003e--configure\u003cspan class=\"o\"\u003e)\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e installed libvirt-daemon-system package post-installation script subprocess returned error \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e status \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eErrors were encountered \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e processing:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e libvirt-daemon-system\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eE: Sub-process /usr/bin/dpkg returned an error code \u003cspan class=\"o\"\u003e(\u003c/span\u003e1\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e📦\u003cspan class=\"o\"\u003e[\u003c/span\u003ewaylon@ubuntu ~\u003cspan class=\"o\"\u003e]\u003c/span\u003e$ virt-manager\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI got virtual machine manager running on two Bazzite machines today.  It was a\nbit tricky, more than I thought actually.  I ran into all sorts of\nvirtualisation not setup issues when I tried the flatpak.  Then I found that\nBazzite comes with a `ujust setup-virtualization` command that does all the\nwork for me.  I tried that and again virtual machine manager was here, but not\nworking, this time it feels like flatpak issues.\n\nIn a Hail Mary attempt I got it working by using an ubuntu distrobox container\nto run the UI.  And it worked!\n\n## from the host\n\nFrom the host we create the container to use from distrobox.  This is an ubuntu\nmachine, it can be any os of your choosing, preferably one that you are\nfamiliar with and contains virt-manager in its package repos.\n\n``` bash\ndistrobox create -i ubuntu\ndistrobox enter ubuntu\n```\n\n## from inside the distrobox container\n\nNow that we are in the distrobox we are no longer in an immutable distro and we\ncan easily install anything we want.  I actually like this process.  I might\nhave shit like this that I use for a month or a few months, on a normal distro,\nthis is fully installed on the os, raises the potential of package conflicts\nand lengthens the update time.\n\n``` bash\nsudo apt update\nsudo apt upgrade\nsudo apt install virtinst virt-manager\nvirt-manager\n```\n\n## Along the way\n\nI tried adding myself to the libvirt group, and expicitly setting the socket\npath. After setting up another machine I realized these steps were unnecessary.\n\n``` bash\nsudo usermod -aG libvirt $USER\nexport LIBVIRT_DEFAULT_URI=\"qemu+unix:///system\"\nls -l /run/libvirt/libvirt-sock\nvirt-install --version\n```\n\n!!! Note\n    After fully reading through `ujust setup-virtualization` I realized that it\n    adds me to the libvirt group, so that's why it is not needed.\n\n## An even Better Guide\n\nI later found [[ thoughts-723 ]] there is documentation for setting up virtual\nmachine manager in distrobox in the distrobox docs.  It even calls out running\non an immutable distro like bazzite like it knew I was coming.\n\n## full log\n\n``` bash\nwaylon@razorcrest:~$ distrobox create -i ubuntu\nImage ubuntu not found.\nDo you want to pull the image now? [Y/n]: y\nResolved \"ubuntu\" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)\nTrying to pull docker.io/library/ubuntu:latest...\nGetting image source signatures\nCopying blob d9d352c11bbd done   |\nCopying config bf16bdcff9 done   |\nWriting manifest to image destination\nbf16bdcff9c96b76a6d417bd8f0a3abe0e55c0ed9bdb3549e906834e2592fd5f\nCreating 'ubuntu' using image ubuntu  [ OK ]\nDistrobox 'ubuntu' successfully created.\nTo enter, run:\n\ndistrobox enter ubuntu\n\nwaylon@razorcrest:~$ distrobox enter ubuntu\nStarting container...                     [ OK ]\nInstalling basic packages...              [ OK ]\nSetting up devpts mounts...               [ OK ]\nSetting up read-only mounts...            [ OK ]\nSetting up read-write mounts...           [ OK ]\nSetting up host's sockets integration...  [ OK ]\nIntegrating host's themes, icons, fonts...  [ OK ]\nSetting up distrobox profile...           [ OK ]\nSetting up sudo...                        [ OK ]\nSetting up user groups...                 [ OK ]\nSetting up user's group list...           [ OK ]\nSetting up existing user...               [ OK ]\nEnsuring user's access...                 [ OK ]\n\nContainer Setup Complete!\n📦[waylon@ubuntu ~]$ sudo apt update\nsudo apt install virtinst\nHit:1 http://security.ubuntu.com/ubuntu noble-security InRelease\nHit:2 http://archive.ubuntu.com/ubuntu noble InRelease\nHit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease\nHit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\n4 packages can be upgraded. Run 'apt list --upgradable' to see them.\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following additional packages will be installed:\n  gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services\n  gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaio1t64 libasyncns0\n  libboost-iostreams1.83.0 libboost-thread1.83.0 libburn4t64 libcacard0 libcdparanoia0 libcurl3t64-gnutls\n  libdaxctl1 libduktape207 libdw1t64 libflac12t64 libfuse3-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0\n  libgtk-vnc-2.0-0 libgvnc-1.0-0 libigdgmm12 libiscsi7 libisoburn1t64 libisofs6t64 libjson-glib-1.0-0\n  libjson-glib-1.0-common libmp3lame0 libmpg123-0t64 libndctl6 libnfs14 libnspr4 libnss3 libnuma1 libogg0\n  libopus0 liborc-0.4-0t64 libosinfo-1.0-0 libosinfo-l10n libpcsclite1 libphodav-3.0-0 libphodav-3.0-common\n  libpmem1 libpmemobj1 libpolkit-gobject-1-0 libproxy1v5 libpulse0 librados2 librbd1 librdmacm1t64 libsndfile1\n  libsoup-3.0-0 libsoup-3.0-common libspice-client-glib-2.0-8 libspice-client-gtk-3.0-5 libtheora0 libunwind8\n  liburing2 libusb-1.0-0 libusbredirhost1t64 libusbredirparser1t64 libva-x11-2 libva2 libvirt-clients\n  libvirt-glib-1.0-0 libvirt-glib-1.0-data libvirt-l10n libvirt0 libvisual-0.4-0 libvorbis0a libvorbisenc2\n  libvte-2.91-0 libxslt1.1 libyajl2 mesa-va-drivers osinfo-db pci.ids python3-certifi python3-chardet\n  python3-idna python3-libvirt python3-libxml2 python3-pkg-resources python3-requests python3-urllib3\n  qemu-block-extra qemu-utils spice-client-glib-usb-acl-helper usb.ids va-driver-all virt-viewer xorriso\nSuggested packages:\n  gvfs i965-va-driver-shaders isoquery fuse3 libvisual-0.4-plugins gstreamer1.0-tools opus-tools pcscd pulseaudio\n  gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-good libvirt-clients-qemu libvirt-daemon\n  libvirt-login-shell python3-setuptools python3-cryptography python3-openssl python3-socks python-requests-doc\n  python3-brotli netcat python3-argcomplete xorriso-tcltk jigit cdck\nThe following NEW packages will be installed:\n  gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services\n  gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaio1t64 libasyncns0\n  libboost-iostreams1.83.0 libboost-thread1.83.0 libburn4t64 libcacard0 libcdparanoia0 libcurl3t64-gnutls\n  libdaxctl1 libduktape207 libdw1t64 libflac12t64 libfuse3-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0\n  libgtk-vnc-2.0-0 libgvnc-1.0-0 libigdgmm12 libiscsi7 libisoburn1t64 libisofs6t64 libjson-glib-1.0-0\n  libjson-glib-1.0-common libmp3lame0 libmpg123-0t64 libndctl6 libnfs14 libnspr4 libnss3 libnuma1 libogg0\n  libopus0 liborc-0.4-0t64 libosinfo-1.0-0 libosinfo-l10n libpcsclite1 libphodav-3.0-0 libphodav-3.0-common\n  libpmem1 libpmemobj1 libpolkit-gobject-1-0 libproxy1v5 libpulse0 librados2 librbd1 librdmacm1t64 libsndfile1\n  libsoup-3.0-0 libsoup-3.0-common libspice-client-glib-2.0-8 libspice-client-gtk-3.0-5 libtheora0 libunwind8\n  liburing2 libusb-1.0-0 libusbredirhost1t64 libusbredirparser1t64 libva-x11-2 libva2 libvirt-clients\n  libvirt-glib-1.0-0 libvirt-glib-1.0-data libvirt-l10n libvirt0 libvisual-0.4-0 libvorbis0a libvorbisenc2\n  libvte-2.91-0 libxslt1.1 libyajl2 mesa-va-drivers osinfo-db pci.ids python3-certifi python3-chardet\n  python3-idna python3-libvirt python3-libxml2 python3-pkg-resources python3-requests python3-urllib3\n  qemu-block-extra qemu-utils spice-client-glib-usb-acl-helper usb.ids va-driver-all virt-viewer virtinst xorriso\n0 upgraded, 98 newly installed, 0 to remove and 4 not upgraded.\nNeed to get 34.2 MB of archives.\nAfter this operation, 143 MB of additional disk space will be used.\nDo you want to continue? [Y/n] y\nGet:1 http://archive.ubuntu.com/ubuntu noble/main amd64 iso-codes all 4.16.0-1 [3,492 kB]\nGet:2 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-pkg-resources all 68.1.2-2ubuntu1.2 [168 kB]\nGet:3 http://archive.ubuntu.com/ubuntu noble/main amd64 libfuse3-3 amd64 3.14.0-5build1 [83.1 kB]\nGet:4 http://archive.ubuntu.com/ubuntu noble/main amd64 libnuma1 amd64 2.0.18-1build1 [23.3 kB]\nGet:5 http://archive.ubuntu.com/ubuntu noble/main amd64 libusb-1.0-0 amd64 2:1.0.27-1 [54.0 kB]\nGet:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 pci.ids all 0.0~2024.03.31-1ubuntu0.1 [275 kB]\nGet:7 http://archive.ubuntu.com/ubuntu noble/main amd64 usb.ids all 2024.03.18-1 [223 kB]\nGet:8 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-freedesktop amd64 1.80.1-1 [49.7 kB]\nGet:9 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libcurl3t64-gnutls amd64 8.5.0-2ubuntu10.6 [333 kB]\nGet:10 http://archive.ubuntu.com/ubuntu noble/main amd64 libduktape207 amd64 2.7.0+tests-0ubuntu3 [143 kB]\nGet:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libproxy1v5 amd64 0.5.4-4build1 [26.5 kB]\nGet:12 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking-common all 2.80.0-1build1 [6,702 B]\nGet:13 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking-services amd64 2.80.0-1build1 [12.8 kB]\nGet:14 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking amd64 2.80.0-1build1 [64.1 kB]\nGet:15 http://archive.ubuntu.com/ubuntu noble/main amd64 libcdparanoia0 amd64 3.10.2+debian-14build3 [48.5 kB]\nGet:16 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdw1t64 amd64 0.190-1.1ubuntu0.1 [261 kB]\nGet:17 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libunwind8 amd64 1.6.2-3build1.1 [55.3 kB]\nGet:18 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer1.0-0 amd64 1.24.2-1ubuntu0.1 [1,165 kB]\nGet:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liborc-0.4-0t64 amd64 1:0.4.38-1ubuntu0.1 [207 kB]\nGet:20 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-base1.0-0 amd64 1.24.2-1ubuntu0.2 [862 kB]\nGet:21 http://archive.ubuntu.com/ubuntu noble/main amd64 libogg0 amd64 1.3.5-3build1 [22.7 kB]\nGet:22 http://archive.ubuntu.com/ubuntu noble/main amd64 libopus0 amd64 1.4-1build1 [208 kB]\nGet:23 http://archive.ubuntu.com/ubuntu noble/main amd64 libtheora0 amd64 1.1.1+dfsg.1-16.1build3 [211 kB]\nGet:24 http://archive.ubuntu.com/ubuntu noble/main amd64 libvisual-0.4-0 amd64 0.4.2-2build1 [115 kB]\nGet:25 http://archive.ubuntu.com/ubuntu noble/main amd64 libvorbis0a amd64 1.3.7-1build3 [97.6 kB]\nGet:26 http://archive.ubuntu.com/ubuntu noble/main amd64 libvorbisenc2 amd64 1.3.7-1build3 [80.8 kB]\nGet:27 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-base amd64 1.24.2-1ubuntu0.2 [721 kB]\nGet:28 http://archive.ubuntu.com/ubuntu noble/universe amd64 libva2 amd64 2.20.0-2build1 [66.2 kB]\nGet:29 http://archive.ubuntu.com/ubuntu noble/universe amd64 libigdgmm12 amd64 22.3.17+ds1-1 [145 kB]\nGet:30 http://archive.ubuntu.com/ubuntu noble/universe amd64 intel-media-va-driver amd64 24.1.0+dfsg1-1 [4,022 kB]\nGet:31 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libaio1t64 amd64 0.3.113-6build1.1 [7,210 B]\nGet:32 http://archive.ubuntu.com/ubuntu noble/main amd64 libasyncns0 amd64 0.8-6build4 [11.3 kB]\nGet:33 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-iostreams1.83.0 amd64 1.83.0-2.1ubuntu3.1 [259 kB]\nGet:34 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-thread1.83.0 amd64 1.83.0-2.1ubuntu3.1 [276 kB]\nGet:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libburn4t64 amd64 1.5.6-1.1build1 [158 kB]\nGet:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libnspr4 amd64 2:4.35-1.1build1 [117 kB]\nGet:37 http://archive.ubuntu.com/ubuntu noble/main amd64 libnss3 amd64 2:3.98-1build1 [1,445 kB]\nGet:38 http://archive.ubuntu.com/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.3-1build1 [21.4 kB]\nGet:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libcacard0 amd64 1:2.8.0-3build4 [36.5 kB]\nGet:40 http://archive.ubuntu.com/ubuntu noble/main amd64 libdaxctl1 amd64 77-2ubuntu2 [21.4 kB]\nGet:41 http://archive.ubuntu.com/ubuntu noble/main amd64 libflac12t64 amd64 1.4.3+ds-2.1ubuntu2 [197 kB]\nGet:42 http://archive.ubuntu.com/ubuntu noble/main amd64 libmp3lame0 amd64 3.100-6build1 [142 kB]\nGet:43 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libmpg123-0t64 amd64 1.32.5-1ubuntu1.1 [169 kB]\nGet:44 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsndfile1 amd64 1.2.2-1ubuntu5.24.04.1 [209 kB]\nGet:45 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpulse0 amd64 1:16.1+dfsg1-2ubuntu10.1 [292 kB]\nGet:46 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgvnc-1.0-0 amd64 1.3.1-1build2 [67.1 kB]\nGet:47 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtk-vnc-2.0-0 amd64 1.3.1-1build2 [28.9 kB]\nGet:48 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librdmacm1t64 amd64 50.0-2ubuntu0.2 [70.7 kB]\nGet:49 http://archive.ubuntu.com/ubuntu noble/main amd64 libiscsi7 amd64 1.19.0-3build4 [68.7 kB]\nGet:50 http://archive.ubuntu.com/ubuntu noble/main amd64 libisofs6t64 amd64 1.5.6.pl01-1.1ubuntu2 [220 kB]\nGet:51 http://archive.ubuntu.com/ubuntu noble/main amd64 libisoburn1t64 amd64 1:1.5.6-1.1ubuntu3 [405 kB]\nGet:52 http://archive.ubuntu.com/ubuntu noble/main amd64 libjson-glib-1.0-common all 1.8.0-2build2 [4,244 B]\nGet:53 http://archive.ubuntu.com/ubuntu noble/main amd64 libjson-glib-1.0-0 amd64 1.8.0-2build2 [68.0 kB]\nGet:54 http://archive.ubuntu.com/ubuntu noble/main amd64 libndctl6 amd64 77-2ubuntu2 [62.8 kB]\nGet:55 http://archive.ubuntu.com/ubuntu noble/main amd64 libnfs14 amd64 5.0.2-1build1 [109 kB]\nGet:56 http://archive.ubuntu.com/ubuntu noble/universe amd64 libphodav-3.0-common all 3.0-8build3 [14.9 kB]\nGet:57 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsoup-3.0-common all 3.4.4-5ubuntu0.4 [11.1 kB]\nGet:58 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsoup-3.0-0 amd64 3.4.4-5ubuntu0.4 [290 kB]\nGet:59 http://archive.ubuntu.com/ubuntu noble/universe amd64 libphodav-3.0-0 amd64 3.0-8build3 [29.9 kB]\nGet:60 http://archive.ubuntu.com/ubuntu noble/main amd64 libpmem1 amd64 1.13.1-1.1ubuntu2 [84.8 kB]\nGet:61 http://archive.ubuntu.com/ubuntu noble/main amd64 libpmemobj1 amd64 1.13.1-1.1ubuntu2 [116 kB]\nGet:62 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpolkit-gobject-1-0 amd64 124-2ubuntu1.24.04.2 [49.1 kB]\nGet:63 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librados2 amd64 19.2.0-0ubuntu0.24.04.2 [3,972 kB]\nGet:64 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librbd1 amd64 19.2.0-0ubuntu0.24.04.2 [3,351 kB]\nGet:65 http://archive.ubuntu.com/ubuntu noble/universe amd64 spice-client-glib-usb-acl-helper amd64 0.42-2ubuntu2 [12.5 kB]\nGet:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libusbredirparser1t64 amd64 0.13.0-2.1build1 [16.5 kB]\nGet:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libusbredirhost1t64 amd64 0.13.0-2.1build1 [20.0 kB]\nGet:68 http://archive.ubuntu.com/ubuntu noble/universe amd64 libspice-client-glib-2.0-8 amd64 0.42-2ubuntu2 [314 kB]\nGet:69 http://archive.ubuntu.com/ubuntu noble/universe amd64 libva-x11-2 amd64 2.20.0-2build1 [12.0 kB]\nGet:70 http://archive.ubuntu.com/ubuntu noble/universe amd64 libspice-client-gtk-3.0-5 amd64 0.42-2ubuntu2 [56.6 kB]\nGet:71 http://archive.ubuntu.com/ubuntu noble/main amd64 liburing2 amd64 2.5-1build1 [21.1 kB]\nGet:72 http://archive.ubuntu.com/ubuntu noble/main amd64 libyajl2 amd64 2.1.0-5build1 [20.2 kB]\nGet:73 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt0 amd64 10.0.0-2ubuntu8.7 [1,826 kB]\nGet:74 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-clients amd64 10.0.0-2ubuntu8.7 [438 kB]\nGet:75 http://archive.ubuntu.com/ubuntu noble/universe amd64 libvirt-glib-1.0-data all 5.0.0-2build3 [17.3 kB]\nGet:76 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-l10n all 10.0.0-2ubuntu8.7 [1,150 B]\nGet:77 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvte-2.91-0 amd64 0.76.0-1ubuntu0.1 [230 kB]\nGet:78 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxslt1.1 amd64 1.1.39-0exp1ubuntu0.24.04.2 [167 kB]\nGet:79 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 mesa-va-drivers amd64 24.2.8-1ubuntu1~24.04.1 [19.5 kB]\nGet:80 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 osinfo-db all 0.20250124-0ubuntu0.24.04.1 [176 kB]\nGet:81 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-certifi all 2023.11.17-1 [165 kB]\nGet:82 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-chardet all 5.2.0+dfsg-1 [117 kB]\nGet:83 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-idna all 3.6-2ubuntu0.1 [49.0 kB]\nGet:84 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-libvirt amd64 10.0.0-1build1 [164 kB]\nGet:85 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-libxml2 amd64 2.9.14+dfsg-1.3ubuntu3.3 [140 kB]\nGet:86 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-urllib3 all 2.0.7-1ubuntu0.2 [93.3 kB]\nGet:87 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-requests all 2.31.0+dfsg-1ubuntu1.1 [50.8 kB]\nGet:88 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-utils amd64 1:8.2.2+ds-0ubuntu1.7 [2,220 kB]\nGet:89 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-block-extra amd64 1:8.2.2+ds-0ubuntu1.7 [111 kB]\nGet:90 http://archive.ubuntu.com/ubuntu noble/universe amd64 i965-va-driver amd64 2.4.1+dfsg1-1build2 [332 kB]\nGet:91 http://archive.ubuntu.com/ubuntu noble/universe amd64 va-driver-all amd64 2.20.0-2build1 [4,844 B]\nGet:92 http://archive.ubuntu.com/ubuntu noble/universe amd64 libvirt-glib-1.0-0 amd64 5.0.0-2build3 [121 kB]\nGet:93 http://archive.ubuntu.com/ubuntu noble/universe amd64 virt-viewer amd64 11.0-3build2 [285 kB]\nGet:94 http://archive.ubuntu.com/ubuntu noble/main amd64 xorriso amd64 1:1.5.6-1.1ubuntu3 [297 kB]\nGet:95 http://archive.ubuntu.com/ubuntu noble/universe amd64 libosinfo-l10n all 1.11.0-2build3 [50.6 kB]\nGet:96 http://archive.ubuntu.com/ubuntu noble/universe amd64 libosinfo-1.0-0 amd64 1.11.0-2build3 [91.5 kB]\nGet:97 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-libosinfo-1.0 amd64 1.11.0-2build3 [18.6 kB]\nGet:98 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 virtinst all 1:4.1.0-3ubuntu0.1 [891 kB]\nFetched 34.2 MB in 3s (10.8 MB/s)\nExtracting templates from packages: 100%\nSelecting previously unselected package iso-codes.\n(Reading database ... 26588 files and directories currently installed.)\nPreparing to unpack .../00-iso-codes_4.16.0-1_all.deb ...\nUnpacking iso-codes (4.16.0-1) ...\nSelecting previously unselected package python3-pkg-resources.\nPreparing to unpack .../01-python3-pkg-resources_68.1.2-2ubuntu1.2_all.deb ...\nUnpacking python3-pkg-resources (68.1.2-2ubuntu1.2) ...\nSelecting previously unselected package libfuse3-3:amd64.\nPreparing to unpack .../02-libfuse3-3_3.14.0-5build1_amd64.deb ...\nUnpacking libfuse3-3:amd64 (3.14.0-5build1) ...\nSelecting previously unselected package libnuma1:amd64.\nPreparing to unpack .../03-libnuma1_2.0.18-1build1_amd64.deb ...\nUnpacking libnuma1:amd64 (2.0.18-1build1) ...\nSelecting previously unselected package libusb-1.0-0:amd64.\nPreparing to unpack .../04-libusb-1.0-0_2%3a1.0.27-1_amd64.deb ...\nUnpacking libusb-1.0-0:amd64 (2:1.0.27-1) ...\nSelecting previously unselected package pci.ids.\nPreparing to unpack .../05-pci.ids_0.0~2024.03.31-1ubuntu0.1_all.deb ...\nUnpacking pci.ids (0.0~2024.03.31-1ubuntu0.1) ...\nSelecting previously unselected package usb.ids.\nPreparing to unpack .../06-usb.ids_2024.03.18-1_all.deb ...\nUnpacking usb.ids (2024.03.18-1) ...\nSelecting previously unselected package gir1.2-freedesktop:amd64.\nPreparing to unpack .../07-gir1.2-freedesktop_1.80.1-1_amd64.deb ...\nUnpacking gir1.2-freedesktop:amd64 (1.80.1-1) ...\nSelecting previously unselected package libcurl3t64-gnutls:amd64.\nPreparing to unpack .../08-libcurl3t64-gnutls_8.5.0-2ubuntu10.6_amd64.deb ...\nUnpacking libcurl3t64-gnutls:amd64 (8.5.0-2ubuntu10.6) ...\nSelecting previously unselected package libduktape207:amd64.\nPreparing to unpack .../09-libduktape207_2.7.0+tests-0ubuntu3_amd64.deb ...\nUnpacking libduktape207:amd64 (2.7.0+tests-0ubuntu3) ...\nSelecting previously unselected package libproxy1v5:amd64.\nPreparing to unpack .../10-libproxy1v5_0.5.4-4build1_amd64.deb ...\nUnpacking libproxy1v5:amd64 (0.5.4-4build1) ...\nSelecting previously unselected package glib-networking-common.\nPreparing to unpack .../11-glib-networking-common_2.80.0-1build1_all.deb ...\nUnpacking glib-networking-common (2.80.0-1build1) ...\nSelecting previously unselected package glib-networking-services.\nPreparing to unpack .../12-glib-networking-services_2.80.0-1build1_amd64.deb ...\nUnpacking glib-networking-services (2.80.0-1build1) ...\nSelecting previously unselected package glib-networking:amd64.\nPreparing to unpack .../13-glib-networking_2.80.0-1build1_amd64.deb ...\nUnpacking glib-networking:amd64 (2.80.0-1build1) ...\nSelecting previously unselected package libcdparanoia0:amd64.\nPreparing to unpack .../14-libcdparanoia0_3.10.2+debian-14build3_amd64.deb ...\nUnpacking libcdparanoia0:amd64 (3.10.2+debian-14build3) ...\nSelecting previously unselected package libdw1t64:amd64.\nPreparing to unpack .../15-libdw1t64_0.190-1.1ubuntu0.1_amd64.deb ...\nUnpacking libdw1t64:amd64 (0.190-1.1ubuntu0.1) ...\nSelecting previously unselected package libunwind8:amd64.\nPreparing to unpack .../16-libunwind8_1.6.2-3build1.1_amd64.deb ...\nUnpacking libunwind8:amd64 (1.6.2-3build1.1) ...\nSelecting previously unselected package libgstreamer1.0-0:amd64.\nPreparing to unpack .../17-libgstreamer1.0-0_1.24.2-1ubuntu0.1_amd64.deb ...\nUnpacking libgstreamer1.0-0:amd64 (1.24.2-1ubuntu0.1) ...\nSelecting previously unselected package liborc-0.4-0t64:amd64.\nPreparing to unpack .../18-liborc-0.4-0t64_1%3a0.4.38-1ubuntu0.1_amd64.deb ...\nUnpacking liborc-0.4-0t64:amd64 (1:0.4.38-1ubuntu0.1) ...\nSelecting previously unselected package libgstreamer-plugins-base1.0-0:amd64.\nPreparing to unpack .../19-libgstreamer-plugins-base1.0-0_1.24.2-1ubuntu0.2_amd64.deb ...\nUnpacking libgstreamer-plugins-base1.0-0:amd64 (1.24.2-1ubuntu0.2) ...\nSelecting previously unselected package libogg0:amd64.\nPreparing to unpack .../20-libogg0_1.3.5-3build1_amd64.deb ...\nUnpacking libogg0:amd64 (1.3.5-3build1) ...\nSelecting previously unselected package libopus0:amd64.\nPreparing to unpack .../21-libopus0_1.4-1build1_amd64.deb ...\nUnpacking libopus0:amd64 (1.4-1build1) ...\nSelecting previously unselected package libtheora0:amd64.\nPreparing to unpack .../22-libtheora0_1.1.1+dfsg.1-16.1build3_amd64.deb ...\nUnpacking libtheora0:amd64 (1.1.1+dfsg.1-16.1build3) ...\nSelecting previously unselected package libvisual-0.4-0:amd64.\nPreparing to unpack .../23-libvisual-0.4-0_0.4.2-2build1_amd64.deb ...\nUnpacking libvisual-0.4-0:amd64 (0.4.2-2build1) ...\nSelecting previously unselected package libvorbis0a:amd64.\nPreparing to unpack .../24-libvorbis0a_1.3.7-1build3_amd64.deb ...\nUnpacking libvorbis0a:amd64 (1.3.7-1build3) ...\nSelecting previously unselected package libvorbisenc2:amd64.\nPreparing to unpack .../25-libvorbisenc2_1.3.7-1build3_amd64.deb ...\nUnpacking libvorbisenc2:amd64 (1.3.7-1build3) ...\nSelecting previously unselected package gstreamer1.0-plugins-base:amd64.\nPreparing to unpack .../26-gstreamer1.0-plugins-base_1.24.2-1ubuntu0.2_amd64.deb ...\nUnpacking gstreamer1.0-plugins-base:amd64 (1.24.2-1ubuntu0.2) ...\nSelecting previously unselected package libva2:amd64.\nPreparing to unpack .../27-libva2_2.20.0-2build1_amd64.deb ...\nUnpacking libva2:amd64 (2.20.0-2build1) ...\nSelecting previously unselected package libigdgmm12:amd64.\nPreparing to unpack .../28-libigdgmm12_22.3.17+ds1-1_amd64.deb ...\nUnpacking libigdgmm12:amd64 (22.3.17+ds1-1) ...\nSelecting previously unselected package intel-media-va-driver:amd64.\nPreparing to unpack .../29-intel-media-va-driver_24.1.0+dfsg1-1_amd64.deb ...\nUnpacking intel-media-va-driver:amd64 (24.1.0+dfsg1-1) ...\nSelecting previously unselected package libaio1t64:amd64.\nPreparing to unpack .../30-libaio1t64_0.3.113-6build1.1_amd64.deb ...\nUnpacking libaio1t64:amd64 (0.3.113-6build1.1) ...\nSelecting previously unselected package libasyncns0:amd64.\nPreparing to unpack .../31-libasyncns0_0.8-6build4_amd64.deb ...\nUnpacking libasyncns0:amd64 (0.8-6build4) ...\nSelecting previously unselected package libboost-iostreams1.83.0:amd64.\nPreparing to unpack .../32-libboost-iostreams1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ...\nUnpacking libboost-iostreams1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ...\nSelecting previously unselected package libboost-thread1.83.0:amd64.\nPreparing to unpack .../33-libboost-thread1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ...\nUnpacking libboost-thread1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ...\nSelecting previously unselected package libburn4t64:amd64.\nPreparing to unpack .../34-libburn4t64_1.5.6-1.1build1_amd64.deb ...\nUnpacking libburn4t64:amd64 (1.5.6-1.1build1) ...\nSelecting previously unselected package libnspr4:amd64.\nPreparing to unpack .../35-libnspr4_2%3a4.35-1.1build1_amd64.deb ...\nUnpacking libnspr4:amd64 (2:4.35-1.1build1) ...\nSelecting previously unselected package libnss3:amd64.\nPreparing to unpack .../36-libnss3_2%3a3.98-1build1_amd64.deb ...\nUnpacking libnss3:amd64 (2:3.98-1build1) ...\nSelecting previously unselected package libpcsclite1:amd64.\nPreparing to unpack .../37-libpcsclite1_2.0.3-1build1_amd64.deb ...\nUnpacking libpcsclite1:amd64 (2.0.3-1build1) ...\nSelecting previously unselected package libcacard0:amd64.\nPreparing to unpack .../38-libcacard0_1%3a2.8.0-3build4_amd64.deb ...\nUnpacking libcacard0:amd64 (1:2.8.0-3build4) ...\nSelecting previously unselected package libdaxctl1:amd64.\nPreparing to unpack .../39-libdaxctl1_77-2ubuntu2_amd64.deb ...\nUnpacking libdaxctl1:amd64 (77-2ubuntu2) ...\nSelecting previously unselected package libflac12t64:amd64.\nPreparing to unpack .../40-libflac12t64_1.4.3+ds-2.1ubuntu2_amd64.deb ...\nUnpacking libflac12t64:amd64 (1.4.3+ds-2.1ubuntu2) ...\nSelecting previously unselected package libmp3lame0:amd64.\nPreparing to unpack .../41-libmp3lame0_3.100-6build1_amd64.deb ...\nUnpacking libmp3lame0:amd64 (3.100-6build1) ...\nSelecting previously unselected package libmpg123-0t64:amd64.\nPreparing to unpack .../42-libmpg123-0t64_1.32.5-1ubuntu1.1_amd64.deb ...\nUnpacking libmpg123-0t64:amd64 (1.32.5-1ubuntu1.1) ...\nSelecting previously unselected package libsndfile1:amd64.\nPreparing to unpack .../43-libsndfile1_1.2.2-1ubuntu5.24.04.1_amd64.deb ...\nUnpacking libsndfile1:amd64 (1.2.2-1ubuntu5.24.04.1) ...\nSelecting previously unselected package libpulse0:amd64.\nPreparing to unpack .../44-libpulse0_1%3a16.1+dfsg1-2ubuntu10.1_amd64.deb ...\nUnpacking libpulse0:amd64 (1:16.1+dfsg1-2ubuntu10.1) ...\nSelecting previously unselected package libgvnc-1.0-0:amd64.\nPreparing to unpack .../45-libgvnc-1.0-0_1.3.1-1build2_amd64.deb ...\nUnpacking libgvnc-1.0-0:amd64 (1.3.1-1build2) ...\nSelecting previously unselected package libgtk-vnc-2.0-0:amd64.\nPreparing to unpack .../46-libgtk-vnc-2.0-0_1.3.1-1build2_amd64.deb ...\nUnpacking libgtk-vnc-2.0-0:amd64 (1.3.1-1build2) ...\nSelecting previously unselected package librdmacm1t64:amd64.\nPreparing to unpack .../47-librdmacm1t64_50.0-2ubuntu0.2_amd64.deb ...\nUnpacking librdmacm1t64:amd64 (50.0-2ubuntu0.2) ...\nSelecting previously unselected package libiscsi7:amd64.\nPreparing to unpack .../48-libiscsi7_1.19.0-3build4_amd64.deb ...\nUnpacking libiscsi7:amd64 (1.19.0-3build4) ...\nSelecting previously unselected package libisofs6t64:amd64.\nPreparing to unpack .../49-libisofs6t64_1.5.6.pl01-1.1ubuntu2_amd64.deb ...\nUnpacking libisofs6t64:amd64 (1.5.6.pl01-1.1ubuntu2) ...\nSelecting previously unselected package libisoburn1t64:amd64.\nPreparing to unpack .../50-libisoburn1t64_1%3a1.5.6-1.1ubuntu3_amd64.deb ...\nUnpacking libisoburn1t64:amd64 (1:1.5.6-1.1ubuntu3) ...\nSelecting previously unselected package libjson-glib-1.0-common.\nPreparing to unpack .../51-libjson-glib-1.0-common_1.8.0-2build2_all.deb ...\nUnpacking libjson-glib-1.0-common (1.8.0-2build2) ...\nSelecting previously unselected package libjson-glib-1.0-0:amd64.\nPreparing to unpack .../52-libjson-glib-1.0-0_1.8.0-2build2_amd64.deb ...\nUnpacking libjson-glib-1.0-0:amd64 (1.8.0-2build2) ...\nSelecting previously unselected package libndctl6:amd64.\nPreparing to unpack .../53-libndctl6_77-2ubuntu2_amd64.deb ...\nUnpacking libndctl6:amd64 (77-2ubuntu2) ...\nSelecting previously unselected package libnfs14:amd64.\nPreparing to unpack .../54-libnfs14_5.0.2-1build1_amd64.deb ...\nUnpacking libnfs14:amd64 (5.0.2-1build1) ...\nSelecting previously unselected package libphodav-3.0-common.\nPreparing to unpack .../55-libphodav-3.0-common_3.0-8build3_all.deb ...\nUnpacking libphodav-3.0-common (3.0-8build3) ...\nSelecting previously unselected package libsoup-3.0-common.\nPreparing to unpack .../56-libsoup-3.0-common_3.4.4-5ubuntu0.4_all.deb ...\nUnpacking libsoup-3.0-common (3.4.4-5ubuntu0.4) ...\nSelecting previously unselected package libsoup-3.0-0:amd64.\nPreparing to unpack .../57-libsoup-3.0-0_3.4.4-5ubuntu0.4_amd64.deb ...\nUnpacking libsoup-3.0-0:amd64 (3.4.4-5ubuntu0.4) ...\nSelecting previously unselected package libphodav-3.0-0:amd64.\nPreparing to unpack .../58-libphodav-3.0-0_3.0-8build3_amd64.deb ...\nUnpacking libphodav-3.0-0:amd64 (3.0-8build3) ...\nSelecting previously unselected package libpmem1:amd64.\nPreparing to unpack .../59-libpmem1_1.13.1-1.1ubuntu2_amd64.deb ...\nUnpacking libpmem1:amd64 (1.13.1-1.1ubuntu2) ...\nSelecting previously unselected package libpmemobj1:amd64.\nPreparing to unpack .../60-libpmemobj1_1.13.1-1.1ubuntu2_amd64.deb ...\nUnpacking libpmemobj1:amd64 (1.13.1-1.1ubuntu2) ...\nSelecting previously unselected package libpolkit-gobject-1-0:amd64.\nPreparing to unpack .../61-libpolkit-gobject-1-0_124-2ubuntu1.24.04.2_amd64.deb ...\nUnpacking libpolkit-gobject-1-0:amd64 (124-2ubuntu1.24.04.2) ...\nSelecting previously unselected package librados2.\nPreparing to unpack .../62-librados2_19.2.0-0ubuntu0.24.04.2_amd64.deb ...\nUnpacking librados2 (19.2.0-0ubuntu0.24.04.2) ...\nSelecting previously unselected package librbd1.\nPreparing to unpack .../63-librbd1_19.2.0-0ubuntu0.24.04.2_amd64.deb ...\nUnpacking librbd1 (19.2.0-0ubuntu0.24.04.2) ...\nSelecting previously unselected package spice-client-glib-usb-acl-helper.\nPreparing to unpack .../64-spice-client-glib-usb-acl-helper_0.42-2ubuntu2_amd64.deb ...\nUnpacking spice-client-glib-usb-acl-helper (0.42-2ubuntu2) ...\nSelecting previously unselected package libusbredirparser1t64:amd64.\nPreparing to unpack .../65-libusbredirparser1t64_0.13.0-2.1build1_amd64.deb ...\nUnpacking libusbredirparser1t64:amd64 (0.13.0-2.1build1) ...\nSelecting previously unselected package libusbredirhost1t64:amd64.\nPreparing to unpack .../66-libusbredirhost1t64_0.13.0-2.1build1_amd64.deb ...\nUnpacking libusbredirhost1t64:amd64 (0.13.0-2.1build1) ...\nSelecting previously unselected package libspice-client-glib-2.0-8:amd64.\nPreparing to unpack .../67-libspice-client-glib-2.0-8_0.42-2ubuntu2_amd64.deb ...\nUnpacking libspice-client-glib-2.0-8:amd64 (0.42-2ubuntu2) ...\nSelecting previously unselected package libva-x11-2:amd64.\nPreparing to unpack .../68-libva-x11-2_2.20.0-2build1_amd64.deb ...\nUnpacking libva-x11-2:amd64 (2.20.0-2build1) ...\nSelecting previously unselected package libspice-client-gtk-3.0-5:amd64.\nPreparing to unpack .../69-libspice-client-gtk-3.0-5_0.42-2ubuntu2_amd64.deb ...\nUnpacking libspice-client-gtk-3.0-5:amd64 (0.42-2ubuntu2) ...\nSelecting previously unselected package liburing2:amd64.\nPreparing to unpack .../70-liburing2_2.5-1build1_amd64.deb ...\nUnpacking liburing2:amd64 (2.5-1build1) ...\nSelecting previously unselected package libyajl2:amd64.\nPreparing to unpack .../71-libyajl2_2.1.0-5build1_amd64.deb ...\nUnpacking libyajl2:amd64 (2.1.0-5build1) ...\nSelecting previously unselected package libvirt0:amd64.\nPreparing to unpack .../72-libvirt0_10.0.0-2ubuntu8.7_amd64.deb ...\nUnpacking libvirt0:amd64 (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libvirt-clients.\nPreparing to unpack .../73-libvirt-clients_10.0.0-2ubuntu8.7_amd64.deb ...\nUnpacking libvirt-clients (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libvirt-glib-1.0-data.\nPreparing to unpack .../74-libvirt-glib-1.0-data_5.0.0-2build3_all.deb ...\nUnpacking libvirt-glib-1.0-data (5.0.0-2build3) ...\nSelecting previously unselected package libvirt-l10n.\nPreparing to unpack .../75-libvirt-l10n_10.0.0-2ubuntu8.7_all.deb ...\nUnpacking libvirt-l10n (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libvte-2.91-0:amd64.\nPreparing to unpack .../76-libvte-2.91-0_0.76.0-1ubuntu0.1_amd64.deb ...\nUnpacking libvte-2.91-0:amd64 (0.76.0-1ubuntu0.1) ...\nSelecting previously unselected package libxslt1.1:amd64.\nPreparing to unpack .../77-libxslt1.1_1.1.39-0exp1ubuntu0.24.04.2_amd64.deb ...\nUnpacking libxslt1.1:amd64 (1.1.39-0exp1ubuntu0.24.04.2) ...\nSelecting previously unselected package mesa-va-drivers:amd64.\nPreparing to unpack .../78-mesa-va-drivers_24.2.8-1ubuntu1~24.04.1_amd64.deb ...\nUnpacking mesa-va-drivers:amd64 (24.2.8-1ubuntu1~24.04.1) ...\nSelecting previously unselected package osinfo-db.\nPreparing to unpack .../79-osinfo-db_0.20250124-0ubuntu0.24.04.1_all.deb ...\nUnpacking osinfo-db (0.20250124-0ubuntu0.24.04.1) ...\nSelecting previously unselected package python3-certifi.\nPreparing to unpack .../80-python3-certifi_2023.11.17-1_all.deb ...\nUnpacking python3-certifi (2023.11.17-1) ...\nSelecting previously unselected package python3-chardet.\nPreparing to unpack .../81-python3-chardet_5.2.0+dfsg-1_all.deb ...\nUnpacking python3-chardet (5.2.0+dfsg-1) ...\nSelecting previously unselected package python3-idna.\nPreparing to unpack .../82-python3-idna_3.6-2ubuntu0.1_all.deb ...\nUnpacking python3-idna (3.6-2ubuntu0.1) ...\nSelecting previously unselected package python3-libvirt.\nPreparing to unpack .../83-python3-libvirt_10.0.0-1build1_amd64.deb ...\nUnpacking python3-libvirt (10.0.0-1build1) ...\nSelecting previously unselected package python3-libxml2:amd64.\nPreparing to unpack .../84-python3-libxml2_2.9.14+dfsg-1.3ubuntu3.3_amd64.deb ...\nUnpacking python3-libxml2:amd64 (2.9.14+dfsg-1.3ubuntu3.3) ...\nSelecting previously unselected package python3-urllib3.\nPreparing to unpack .../85-python3-urllib3_2.0.7-1ubuntu0.2_all.deb ...\nUnpacking python3-urllib3 (2.0.7-1ubuntu0.2) ...\nSelecting previously unselected package python3-requests.\nPreparing to unpack .../86-python3-requests_2.31.0+dfsg-1ubuntu1.1_all.deb ...\nUnpacking python3-requests (2.31.0+dfsg-1ubuntu1.1) ...\nSelecting previously unselected package qemu-utils.\nPreparing to unpack .../87-qemu-utils_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-utils (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package qemu-block-extra.\nPreparing to unpack .../88-qemu-block-extra_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-block-extra (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package i965-va-driver:amd64.\nPreparing to unpack .../89-i965-va-driver_2.4.1+dfsg1-1build2_amd64.deb ...\nUnpacking i965-va-driver:amd64 (2.4.1+dfsg1-1build2) ...\nSelecting previously unselected package va-driver-all:amd64.\nPreparing to unpack .../90-va-driver-all_2.20.0-2build1_amd64.deb ...\nUnpacking va-driver-all:amd64 (2.20.0-2build1) ...\nSelecting previously unselected package libvirt-glib-1.0-0:amd64.\nPreparing to unpack .../91-libvirt-glib-1.0-0_5.0.0-2build3_amd64.deb ...\nUnpacking libvirt-glib-1.0-0:amd64 (5.0.0-2build3) ...\nSelecting previously unselected package virt-viewer.\nPreparing to unpack .../92-virt-viewer_11.0-3build2_amd64.deb ...\nUnpacking virt-viewer (11.0-3build2) ...\nSelecting previously unselected package xorriso.\nPreparing to unpack .../93-xorriso_1%3a1.5.6-1.1ubuntu3_amd64.deb ...\nUnpacking xorriso (1:1.5.6-1.1ubuntu3) ...\nSelecting previously unselected package libosinfo-l10n.\nPreparing to unpack .../94-libosinfo-l10n_1.11.0-2build3_all.deb ...\nUnpacking libosinfo-l10n (1.11.0-2build3) ...\nSelecting previously unselected package libosinfo-1.0-0:amd64.\nPreparing to unpack .../95-libosinfo-1.0-0_1.11.0-2build3_amd64.deb ...\nUnpacking libosinfo-1.0-0:amd64 (1.11.0-2build3) ...\nSelecting previously unselected package gir1.2-libosinfo-1.0:amd64.\nPreparing to unpack .../96-gir1.2-libosinfo-1.0_1.11.0-2build3_amd64.deb ...\nUnpacking gir1.2-libosinfo-1.0:amd64 (1.11.0-2build3) ...\nSelecting previously unselected package virtinst.\nPreparing to unpack .../97-virtinst_1%3a4.1.0-3ubuntu0.1_all.deb ...\nUnpacking virtinst (1:4.1.0-3ubuntu0.1) ...\nSetting up python3-pkg-resources (68.1.2-2ubuntu1.2) ...\nSetting up libcdparanoia0:amd64 (3.10.2+debian-14build3) ...\nSetting up pci.ids (0.0~2024.03.31-1ubuntu0.1) ...\nSetting up gir1.2-freedesktop:amd64 (1.80.1-1) ...\nSetting up libogg0:amd64 (1.3.5-3build1) ...\nSetting up libphodav-3.0-common (3.0-8build3) ...\nSetting up libvisual-0.4-0:amd64 (0.4.2-2build1) ...\nSetting up libyajl2:amd64 (2.1.0-5build1) ...\nSetting up libcurl3t64-gnutls:amd64 (8.5.0-2ubuntu10.6) ...\nSetting up libboost-thread1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ...\nSetting up libigdgmm12:amd64 (22.3.17+ds1-1) ...\nSetting up libsoup-3.0-common (3.4.4-5ubuntu0.4) ...\nSetting up libmpg123-0t64:amd64 (1.32.5-1ubuntu1.1) ...\nSetting up libvte-2.91-0:amd64 (0.76.0-1ubuntu0.1) ...\nSetting up libunwind8:amd64 (1.6.2-3build1.1) ...\nSetting up libnfs14:amd64 (5.0.2-1build1) ...\nSetting up liborc-0.4-0t64:amd64 (1:0.4.38-1ubuntu0.1) ...\nSetting up libdw1t64:amd64 (0.190-1.1ubuntu0.1) ...\nSetting up python3-libxml2:amd64 (2.9.14+dfsg-1.3ubuntu3.3) ...\nSetting up python3-chardet (5.2.0+dfsg-1) ...\nSetting up libvirt-glib-1.0-data (5.0.0-2build3) ...\nSetting up libva2:amd64 (2.20.0-2build1) ...\nSetting up python3-certifi (2023.11.17-1) ...\nSetting up libnspr4:amd64 (2:4.35-1.1build1) ...\nSetting up libboost-iostreams1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ...\nSetting up libopus0:amd64 (1.4-1build1) ...\nSetting up intel-media-va-driver:amd64 (24.1.0+dfsg1-1) ...\nSetting up libvorbis0a:amd64 (1.3.7-1build3) ...\nSetting up python3-idna (3.6-2ubuntu0.1) ...\nSetting up usb.ids (2024.03.18-1) ...\nSetting up osinfo-db (0.20250124-0ubuntu0.24.04.1) ...\nSetting up libpcsclite1:amd64 (2.0.3-1build1) ...\nSetting up libfuse3-3:amd64 (3.14.0-5build1) ...\nSetting up libdaxctl1:amd64 (77-2ubuntu2) ...\nSetting up python3-urllib3 (2.0.7-1ubuntu0.2) ...\nSetting up libnuma1:amd64 (2.0.18-1build1) ...\nSetting up libvirt0:amd64 (10.0.0-2ubuntu8.7) ...\nSetting up libaio1t64:amd64 (0.3.113-6build1.1) ...\nSetting up libvirt-glib-1.0-0:amd64 (5.0.0-2build3) ...\nSetting up libisofs6t64:amd64 (1.5.6.pl01-1.1ubuntu2) ...\nSetting up libduktape207:amd64 (2.7.0+tests-0ubuntu3) ...\nSetting up libasyncns0:amd64 (0.8-6build4) ...\nSetting up libusbredirparser1t64:amd64 (0.13.0-2.1build1) ...\nSetting up libtheora0:amd64 (1.1.1+dfsg.1-16.1build3) ...\nSetting up libxslt1.1:amd64 (1.1.39-0exp1ubuntu0.24.04.2) ...\nSetting up libburn4t64:amd64 (1.5.6-1.1build1) ...\nSetting up libndctl6:amd64 (77-2ubuntu2) ...\nSetting up librdmacm1t64:amd64 (50.0-2ubuntu0.2) ...\nSetting up libjson-glib-1.0-common (1.8.0-2build2) ...\nSetting up libflac12t64:amd64 (1.4.3+ds-2.1ubuntu2) ...\nSetting up libusb-1.0-0:amd64 (2:1.0.27-1) ...\nSetting up mesa-va-drivers:amd64 (24.2.8-1ubuntu1~24.04.1) ...\nSetting up glib-networking-common (2.80.0-1build1) ...\nSetting up liburing2:amd64 (2.5-1build1) ...\nSetting up libiscsi7:amd64 (1.19.0-3build4) ...\nSetting up libisoburn1t64:amd64 (1:1.5.6-1.1ubuntu3) ...\nSetting up xorriso (1:1.5.6-1.1ubuntu3) ...\nSetting up libpmem1:amd64 (1.13.1-1.1ubuntu2) ...\nSetting up libva-x11-2:amd64 (2.20.0-2build1) ...\nSetting up iso-codes (4.16.0-1) ...\nSetting up libpolkit-gobject-1-0:amd64 (124-2ubuntu1.24.04.2) ...\nSetting up libgstreamer1.0-0:amd64 (1.24.2-1ubuntu0.1) ...\nSetcap worked! gst-ptp-helper is not suid!\nSetting up libmp3lame0:amd64 (3.100-6build1) ...\nSetting up i965-va-driver:amd64 (2.4.1+dfsg1-1build2) ...\nSetting up libosinfo-l10n (1.11.0-2build3) ...\nSetting up libvorbisenc2:amd64 (1.3.7-1build3) ...\nSetting up librados2 (19.2.0-0ubuntu0.24.04.2) ...\nSetting up libproxy1v5:amd64 (0.5.4-4build1) ...\nSetting up python3-libvirt (10.0.0-1build1) ...\nSetting up libvirt-clients (10.0.0-2ubuntu8.7) ...\nSetting up spice-client-glib-usb-acl-helper (0.42-2ubuntu2) ...\nSetting up libgstreamer-plugins-base1.0-0:amd64 (1.24.2-1ubuntu0.2) ...\nSetting up libnss3:amd64 (2:3.98-1build1) ...\nSetting up libcacard0:amd64 (1:2.8.0-3build4) ...\nSetting up libusbredirhost1t64:amd64 (0.13.0-2.1build1) ...\nSetting up libjson-glib-1.0-0:amd64 (1.8.0-2build2) ...\nSetting up gstreamer1.0-plugins-base:amd64 (1.24.2-1ubuntu0.2) ...\nSetting up libvirt-l10n (10.0.0-2ubuntu8.7) ...\nSetting up va-driver-all:amd64 (2.20.0-2build1) ...\nSetting up python3-requests (2.31.0+dfsg-1ubuntu1.1) ...\nSetting up libpmemobj1:amd64 (1.13.1-1.1ubuntu2) ...\nSetting up librbd1 (19.2.0-0ubuntu0.24.04.2) ...\nSetting up libsndfile1:amd64 (1.2.2-1ubuntu5.24.04.1) ...\nSetting up qemu-utils (1:8.2.2+ds-0ubuntu1.7) ...\nSetting up qemu-block-extra (1:8.2.2+ds-0ubuntu1.7) ...\nCreated symlink /etc/systemd/system/multi-user.target.wants/run-qemu.mount → /usr/lib/systemd/system/run-qemu.mount\n.\nSetting up glib-networking-services (2.80.0-1build1) ...\nSetting up libpulse0:amd64 (1:16.1+dfsg1-2ubuntu10.1) ...\nSetting up libgvnc-1.0-0:amd64 (1.3.1-1build2) ...\nSetting up glib-networking:amd64 (2.80.0-1build1) ...\nSetting up libgtk-vnc-2.0-0:amd64 (1.3.1-1build2) ...\nSetting up libsoup-3.0-0:amd64 (3.4.4-5ubuntu0.4) ...\nSetting up libphodav-3.0-0:amd64 (3.0-8build3) ...\nSetting up libosinfo-1.0-0:amd64 (1.11.0-2build3) ...\nSetting up gir1.2-libosinfo-1.0:amd64 (1.11.0-2build3) ...\nSetting up libspice-client-glib-2.0-8:amd64 (0.42-2ubuntu2) ...\nSetting up virtinst (1:4.1.0-3ubuntu0.1) ...\nSetting up libspice-client-gtk-3.0-5:amd64 (0.42-2ubuntu2) ...\nSetting up virt-viewer (11.0-3build2) ...\nProcessing triggers for libc-bin (2.39-0ubuntu8.4) ...\nProcessing triggers for man-db (2.12.0-4build2) ...\nProcessing triggers for libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.4) ...\nProcessing triggers for shared-mime-info (2.4-4) ...\nProcessing triggers for hicolor-icon-theme (0.17-2) ...\n📦[waylon@ubuntu ~]$ virt-install --version\nvirsh list --all\n4.1.0\nerror: failed to connect to the hypervisor\nerror: binary '/usr/sbin/libvirtd' does not exist in $PATH: No such file or directory\n\n📦[waylon@ubuntu ~]$ exit\nlogout\nwaylon@razorcrest:~$ distrobox enter --additional-flags \"--device /dev/kvm\" ubuntu\nError: unknown flag: --device\nSee 'podman exec --help'\nwaylon@razorcrest:~$ distrobox enter ubuntu\n📦[waylon@ubuntu ~]$ ls -l /run/libvirt/\ncommon/               libvirt-sock          nodedev/              secrets/              virtlogd-admin-sock\nhostdevmgr/           libvirt-sock-ro       nwfilter/             storage/              virtlogd-sock\ninterface/            lxc/                  nwfilter-binding/     virtlockd-admin-sock\nlibvirt-admin-sock    network/              qemu/                 virtlockd-sock\n📦[waylon@ubuntu ~]$ ls -l /run/libvirt/libvirt-sock\nsrw-rw-rw-. 1 nobody nogroup 0 Jun 27 11:09 /run/libvirt/libvirt-sock\n📦[waylon@ubuntu ~]$ sudo usermod -aG libvirt $USER\nusermod: group 'libvirt' does not exist\n📦[waylon@ubuntu ~]$ export LIBVIRT_DEFAULT_URI=\"qemu+unix:///system\"\nvirsh list --all\n Id   Name   State\n--------------------\n\n📦[waylon@ubuntu ~]$ ls -l /run/libvirt/libvirt-sock\nsrw-rw-rw-. 1 nobody nogroup 0 Jun 27 11:09 /run/libvirt/libvirt-sock\n📦[waylon@ubuntu ~]$ virt-install --version\nvirsh list --all\n4.1.0\n Id   Name   State\n--------------------\n\n📦[waylon@ubuntu ~]$ sudo apt update\nsudo apt install virt-manager -y\nHit:1 http://security.ubuntu.com/ubuntu noble-security InRelease\nHit:2 http://archive.ubuntu.com/ubuntu noble InRelease\nHit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease\nHit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\n4 packages can be upgraded. Run 'apt list --upgradable' to see them.\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following additional packages will be installed:\n  acl alsa-topology-conf alsa-ucm-conf cpu-checker dmeventd dmidecode dns-root-data dnsmasq-base gettext-base\n  gir1.2-atk-1.0 gir1.2-ayatanaappindicator3-0.1 gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0\n  gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-harfbuzz-0.0 gir1.2-libvirt-glib-1.0 gir1.2-pango-1.0\n  gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 gstreamer1.0-plugins-good gstreamer1.0-x\n  iptables ipxe-qemu ipxe-qemu-256k-compat-efi-roms libaa1 libasound2-data libasound2t64 libavc1394-0\n  libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libbrlapi0.8 libcaca0\n  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdecor-0-0 libdecor-0-plugin-1-gtk libdevmapper-event1.02.1 libdv4t64\n  libfdt1 libgstreamer-plugins-good1.0-0 libgtksourceview-4-0 libgtksourceview-4-common libgudev-1.0-0\n  libharfbuzz-gobject0 libiec61883-0 libip4tc2 libip6tc2 libjack-jackd2-0 liblvm2cmd2.03 libnetfilter-conntrack3\n  libnfnetlink0 libnftables1 libnftnl11 libnss-mymachines libpangoxft-1.0-0 libparted2t64 libpipewire-0.3-0t64\n  libpipewire-0.3-common libpolkit-agent-1-0 libraw1394-11 libsamplerate0 libsdl2-2.0-0 libshout3 libslang2\n  libslirp0 libspa-0.2-modules libspeex1 libspice-server1 libtag1v5 libtag1v5-vanilla libtpms0 libtwolame0\n  libv4l-0t64 libv4lconvert0t64 libvirglrenderer1 libvirt-daemon libvirt-daemon-config-network\n  libvirt-daemon-config-nwfilter libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd\n  libvpx9 libwavpack1 libwebrtc-audio-processing1 libxft2 libxml2-utils libxss1 libxv1 logrotate lvm2 mdevctl\n  msr-tools netcat-openbsd nftables ovmf parted polkitd python3-cairo python3-gi-cairo qemu-system-common\n  qemu-system-data qemu-system-gui qemu-system-modules-opengl qemu-system-modules-spice qemu-system-x86 seabios\n  sgml-base swtpm swtpm-tools systemd-container systemd-hwe-hwdb thin-provisioning-tools udev xml-core\nSuggested packages:\n  firewalld kmod alsa-utils libasound2-plugins libdv-bin oss-compat jackd2 libparted-dev libparted-i18n pipewire\n  libraw1394-doc xdg-utils speex gstreamer1.0-libav gstreamer1.0-plugins-ugly\n  libvirt-daemon-driver-storage-gluster libvirt-daemon-driver-storage-iscsi-direct\n  libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-zfs libvirt-daemon-driver-lxc\n  libvirt-daemon-driver-vbox libvirt-daemon-driver-xen numad passt apparmor auditd nfs-common open-iscsi pm-utils\n  systemtap zfsutils bsd-mailx | mailx parted-doc polkitd-pkla samba vde2 sgml-base-doc trousers gir1.2-secret-1\n  gnome-keyring python3-guestfs ssh-askpass debhelper\nThe following NEW packages will be installed:\n  acl alsa-topology-conf alsa-ucm-conf cpu-checker dmeventd dmidecode dns-root-data dnsmasq-base gettext-base\n  gir1.2-atk-1.0 gir1.2-ayatanaappindicator3-0.1 gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0\n  gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-harfbuzz-0.0 gir1.2-libvirt-glib-1.0 gir1.2-pango-1.0\n  gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 gstreamer1.0-plugins-good gstreamer1.0-x\n  iptables ipxe-qemu ipxe-qemu-256k-compat-efi-roms libaa1 libasound2-data libasound2t64 libavc1394-0\n  libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libbrlapi0.8 libcaca0\n  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdecor-0-0 libdecor-0-plugin-1-gtk libdevmapper-event1.02.1 libdv4t64\n  libfdt1 libgstreamer-plugins-good1.0-0 libgtksourceview-4-0 libgtksourceview-4-common libgudev-1.0-0\n  libharfbuzz-gobject0 libiec61883-0 libip4tc2 libip6tc2 libjack-jackd2-0 liblvm2cmd2.03 libnetfilter-conntrack3\n  libnfnetlink0 libnftables1 libnftnl11 libnss-mymachines libpangoxft-1.0-0 libparted2t64 libpipewire-0.3-0t64\n  libpipewire-0.3-common libpolkit-agent-1-0 libraw1394-11 libsamplerate0 libsdl2-2.0-0 libshout3 libslang2\n  libslirp0 libspa-0.2-modules libspeex1 libspice-server1 libtag1v5 libtag1v5-vanilla libtpms0 libtwolame0\n  libv4l-0t64 libv4lconvert0t64 libvirglrenderer1 libvirt-daemon libvirt-daemon-config-network\n  libvirt-daemon-config-nwfilter libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd\n  libvpx9 libwavpack1 libwebrtc-audio-processing1 libxft2 libxml2-utils libxss1 libxv1 logrotate lvm2 mdevctl\n  msr-tools netcat-openbsd nftables ovmf parted polkitd python3-cairo python3-gi-cairo qemu-system-common\n  qemu-system-data qemu-system-gui qemu-system-modules-opengl qemu-system-modules-spice qemu-system-x86 seabios\n  sgml-base swtpm swtpm-tools systemd-container systemd-hwe-hwdb thin-provisioning-tools udev virt-manager\n  xml-core\n0 upgraded, 119 newly installed, 0 to remove and 4 not upgraded.\nNeed to get 43.2 MB of archives.\nAfter this operation, 180 MB of additional disk space will be used.\nGet:1 http://archive.ubuntu.com/ubuntu noble/main amd64 sgml-base all 1.31 [11.4 kB]\nGet:2 http://archive.ubuntu.com/ubuntu noble/main amd64 libslang2 amd64 2.3.3-3build2 [506 kB]\nGet:3 http://archive.ubuntu.com/ubuntu noble/main amd64 logrotate amd64 3.21.0-2build1 [52.2 kB]\nGet:4 http://archive.ubuntu.com/ubuntu noble/main amd64 netcat-openbsd amd64 1.226-1ubuntu2 [44.3 kB]\nGet:5 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 udev amd64 255.4-1ubuntu8.8 [1,874 kB]\nGet:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 systemd-hwe-hwdb all 255.1.4 [3,200 B]\nGet:7 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dmidecode amd64 3.5-3ubuntu0.1 [73.0 kB]\nGet:8 http://archive.ubuntu.com/ubuntu noble/main amd64 gettext-base amd64 0.21-14ubuntu2 [38.4 kB]\nGet:9 http://archive.ubuntu.com/ubuntu noble/main amd64 libip4tc2 amd64 1.8.10-3ubuntu2 [23.3 kB]\nGet:10 http://archive.ubuntu.com/ubuntu noble/main amd64 libip6tc2 amd64 1.8.10-3ubuntu2 [23.7 kB]\nGet:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libnfnetlink0 amd64 1.0.2-2build1 [14.8 kB]\nGet:12 http://archive.ubuntu.com/ubuntu noble/main amd64 libnetfilter-conntrack3 amd64 1.0.9-6build1 [45.2 kB]\nGet:13 http://archive.ubuntu.com/ubuntu noble/main amd64 libnftnl11 amd64 1.2.6-2build1 [66.0 kB]\nGet:14 http://archive.ubuntu.com/ubuntu noble/main amd64 iptables amd64 1.8.10-3ubuntu2 [381 kB]\nGet:15 http://archive.ubuntu.com/ubuntu noble/main amd64 libnftables1 amd64 1.0.9-1build1 [358 kB]\nGet:16 http://archive.ubuntu.com/ubuntu noble/main amd64 libparted2t64 amd64 3.6-4build1 [152 kB]\nGet:17 http://archive.ubuntu.com/ubuntu noble/main amd64 nftables amd64 1.0.9-1build1 [69.8 kB]\nGet:18 http://archive.ubuntu.com/ubuntu noble/main amd64 parted amd64 3.6-4build1 [43.3 kB]\nGet:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 acl amd64 2.3.2-1build1.1 [39.4 kB]\nGet:20 http://archive.ubuntu.com/ubuntu noble/main amd64 alsa-topology-conf all 1.2.5.1-2 [15.5 kB]\nGet:21 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libasound2-data all 1.2.11-1ubuntu0.1 [21.1 kB]\nGet:22 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libasound2t64 amd64 1.2.11-1ubuntu0.1 [399 kB]\nGet:23 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 alsa-ucm-conf all 1.2.10-1ubuntu5.7 [66.4 kB]\nGet:24 http://archive.ubuntu.com/ubuntu noble/main amd64 msr-tools amd64 1.3-5build1 [9,610 B]\nGet:25 http://archive.ubuntu.com/ubuntu noble/main amd64 cpu-checker amd64 0.7-1.3build2 [6,148 B]\nGet:26 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdevmapper-event1.02.1 amd64 2:1.02.185-3ubuntu3.2 [12.6 kB]\nGet:27 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liblvm2cmd2.03 amd64 2.03.16-3ubuntu3.2 [797 kB]\nGet:28 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dmeventd amd64 2:1.02.185-3ubuntu3.2 [38.0 kB]\nGet:29 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dns-root-data all 2024071801~ubuntu0.24.04.1 [5,918 B]\nGet:30 http://archive.ubuntu.com/ubuntu noble/main amd64 dnsmasq-base amd64 2.90-2build2 [375 kB]\nGet:31 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-atk-1.0 amd64 2.52.0-1build1 [23.1 kB]\nGet:32 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.10+dfsg-3ubuntu3.1 [9,486 B]\nGet:33 http://archive.ubuntu.com/ubuntu noble/main amd64 libharfbuzz-gobject0 amd64 8.3.0-2build2 [34.3 kB]\nGet:34 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-harfbuzz-0.0 amd64 8.3.0-2build2 [44.5 kB]\nGet:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libxft2 amd64 2.3.6-1build1 [45.3 kB]\nGet:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libpangoxft-1.0-0 amd64 1.52.1+ds-1build1 [20.3 kB]\nGet:37 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-pango-1.0 amd64 1.52.1+ds-1build1 [34.8 kB]\nGet:38 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gtk-3.0 amd64 3.24.41-4ubuntu1.3 [245 kB]\nGet:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-ido3-0.4-0 amd64 0.10.1-1build2 [56.6 kB]\nGet:40 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-indicator3-7 amd64 0.9.4-1build1 [31.7 kB]\nGet:41 http://archive.ubuntu.com/ubuntu noble/main amd64 libdbusmenu-glib4 amd64 18.10.20180917~bzr492+repack1-3.1ubuntu5 [43.0 kB]\nGet:42 http://archive.ubuntu.com/ubuntu noble/main amd64 libdbusmenu-gtk3-4 amd64 18.10.20180917~bzr492+repack1-3.1ubuntu5 [27.6 kB]\nGet:43 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-appindicator3-1 amd64 0.5.93-1build3 [24.7 kB]\nGet:44 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-ayatanaappindicator3-0.1 amd64 0.5.93-1build3 [5,838 B]\nGet:45 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gstreamer-1.0 amd64 1.24.2-1ubuntu0.1 [88.4 kB]\nGet:46 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-gtk-vnc-2.0 amd64 1.3.1-1build2 [12.1 kB]\nGet:47 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtksourceview-4-common all 4.8.4-5build4 [590 kB]\nGet:48 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtksourceview-4-0 amd64 4.8.4-5build4 [233 kB]\nGet:49 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-gtksource-4 amd64 4.8.4-5build4 [20.3 kB]\nGet:50 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-spiceclientglib-2.0 amd64 0.42-2ubuntu2 [14.4 kB]\nGet:51 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-spiceclientgtk-3.0 amd64 0.42-2ubuntu2 [5,610 B]\nGet:52 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-vte-2.91 amd64 0.76.0-1ubuntu0.1 [11.5 kB]\nGet:53 http://archive.ubuntu.com/ubuntu noble/main amd64 libaa1 amd64 1.4p5-51.1 [49.9 kB]\nGet:54 http://archive.ubuntu.com/ubuntu noble/main amd64 libraw1394-11 amd64 2.1.2-2build3 [26.2 kB]\nGet:55 http://archive.ubuntu.com/ubuntu noble/main amd64 libavc1394-0 amd64 0.5.4-5build3 [15.4 kB]\nGet:56 http://archive.ubuntu.com/ubuntu noble/main amd64 libcaca0 amd64 0.99.beta20-4build2 [208 kB]\nGet:57 http://archive.ubuntu.com/ubuntu noble/main amd64 libdv4t64 amd64 1.0.0-17.1build1 [63.2 kB]\nGet:58 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-good1.0-0 amd64 1.24.2-1ubuntu1.1 [32.9 kB]\nGet:59 http://archive.ubuntu.com/ubuntu noble/main amd64 libgudev-1.0-0 amd64 1:238-5ubuntu1 [15.9 kB]\nGet:60 http://archive.ubuntu.com/ubuntu noble/main amd64 libiec61883-0 amd64 1.2.0-6build1 [24.5 kB]\nGet:61 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libspeex1 amd64 1.2.1-2ubuntu2.24.04.1 [59.6 kB]\nGet:62 http://archive.ubuntu.com/ubuntu noble/main amd64 libshout3 amd64 2.4.6-1build2 [50.3 kB]\nGet:63 http://archive.ubuntu.com/ubuntu noble/main amd64 libtag1v5-vanilla amd64 1.13.1-1build1 [326 kB]\nGet:64 http://archive.ubuntu.com/ubuntu noble/main amd64 libtag1v5 amd64 1.13.1-1build1 [11.7 kB]\nGet:65 http://archive.ubuntu.com/ubuntu noble/main amd64 libtwolame0 amd64 0.4.0-2build3 [52.3 kB]\nGet:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libv4lconvert0t64 amd64 1.26.1-4build3 [87.6 kB]\nGet:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libv4l-0t64 amd64 1.26.1-4build3 [46.9 kB]\nGet:68 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvpx9 amd64 1.14.0-1ubuntu2.2 [1,143 kB]\nGet:69 http://archive.ubuntu.com/ubuntu noble/main amd64 libwavpack1 amd64 5.6.0-1build1 [84.6 kB]\nGet:70 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-good amd64 1.24.2-1ubuntu1.1 [2,238 kB]\nGet:71 http://archive.ubuntu.com/ubuntu noble/main amd64 libxv1 amd64 2:1.0.11-1.1build1 [10.7 kB]\nGet:72 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-x amd64 1.24.2-1ubuntu0.2 [85.0 kB]\nGet:73 http://archive.ubuntu.com/ubuntu noble/main amd64 ipxe-qemu all 1.21.1+git-20220113.fbbdc3926-0ubuntu2 [1,565 kB]\nGet:74 http://archive.ubuntu.com/ubuntu noble/main amd64 ipxe-qemu-256k-compat-efi-roms all 1.0.0+git-20150424.a25a16d-0ubuntu5 [548 kB]\nGet:75 http://archive.ubuntu.com/ubuntu noble/main amd64 libbrlapi0.8 amd64 6.6-4ubuntu5 [31.4 kB]\nGet:76 http://archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-0 amd64 0.2.2-1build2 [16.5 kB]\nGet:77 http://archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-plugin-1-gtk amd64 0.2.2-1build2 [22.2 kB]\nGet:78 http://archive.ubuntu.com/ubuntu noble/main amd64 libsamplerate0 amd64 0.2.2-4build1 [1,344 kB]\nGet:79 http://archive.ubuntu.com/ubuntu noble/main amd64 libjack-jackd2-0 amd64 1.9.21~dfsg-3ubuntu3 [289 kB]\nGet:80 http://archive.ubuntu.com/ubuntu noble/main amd64 libwebrtc-audio-processing1 amd64 0.3.1-0ubuntu6 [290 kB]\nGet:81 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libspa-0.2-modules amd64 1.0.5-1ubuntu3 [626 kB]\nGet:82 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpipewire-0.3-0t64 amd64 1.0.5-1ubuntu3 [252 kB]\nGet:83 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpipewire-0.3-common all 1.0.5-1ubuntu3 [18.8 kB]\nGet:84 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpolkit-agent-1-0 amd64 124-2ubuntu1.24.04.2 [17.4 kB]\nGet:85 http://archive.ubuntu.com/ubuntu noble/main amd64 libxss1 amd64 1:1.2.3-1build3 [7,204 B]\nGet:86 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsdl2-2.0-0 amd64 2.30.0+dfsg-1ubuntu3.1 [686 kB]\nGet:87 http://archive.ubuntu.com/ubuntu noble/main amd64 libslirp0 amd64 4.7.0-1ubuntu3 [63.8 kB]\nGet:88 http://archive.ubuntu.com/ubuntu noble/main amd64 libspice-server1 amd64 0.15.1-1build2 [349 kB]\nGet:89 http://archive.ubuntu.com/ubuntu noble/main amd64 libtpms0 amd64 0.9.3-0ubuntu4 [373 kB]\nGet:90 http://archive.ubuntu.com/ubuntu noble/main amd64 libvirglrenderer1 amd64 1.0.0-1ubuntu2 [226 kB]\nGet:91 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-driver-qemu amd64 10.0.0-2ubuntu8.7 [740 kB]\nGet:92 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon amd64 10.0.0-2ubuntu8.7 [431 kB]\nGet:93 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-config-network all 10.0.0-2ubuntu8.7 [3,120 B]\nGet:94 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-config-nwfilter all 10.0.0-2ubuntu8.7 [6,042 B]\nGet:95 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 systemd-container amd64 255.4-1ubuntu8.8 [417 kB]\nGet:96 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-system-systemd all 10.0.0-2ubuntu8.7 [1,376 B]\nGet:97 http://archive.ubuntu.com/ubuntu noble/main amd64 xml-core all 0.19 [20.3 kB]\nGet:98 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 polkitd amd64 124-2ubuntu1.24.04.2 [95.2 kB]\nGet:99 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-system amd64 10.0.0-2ubuntu8.7 [49.6 kB]\nGet:100 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxml2-utils amd64 2.9.14+dfsg-1.3ubuntu3.3 [39.4 kB]\nGet:101 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 lvm2 amd64 2.03.16-3ubuntu3.2 [1,186 kB]\nGet:102 http://archive.ubuntu.com/ubuntu noble/main amd64 mdevctl amd64 1.3.0-1ubuntu2 [936 kB]\nGet:103 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-cairo amd64 1.25.1-2build2 [119 kB]\nGet:104 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-gi-cairo amd64 3.48.2-1 [8,132 B]\nGet:105 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-common amd64 1:8.2.2+ds-0ubuntu1.7 [1,253 kB]\nGet:106 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-data all 1:8.2.2+ds-0ubuntu1.7 [1,793 kB]\nGet:107 http://archive.ubuntu.com/ubuntu noble/main amd64 libfdt1 amd64 1.7.0-2build1 [20.1 kB]\nGet:108 http://archive.ubuntu.com/ubuntu noble/main amd64 seabios all 1.16.3-2 [175 kB]\nGet:109 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-x86 amd64 1:8.2.2+ds-0ubuntu1.7 [11.2 MB]\nGet:110 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-modules-opengl amd64 1:8.2.2+ds-0ubuntu1.7 [184 kB]\nGet:111 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-gui amd64 1:8.2.2+ds-0ubuntu1.7 [314 kB]\nGet:112 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-modules-spice amd64 1:8.2.2+ds-0ubuntu1.7 [70.2 kB]\nGet:113 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 swtpm amd64 0.7.3-0ubuntu5.24.04.1 [53.1 kB]\nGet:114 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 swtpm-tools amd64 0.7.3-0ubuntu5.24.04.1 [92.9 kB]\nGet:115 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 thin-provisioning-tools amd64 0.9.0-2ubuntu5.1 [436 kB]\nGet:116 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-libvirt-glib-1.0 amd64 5.0.0-2build3 [32.6 kB]\nGet:117 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 virt-manager all 1:4.1.0-3ubuntu0.1 [263 kB]\nGet:118 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libnss-mymachines amd64 255.4-1ubuntu8.8 [153 kB]\nGet:119 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 ovmf all 2024.02-2ubuntu0.4 [4,571 kB]\nFetched 43.2 MB in 5s (9,539 kB/s)\nExtracting templates from packages: 100%\nPreconfiguring packages ...\nSelecting previously unselected package sgml-base.\n(Reading database ... 30439 files and directories currently installed.)\nPreparing to unpack .../000-sgml-base_1.31_all.deb ...\nUnpacking sgml-base (1.31) ...\nSelecting previously unselected package libslang2:amd64.\nPreparing to unpack .../001-libslang2_2.3.3-3build2_amd64.deb ...\nUnpacking libslang2:amd64 (2.3.3-3build2) ...\nSelecting previously unselected package logrotate.\nPreparing to unpack .../002-logrotate_3.21.0-2build1_amd64.deb ...\nUnpacking logrotate (3.21.0-2build1) ...\nSelecting previously unselected package netcat-openbsd.\nPreparing to unpack .../003-netcat-openbsd_1.226-1ubuntu2_amd64.deb ...\nUnpacking netcat-openbsd (1.226-1ubuntu2) ...\nSelecting previously unselected package udev.\nPreparing to unpack .../004-udev_255.4-1ubuntu8.8_amd64.deb ...\nUnpacking udev (255.4-1ubuntu8.8) ...\nSelecting previously unselected package systemd-hwe-hwdb.\nPreparing to unpack .../005-systemd-hwe-hwdb_255.1.4_all.deb ...\nUnpacking systemd-hwe-hwdb (255.1.4) ...\nSelecting previously unselected package dmidecode.\nPreparing to unpack .../006-dmidecode_3.5-3ubuntu0.1_amd64.deb ...\nUnpacking dmidecode (3.5-3ubuntu0.1) ...\nSelecting previously unselected package gettext-base.\nPreparing to unpack .../007-gettext-base_0.21-14ubuntu2_amd64.deb ...\nUnpacking gettext-base (0.21-14ubuntu2) ...\nSelecting previously unselected package libip4tc2:amd64.\nPreparing to unpack .../008-libip4tc2_1.8.10-3ubuntu2_amd64.deb ...\nUnpacking libip4tc2:amd64 (1.8.10-3ubuntu2) ...\nSelecting previously unselected package libip6tc2:amd64.\nPreparing to unpack .../009-libip6tc2_1.8.10-3ubuntu2_amd64.deb ...\nUnpacking libip6tc2:amd64 (1.8.10-3ubuntu2) ...\nSelecting previously unselected package libnfnetlink0:amd64.\nPreparing to unpack .../010-libnfnetlink0_1.0.2-2build1_amd64.deb ...\nUnpacking libnfnetlink0:amd64 (1.0.2-2build1) ...\nSelecting previously unselected package libnetfilter-conntrack3:amd64.\nPreparing to unpack .../011-libnetfilter-conntrack3_1.0.9-6build1_amd64.deb ...\nUnpacking libnetfilter-conntrack3:amd64 (1.0.9-6build1) ...\nSelecting previously unselected package libnftnl11:amd64.\nPreparing to unpack .../012-libnftnl11_1.2.6-2build1_amd64.deb ...\nUnpacking libnftnl11:amd64 (1.2.6-2build1) ...\nSelecting previously unselected package iptables.\nPreparing to unpack .../013-iptables_1.8.10-3ubuntu2_amd64.deb ...\nUnpacking iptables (1.8.10-3ubuntu2) ...\nSelecting previously unselected package libnftables1:amd64.\nPreparing to unpack .../014-libnftables1_1.0.9-1build1_amd64.deb ...\nUnpacking libnftables1:amd64 (1.0.9-1build1) ...\nSelecting previously unselected package libparted2t64:amd64.\nPreparing to unpack .../015-libparted2t64_3.6-4build1_amd64.deb ...\nAdding 'diversion of /lib/x86_64-linux-gnu/libparted.so.2 to /lib/x86_64-linux-gnu/libparted.so.2.usr-is-merged by\nlibparted2t64'\nAdding 'diversion of /lib/x86_64-linux-gnu/libparted.so.2.0.5 to /lib/x86_64-linux-gnu/libparted.so.2.0.5.usr-is-me\nrged by libparted2t64'\nUnpacking libparted2t64:amd64 (3.6-4build1) ...\nSelecting previously unselected package nftables.\nPreparing to unpack .../016-nftables_1.0.9-1build1_amd64.deb ...\nUnpacking nftables (1.0.9-1build1) ...\nSelecting previously unselected package parted.\nPreparing to unpack .../017-parted_3.6-4build1_amd64.deb ...\nUnpacking parted (3.6-4build1) ...\nSelecting previously unselected package acl.\nPreparing to unpack .../018-acl_2.3.2-1build1.1_amd64.deb ...\nUnpacking acl (2.3.2-1build1.1) ...\nSelecting previously unselected package alsa-topology-conf.\nPreparing to unpack .../019-alsa-topology-conf_1.2.5.1-2_all.deb ...\nUnpacking alsa-topology-conf (1.2.5.1-2) ...\nSelecting previously unselected package libasound2-data.\nPreparing to unpack .../020-libasound2-data_1.2.11-1ubuntu0.1_all.deb ...\nUnpacking libasound2-data (1.2.11-1ubuntu0.1) ...\nSelecting previously unselected package libasound2t64:amd64.\nPreparing to unpack .../021-libasound2t64_1.2.11-1ubuntu0.1_amd64.deb ...\nUnpacking libasound2t64:amd64 (1.2.11-1ubuntu0.1) ...\nSelecting previously unselected package alsa-ucm-conf.\nPreparing to unpack .../022-alsa-ucm-conf_1.2.10-1ubuntu5.7_all.deb ...\nUnpacking alsa-ucm-conf (1.2.10-1ubuntu5.7) ...\nSelecting previously unselected package msr-tools.\nPreparing to unpack .../023-msr-tools_1.3-5build1_amd64.deb ...\nUnpacking msr-tools (1.3-5build1) ...\nSelecting previously unselected package cpu-checker.\nPreparing to unpack .../024-cpu-checker_0.7-1.3build2_amd64.deb ...\nUnpacking cpu-checker (0.7-1.3build2) ...\nSelecting previously unselected package libdevmapper-event1.02.1:amd64.\nPreparing to unpack .../025-libdevmapper-event1.02.1_2%3a1.02.185-3ubuntu3.2_amd64.deb ...\nUnpacking libdevmapper-event1.02.1:amd64 (2:1.02.185-3ubuntu3.2) ...\nSelecting previously unselected package liblvm2cmd2.03:amd64.\nPreparing to unpack .../026-liblvm2cmd2.03_2.03.16-3ubuntu3.2_amd64.deb ...\nUnpacking liblvm2cmd2.03:amd64 (2.03.16-3ubuntu3.2) ...\nSelecting previously unselected package dmeventd.\nPreparing to unpack .../027-dmeventd_2%3a1.02.185-3ubuntu3.2_amd64.deb ...\nUnpacking dmeventd (2:1.02.185-3ubuntu3.2) ...\nSelecting previously unselected package dns-root-data.\nPreparing to unpack .../028-dns-root-data_2024071801~ubuntu0.24.04.1_all.deb ...\nUnpacking dns-root-data (2024071801~ubuntu0.24.04.1) ...\nSelecting previously unselected package dnsmasq-base.\nPreparing to unpack .../029-dnsmasq-base_2.90-2build2_amd64.deb ...\nUnpacking dnsmasq-base (2.90-2build2) ...\nSelecting previously unselected package gir1.2-atk-1.0:amd64.\nPreparing to unpack .../030-gir1.2-atk-1.0_2.52.0-1build1_amd64.deb ...\nUnpacking gir1.2-atk-1.0:amd64 (2.52.0-1build1) ...\nSelecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64.\nPreparing to unpack .../031-gir1.2-gdkpixbuf-2.0_2.42.10+dfsg-3ubuntu3.1_amd64.deb ...\nUnpacking gir1.2-gdkpixbuf-2.0:amd64 (2.42.10+dfsg-3ubuntu3.1) ...\nSelecting previously unselected package libharfbuzz-gobject0:amd64.\nPreparing to unpack .../032-libharfbuzz-gobject0_8.3.0-2build2_amd64.deb ...\nUnpacking libharfbuzz-gobject0:amd64 (8.3.0-2build2) ...\nSelecting previously unselected package gir1.2-harfbuzz-0.0:amd64.\nPreparing to unpack .../033-gir1.2-harfbuzz-0.0_8.3.0-2build2_amd64.deb ...\nUnpacking gir1.2-harfbuzz-0.0:amd64 (8.3.0-2build2) ...\nSelecting previously unselected package libxft2:amd64.\nPreparing to unpack .../034-libxft2_2.3.6-1build1_amd64.deb ...\nUnpacking libxft2:amd64 (2.3.6-1build1) ...\nSelecting previously unselected package libpangoxft-1.0-0:amd64.\nPreparing to unpack .../035-libpangoxft-1.0-0_1.52.1+ds-1build1_amd64.deb ...\nUnpacking libpangoxft-1.0-0:amd64 (1.52.1+ds-1build1) ...\nSelecting previously unselected package gir1.2-pango-1.0:amd64.\nPreparing to unpack .../036-gir1.2-pango-1.0_1.52.1+ds-1build1_amd64.deb ...\nUnpacking gir1.2-pango-1.0:amd64 (1.52.1+ds-1build1) ...\nSelecting previously unselected package gir1.2-gtk-3.0:amd64.\nPreparing to unpack .../037-gir1.2-gtk-3.0_3.24.41-4ubuntu1.3_amd64.deb ...\nUnpacking gir1.2-gtk-3.0:amd64 (3.24.41-4ubuntu1.3) ...\nSelecting previously unselected package libayatana-ido3-0.4-0:amd64.\nPreparing to unpack .../038-libayatana-ido3-0.4-0_0.10.1-1build2_amd64.deb ...\nUnpacking libayatana-ido3-0.4-0:amd64 (0.10.1-1build2) ...\nSelecting previously unselected package libayatana-indicator3-7:amd64.\nPreparing to unpack .../039-libayatana-indicator3-7_0.9.4-1build1_amd64.deb ...\nUnpacking libayatana-indicator3-7:amd64 (0.9.4-1build1) ...\nSelecting previously unselected package libdbusmenu-glib4:amd64.\nPreparing to unpack .../040-libdbusmenu-glib4_18.10.20180917~bzr492+repack1-3.1ubuntu5_amd64.deb ...\nUnpacking libdbusmenu-glib4:amd64 (18.10.20180917~bzr492+repack1-3.1ubuntu5) ...\nSelecting previously unselected package libdbusmenu-gtk3-4:amd64.\nPreparing to unpack .../041-libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-3.1ubuntu5_amd64.deb ...\nUnpacking libdbusmenu-gtk3-4:amd64 (18.10.20180917~bzr492+repack1-3.1ubuntu5) ...\nSelecting previously unselected package libayatana-appindicator3-1.\nPreparing to unpack .../042-libayatana-appindicator3-1_0.5.93-1build3_amd64.deb ...\nUnpacking libayatana-appindicator3-1 (0.5.93-1build3) ...\nSelecting previously unselected package gir1.2-ayatanaappindicator3-0.1.\nPreparing to unpack .../043-gir1.2-ayatanaappindicator3-0.1_0.5.93-1build3_amd64.deb ...\nUnpacking gir1.2-ayatanaappindicator3-0.1 (0.5.93-1build3) ...\nSelecting previously unselected package gir1.2-gstreamer-1.0:amd64.\nPreparing to unpack .../044-gir1.2-gstreamer-1.0_1.24.2-1ubuntu0.1_amd64.deb ...\nUnpacking gir1.2-gstreamer-1.0:amd64 (1.24.2-1ubuntu0.1) ...\nSelecting previously unselected package gir1.2-gtk-vnc-2.0:amd64.\nPreparing to unpack .../045-gir1.2-gtk-vnc-2.0_1.3.1-1build2_amd64.deb ...\nUnpacking gir1.2-gtk-vnc-2.0:amd64 (1.3.1-1build2) ...\nSelecting previously unselected package libgtksourceview-4-common.\nPreparing to unpack .../046-libgtksourceview-4-common_4.8.4-5build4_all.deb ...\nUnpacking libgtksourceview-4-common (4.8.4-5build4) ...\nSelecting previously unselected package libgtksourceview-4-0:amd64.\nPreparing to unpack .../047-libgtksourceview-4-0_4.8.4-5build4_amd64.deb ...\nUnpacking libgtksourceview-4-0:amd64 (4.8.4-5build4) ...\nSelecting previously unselected package gir1.2-gtksource-4:amd64.\nPreparing to unpack .../048-gir1.2-gtksource-4_4.8.4-5build4_amd64.deb ...\nUnpacking gir1.2-gtksource-4:amd64 (4.8.4-5build4) ...\nSelecting previously unselected package gir1.2-spiceclientglib-2.0:amd64.\nPreparing to unpack .../049-gir1.2-spiceclientglib-2.0_0.42-2ubuntu2_amd64.deb ...\nUnpacking gir1.2-spiceclientglib-2.0:amd64 (0.42-2ubuntu2) ...\nSelecting previously unselected package gir1.2-spiceclientgtk-3.0:amd64.\nPreparing to unpack .../050-gir1.2-spiceclientgtk-3.0_0.42-2ubuntu2_amd64.deb ...\nUnpacking gir1.2-spiceclientgtk-3.0:amd64 (0.42-2ubuntu2) ...\nSelecting previously unselected package gir1.2-vte-2.91:amd64.\nPreparing to unpack .../051-gir1.2-vte-2.91_0.76.0-1ubuntu0.1_amd64.deb ...\nUnpacking gir1.2-vte-2.91:amd64 (0.76.0-1ubuntu0.1) ...\nSelecting previously unselected package libaa1:amd64.\nPreparing to unpack .../052-libaa1_1.4p5-51.1_amd64.deb ...\nUnpacking libaa1:amd64 (1.4p5-51.1) ...\nSelecting previously unselected package libraw1394-11:amd64.\nPreparing to unpack .../053-libraw1394-11_2.1.2-2build3_amd64.deb ...\nUnpacking libraw1394-11:amd64 (2.1.2-2build3) ...\nSelecting previously unselected package libavc1394-0:amd64.\nPreparing to unpack .../054-libavc1394-0_0.5.4-5build3_amd64.deb ...\nUnpacking libavc1394-0:amd64 (0.5.4-5build3) ...\nSelecting previously unselected package libcaca0:amd64.\nPreparing to unpack .../055-libcaca0_0.99.beta20-4build2_amd64.deb ...\nUnpacking libcaca0:amd64 (0.99.beta20-4build2) ...\nSelecting previously unselected package libdv4t64:amd64.\nPreparing to unpack .../056-libdv4t64_1.0.0-17.1build1_amd64.deb ...\nUnpacking libdv4t64:amd64 (1.0.0-17.1build1) ...\nSelecting previously unselected package libgstreamer-plugins-good1.0-0:amd64.\nPreparing to unpack .../057-libgstreamer-plugins-good1.0-0_1.24.2-1ubuntu1.1_amd64.deb ...\nUnpacking libgstreamer-plugins-good1.0-0:amd64 (1.24.2-1ubuntu1.1) ...\nSelecting previously unselected package libgudev-1.0-0:amd64.\nPreparing to unpack .../058-libgudev-1.0-0_1%3a238-5ubuntu1_amd64.deb ...\nUnpacking libgudev-1.0-0:amd64 (1:238-5ubuntu1) ...\nSelecting previously unselected package libiec61883-0:amd64.\nPreparing to unpack .../059-libiec61883-0_1.2.0-6build1_amd64.deb ...\nUnpacking libiec61883-0:amd64 (1.2.0-6build1) ...\nSelecting previously unselected package libspeex1:amd64.\nPreparing to unpack .../060-libspeex1_1.2.1-2ubuntu2.24.04.1_amd64.deb ...\nUnpacking libspeex1:amd64 (1.2.1-2ubuntu2.24.04.1) ...\nSelecting previously unselected package libshout3:amd64.\nPreparing to unpack .../061-libshout3_2.4.6-1build2_amd64.deb ...\nUnpacking libshout3:amd64 (2.4.6-1build2) ...\nSelecting previously unselected package libtag1v5-vanilla:amd64.\nPreparing to unpack .../062-libtag1v5-vanilla_1.13.1-1build1_amd64.deb ...\nUnpacking libtag1v5-vanilla:amd64 (1.13.1-1build1) ...\nSelecting previously unselected package libtag1v5:amd64.\nPreparing to unpack .../063-libtag1v5_1.13.1-1build1_amd64.deb ...\nUnpacking libtag1v5:amd64 (1.13.1-1build1) ...\nSelecting previously unselected package libtwolame0:amd64.\nPreparing to unpack .../064-libtwolame0_0.4.0-2build3_amd64.deb ...\nUnpacking libtwolame0:amd64 (0.4.0-2build3) ...\nSelecting previously unselected package libv4lconvert0t64:amd64.\nPreparing to unpack .../065-libv4lconvert0t64_1.26.1-4build3_amd64.deb ...\nUnpacking libv4lconvert0t64:amd64 (1.26.1-4build3) ...\nSelecting previously unselected package libv4l-0t64:amd64.\nPreparing to unpack .../066-libv4l-0t64_1.26.1-4build3_amd64.deb ...\nUnpacking libv4l-0t64:amd64 (1.26.1-4build3) ...\nSelecting previously unselected package libvpx9:amd64.\nPreparing to unpack .../067-libvpx9_1.14.0-1ubuntu2.2_amd64.deb ...\nUnpacking libvpx9:amd64 (1.14.0-1ubuntu2.2) ...\nSelecting previously unselected package libwavpack1:amd64.\nPreparing to unpack .../068-libwavpack1_5.6.0-1build1_amd64.deb ...\nUnpacking libwavpack1:amd64 (5.6.0-1build1) ...\nSelecting previously unselected package gstreamer1.0-plugins-good:amd64.\nPreparing to unpack .../069-gstreamer1.0-plugins-good_1.24.2-1ubuntu1.1_amd64.deb ...\nUnpacking gstreamer1.0-plugins-good:amd64 (1.24.2-1ubuntu1.1) ...\nSelecting previously unselected package libxv1:amd64.\nPreparing to unpack .../070-libxv1_2%3a1.0.11-1.1build1_amd64.deb ...\nUnpacking libxv1:amd64 (2:1.0.11-1.1build1) ...\nSelecting previously unselected package gstreamer1.0-x:amd64.\nPreparing to unpack .../071-gstreamer1.0-x_1.24.2-1ubuntu0.2_amd64.deb ...\nUnpacking gstreamer1.0-x:amd64 (1.24.2-1ubuntu0.2) ...\nSelecting previously unselected package ipxe-qemu.\nPreparing to unpack .../072-ipxe-qemu_1.21.1+git-20220113.fbbdc3926-0ubuntu2_all.deb ...\nUnpacking ipxe-qemu (1.21.1+git-20220113.fbbdc3926-0ubuntu2) ...\nSelecting previously unselected package ipxe-qemu-256k-compat-efi-roms.\nPreparing to unpack .../073-ipxe-qemu-256k-compat-efi-roms_1.0.0+git-20150424.a25a16d-0ubuntu5_all.deb ...\nUnpacking ipxe-qemu-256k-compat-efi-roms (1.0.0+git-20150424.a25a16d-0ubuntu5) ...\nSelecting previously unselected package libbrlapi0.8:amd64.\nPreparing to unpack .../074-libbrlapi0.8_6.6-4ubuntu5_amd64.deb ...\nUnpacking libbrlapi0.8:amd64 (6.6-4ubuntu5) ...\nSelecting previously unselected package libdecor-0-0:amd64.\nPreparing to unpack .../075-libdecor-0-0_0.2.2-1build2_amd64.deb ...\nUnpacking libdecor-0-0:amd64 (0.2.2-1build2) ...\nSelecting previously unselected package libdecor-0-plugin-1-gtk:amd64.\nPreparing to unpack .../076-libdecor-0-plugin-1-gtk_0.2.2-1build2_amd64.deb ...\nUnpacking libdecor-0-plugin-1-gtk:amd64 (0.2.2-1build2) ...\nSelecting previously unselected package libsamplerate0:amd64.\nPreparing to unpack .../077-libsamplerate0_0.2.2-4build1_amd64.deb ...\nUnpacking libsamplerate0:amd64 (0.2.2-4build1) ...\nSelecting previously unselected package libjack-jackd2-0:amd64.\nPreparing to unpack .../078-libjack-jackd2-0_1.9.21~dfsg-3ubuntu3_amd64.deb ...\nUnpacking libjack-jackd2-0:amd64 (1.9.21~dfsg-3ubuntu3) ...\nSelecting previously unselected package libwebrtc-audio-processing1:amd64.\nPreparing to unpack .../079-libwebrtc-audio-processing1_0.3.1-0ubuntu6_amd64.deb ...\nUnpacking libwebrtc-audio-processing1:amd64 (0.3.1-0ubuntu6) ...\nSelecting previously unselected package libspa-0.2-modules:amd64.\nPreparing to unpack .../080-libspa-0.2-modules_1.0.5-1ubuntu3_amd64.deb ...\nUnpacking libspa-0.2-modules:amd64 (1.0.5-1ubuntu3) ...\nSelecting previously unselected package libpipewire-0.3-0t64:amd64.\nPreparing to unpack .../081-libpipewire-0.3-0t64_1.0.5-1ubuntu3_amd64.deb ...\nUnpacking libpipewire-0.3-0t64:amd64 (1.0.5-1ubuntu3) ...\nSelecting previously unselected package libpipewire-0.3-common.\nPreparing to unpack .../082-libpipewire-0.3-common_1.0.5-1ubuntu3_all.deb ...\nUnpacking libpipewire-0.3-common (1.0.5-1ubuntu3) ...\nSelecting previously unselected package libpolkit-agent-1-0:amd64.\nPreparing to unpack .../083-libpolkit-agent-1-0_124-2ubuntu1.24.04.2_amd64.deb ...\nUnpacking libpolkit-agent-1-0:amd64 (124-2ubuntu1.24.04.2) ...\nSelecting previously unselected package libxss1:amd64.\nPreparing to unpack .../084-libxss1_1%3a1.2.3-1build3_amd64.deb ...\nUnpacking libxss1:amd64 (1:1.2.3-1build3) ...\nSelecting previously unselected package libsdl2-2.0-0:amd64.\nPreparing to unpack .../085-libsdl2-2.0-0_2.30.0+dfsg-1ubuntu3.1_amd64.deb ...\nUnpacking libsdl2-2.0-0:amd64 (2.30.0+dfsg-1ubuntu3.1) ...\nSelecting previously unselected package libslirp0:amd64.\nPreparing to unpack .../086-libslirp0_4.7.0-1ubuntu3_amd64.deb ...\nUnpacking libslirp0:amd64 (4.7.0-1ubuntu3) ...\nSelecting previously unselected package libspice-server1:amd64.\nPreparing to unpack .../087-libspice-server1_0.15.1-1build2_amd64.deb ...\nUnpacking libspice-server1:amd64 (0.15.1-1build2) ...\nSelecting previously unselected package libtpms0:amd64.\nPreparing to unpack .../088-libtpms0_0.9.3-0ubuntu4_amd64.deb ...\nUnpacking libtpms0:amd64 (0.9.3-0ubuntu4) ...\nSelecting previously unselected package libvirglrenderer1:amd64.\nPreparing to unpack .../089-libvirglrenderer1_1.0.0-1ubuntu2_amd64.deb ...\nUnpacking libvirglrenderer1:amd64 (1.0.0-1ubuntu2) ...\nSelecting previously unselected package libvirt-daemon-driver-qemu.\nPreparing to unpack .../090-libvirt-daemon-driver-qemu_10.0.0-2ubuntu8.7_amd64.deb ...\nUnpacking libvirt-daemon-driver-qemu (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libvirt-daemon.\nPreparing to unpack .../091-libvirt-daemon_10.0.0-2ubuntu8.7_amd64.deb ...\nUnpacking libvirt-daemon (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libvirt-daemon-config-network.\nPreparing to unpack .../092-libvirt-daemon-config-network_10.0.0-2ubuntu8.7_all.deb ...\nUnpacking libvirt-daemon-config-network (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libvirt-daemon-config-nwfilter.\nPreparing to unpack .../093-libvirt-daemon-config-nwfilter_10.0.0-2ubuntu8.7_all.deb ...\nUnpacking libvirt-daemon-config-nwfilter (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package systemd-container.\nPreparing to unpack .../094-systemd-container_255.4-1ubuntu8.8_amd64.deb ...\nUnpacking systemd-container (255.4-1ubuntu8.8) ...\nSelecting previously unselected package libvirt-daemon-system-systemd.\nPreparing to unpack .../095-libvirt-daemon-system-systemd_10.0.0-2ubuntu8.7_all.deb ...\nUnpacking libvirt-daemon-system-systemd (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package xml-core.\nPreparing to unpack .../096-xml-core_0.19_all.deb ...\nUnpacking xml-core (0.19) ...\nSelecting previously unselected package polkitd.\nPreparing to unpack .../097-polkitd_124-2ubuntu1.24.04.2_amd64.deb ...\nUnpacking polkitd (124-2ubuntu1.24.04.2) ...\nSelecting previously unselected package libvirt-daemon-system.\nPreparing to unpack .../098-libvirt-daemon-system_10.0.0-2ubuntu8.7_amd64.deb ...\nUnpacking libvirt-daemon-system (10.0.0-2ubuntu8.7) ...\nSelecting previously unselected package libxml2-utils.\nPreparing to unpack .../099-libxml2-utils_2.9.14+dfsg-1.3ubuntu3.3_amd64.deb ...\nUnpacking libxml2-utils (2.9.14+dfsg-1.3ubuntu3.3) ...\nSelecting previously unselected package lvm2.\nPreparing to unpack .../100-lvm2_2.03.16-3ubuntu3.2_amd64.deb ...\nUnpacking lvm2 (2.03.16-3ubuntu3.2) ...\nSelecting previously unselected package mdevctl.\nPreparing to unpack .../101-mdevctl_1.3.0-1ubuntu2_amd64.deb ...\nUnpacking mdevctl (1.3.0-1ubuntu2) ...\nSelecting previously unselected package python3-cairo.\nPreparing to unpack .../102-python3-cairo_1.25.1-2build2_amd64.deb ...\nUnpacking python3-cairo (1.25.1-2build2) ...\nSelecting previously unselected package python3-gi-cairo.\nPreparing to unpack .../103-python3-gi-cairo_3.48.2-1_amd64.deb ...\nUnpacking python3-gi-cairo (3.48.2-1) ...\nSelecting previously unselected package qemu-system-common.\nPreparing to unpack .../104-qemu-system-common_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-system-common (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package qemu-system-data.\nPreparing to unpack .../105-qemu-system-data_1%3a8.2.2+ds-0ubuntu1.7_all.deb ...\nUnpacking qemu-system-data (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package libfdt1:amd64.\nPreparing to unpack .../106-libfdt1_1.7.0-2build1_amd64.deb ...\nUnpacking libfdt1:amd64 (1.7.0-2build1) ...\nSelecting previously unselected package seabios.\nPreparing to unpack .../107-seabios_1.16.3-2_all.deb ...\nUnpacking seabios (1.16.3-2) ...\nSelecting previously unselected package qemu-system-x86.\nPreparing to unpack .../108-qemu-system-x86_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-system-x86 (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package qemu-system-modules-opengl.\nPreparing to unpack .../109-qemu-system-modules-opengl_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-system-modules-opengl (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package qemu-system-gui.\nPreparing to unpack .../110-qemu-system-gui_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-system-gui (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package qemu-system-modules-spice.\nPreparing to unpack .../111-qemu-system-modules-spice_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...\nUnpacking qemu-system-modules-spice (1:8.2.2+ds-0ubuntu1.7) ...\nSelecting previously unselected package swtpm.\nPreparing to unpack .../112-swtpm_0.7.3-0ubuntu5.24.04.1_amd64.deb ...\nUnpacking swtpm (0.7.3-0ubuntu5.24.04.1) ...\nSelecting previously unselected package swtpm-tools.\nPreparing to unpack .../113-swtpm-tools_0.7.3-0ubuntu5.24.04.1_amd64.deb ...\nUnpacking swtpm-tools (0.7.3-0ubuntu5.24.04.1) ...\nSelecting previously unselected package thin-provisioning-tools.\nPreparing to unpack .../114-thin-provisioning-tools_0.9.0-2ubuntu5.1_amd64.deb ...\nUnpacking thin-provisioning-tools (0.9.0-2ubuntu5.1) ...\nSelecting previously unselected package gir1.2-libvirt-glib-1.0:amd64.\nPreparing to unpack .../115-gir1.2-libvirt-glib-1.0_5.0.0-2build3_amd64.deb ...\nUnpacking gir1.2-libvirt-glib-1.0:amd64 (5.0.0-2build3) ...\nSelecting previously unselected package virt-manager.\nPreparing to unpack .../116-virt-manager_1%3a4.1.0-3ubuntu0.1_all.deb ...\nUnpacking virt-manager (1:4.1.0-3ubuntu0.1) ...\nSelecting previously unselected package libnss-mymachines:amd64.\nPreparing to unpack .../117-libnss-mymachines_255.4-1ubuntu8.8_amd64.deb ...\nUnpacking libnss-mymachines:amd64 (255.4-1ubuntu8.8) ...\nSelecting previously unselected package ovmf.\nPreparing to unpack .../118-ovmf_2024.02-2ubuntu0.4_all.deb ...\nUnpacking ovmf (2024.02-2ubuntu0.4) ...\nSetting up libip4tc2:amd64 (1.8.10-3ubuntu2) ...\nSetting up libpipewire-0.3-common (1.0.5-1ubuntu3) ...\nSetting up logrotate (3.21.0-2build1) ...\nCreated symlink /etc/systemd/system/timers.target.wants/logrotate.timer → /usr/lib/systemd/system/logrotate.timer.\nSetting up libvirt-daemon-config-network (10.0.0-2ubuntu8.7) ...\nSetting up gir1.2-gstreamer-1.0:amd64 (1.24.2-1ubuntu0.1) ...\nSetting up libraw1394-11:amd64 (2.1.2-2build3) ...\nSetting up libxft2:amd64 (2.3.6-1build1) ...\nSetting up libtag1v5-vanilla:amd64 (1.13.1-1build1) ...\nSetting up python3-cairo (1.25.1-2build2) ...\nSetting up libspeex1:amd64 (1.2.1-2ubuntu2.24.04.1) ...\nSetting up libdevmapper-event1.02.1:amd64 (2:1.02.185-3ubuntu3.2) ...\nSetting up libv4lconvert0t64:amd64 (1.26.1-4build3) ...\nSetting up libpangoxft-1.0-0:amd64 (1.52.1+ds-1build1) ...\nSetting up libtwolame0:amd64 (0.4.0-2build3) ...\nSetting up gir1.2-gdkpixbuf-2.0:amd64 (2.42.10+dfsg-3ubuntu3.1) ...\nSetting up gir1.2-spiceclientglib-2.0:amd64 (0.42-2ubuntu2) ...\nSetting up gir1.2-atk-1.0:amd64 (2.52.0-1build1) ...\nSetting up libip6tc2:amd64 (1.8.10-3ubuntu2) ...\nSetting up libdbusmenu-glib4:amd64 (18.10.20180917~bzr492+repack1-3.1ubuntu5) ...\nSetting up libspice-server1:amd64 (0.15.1-1build2) ...\nSetting up netcat-openbsd (1.226-1ubuntu2) ...\nupdate-alternatives: using /bin/nc.openbsd to provide /bin/nc (nc) in auto mode\nSetting up gir1.2-libvirt-glib-1.0:amd64 (5.0.0-2build3) ...\nSetting up msr-tools (1.3-5build1) ...\nSetting up libwebrtc-audio-processing1:amd64 (0.3.1-0ubuntu6) ...\nSetting up gettext-base (0.21-14ubuntu2) ...\nSetting up libnftnl11:amd64 (1.2.6-2build1) ...\nSetting up libharfbuzz-gobject0:amd64 (8.3.0-2build2) ...\nSetting up libfdt1:amd64 (1.7.0-2build1) ...\nSetting up libayatana-ido3-0.4-0:amd64 (0.10.1-1build2) ...\nSetting up gir1.2-harfbuzz-0.0:amd64 (8.3.0-2build2) ...\nSetting up acl (2.3.2-1build1.1) ...\nSetting up ovmf (2024.02-2ubuntu0.4) ...\nSetting up dns-root-data (2024071801~ubuntu0.24.04.1) ...\nSetting up libasound2-data (1.2.11-1ubuntu0.1) ...\nSetting up gir1.2-pango-1.0:amd64 (1.52.1+ds-1build1) ...\nSetting up libgstreamer-plugins-good1.0-0:amd64 (1.24.2-1ubuntu1.1) ...\nSetting up libasound2t64:amd64 (1.2.11-1ubuntu0.1) ...\nSetting up libslang2:amd64 (2.3.3-3build2) ...\nSetting up libvirglrenderer1:amd64 (1.0.0-1ubuntu2) ...\nSetting up libspa-0.2-modules:amd64 (1.0.5-1ubuntu3) ...\nSetting up libxv1:amd64 (2:1.0.11-1.1build1) ...\nSetting up libshout3:amd64 (2.4.6-1build2) ...\nSetting up thin-provisioning-tools (0.9.0-2ubuntu5.1) ...\nSetting up udev (255.4-1ubuntu8.8) ...\nCreating group 'input' with GID 995.\nCreating group 'sgx' with GID 994.\nCreating group 'kvm' with GID 993.\nCreating group 'render' with GID 992.\nfchownat() of /dev/snd/seq failed: Operation not permitted\nfchownat() of /dev/snd/timer failed: Operation not permitted\nfchownat() of /dev/loop-control failed: Operation not permitted\nfchmod() of /dev/kvm failed: Operation not permitted\nfchmod() of /dev/vhost-net failed: Operation not permitted\nfchmod() of /dev/vhost-vsock failed: Operation not permitted\nSetting up libvirt-daemon-driver-qemu (10.0.0-2ubuntu8.7) ...\nSetting up libdv4t64:amd64 (1.0.0-17.1build1) ...\nSetting up qemu-system-data (1:8.2.2+ds-0ubuntu1.7) ...\nSetting up seabios (1.16.3-2) ...\nSetting up systemd-hwe-hwdb (255.1.4) ...\nSetting up libv4l-0t64:amd64 (1.26.1-4build3) ...\nSetting up systemd-container (255.4-1ubuntu8.8) ...\nCreated symlink /etc/systemd/system/multi-user.target.wants/machines.target → /usr/lib/systemd/system/machines.targ\net.\nSetting up libvpx9:amd64 (1.14.0-1ubuntu2.2) ...\nSetting up libslirp0:amd64 (4.7.0-1ubuntu3) ...\nSetting up alsa-topology-conf (1.2.5.1-2) ...\nSetting up libtag1v5:amd64 (1.13.1-1build1) ...\nSetting up cpu-checker (0.7-1.3build2) ...\nSetting up libwavpack1:amd64 (5.6.0-1build1) ...\nSetting up libnfnetlink0:amd64 (1.0.2-2build1) ...\nSetting up ipxe-qemu (1.21.1+git-20220113.fbbdc3926-0ubuntu2) ...\nSetting up libdecor-0-0:amd64 (0.2.2-1build2) ...\nSetting up libpolkit-agent-1-0:amd64 (124-2ubuntu1.24.04.2) ...\nSetting up ipxe-qemu-256k-compat-efi-roms (1.0.0+git-20150424.a25a16d-0ubuntu5) ...\nSetting up sgml-base (1.31) ...\nSetting up libbrlapi0.8:amd64 (6.6-4ubuntu5) ...\nSetting up libxss1:amd64 (1:1.2.3-1build3) ...\nSetting up libtpms0:amd64 (0.9.3-0ubuntu4) ...\nSetting up dmidecode (3.5-3ubuntu0.1) ...\nSetting up libxml2-utils (2.9.14+dfsg-1.3ubuntu3.3) ...\nSetting up libvirt-daemon-config-nwfilter (10.0.0-2ubuntu8.7) ...\nSetting up libsamplerate0:amd64 (0.2.2-4build1) ...\nSetting up libayatana-indicator3-7:amd64 (0.9.4-1build1) ...\nSetting up python3-gi-cairo (3.48.2-1) ...\nSetting up libgtksourceview-4-common (4.8.4-5build4) ...\nSetting up libpipewire-0.3-0t64:amd64 (1.0.5-1ubuntu3) ...\nSetting up libdecor-0-plugin-1-gtk:amd64 (0.2.2-1build2) ...\nSetting up libgudev-1.0-0:amd64 (1:238-5ubuntu1) ...\nSetting up libaa1:amd64 (1.4p5-51.1) ...\nSetting up libiec61883-0:amd64 (1.2.0-6build1) ...\nSetting up mdevctl (1.3.0-1ubuntu2) ...\nSetting up libavc1394-0:amd64 (0.5.4-5build3) ...\nSetting up libdbusmenu-gtk3-4:amd64 (18.10.20180917~bzr492+repack1-3.1ubuntu5) ...\nSetting up libnftables1:amd64 (1.0.9-1build1) ...\nSetting up gstreamer1.0-x:amd64 (1.24.2-1ubuntu0.2) ...\nSetting up nftables (1.0.9-1build1) ...\nSetting up qemu-system-common (1:8.2.2+ds-0ubuntu1.7) ...\nCreated symlink /etc/systemd/system/multi-user.target.wants/qemu-kvm.service → /usr/lib/systemd/system/qemu-kvm.ser\nvice.\nSetting up libcaca0:amd64 (0.99.beta20-4build2) ...\nSetting up alsa-ucm-conf (1.2.10-1ubuntu5.7) ...\nSetting up gstreamer1.0-plugins-good:amd64 (1.24.2-1ubuntu1.1) ...\nSetting up qemu-system-x86 (1:8.2.2+ds-0ubuntu1.7) ...\nSetting up gir1.2-gtk-3.0:amd64 (3.24.41-4ubuntu1.3) ...\nSetting up libparted2t64:amd64 (3.6-4build1) ...\nRemoving 'diversion of /lib/x86_64-linux-gnu/libparted.so.2 to /lib/x86_64-linux-gnu/libparted.so.2.usr-is-merged b\ny libparted2t64'\nRemoving 'diversion of /lib/x86_64-linux-gnu/libparted.so.2.0.5 to /lib/x86_64-linux-gnu/libparted.so.2.0.5.usr-is-\nmerged by libparted2t64'\nSetting up libgtksourceview-4-0:amd64 (4.8.4-5build4) ...\nSetting up libnss-mymachines:amd64 (255.4-1ubuntu8.8) ...\nSetting up libayatana-appindicator3-1 (0.5.93-1build3) ...\nSetting up swtpm (0.7.3-0ubuntu5.24.04.1) ...\nSetting up gir1.2-gtk-vnc-2.0:amd64 (1.3.1-1build2) ...\nSetting up libvirt-daemon-system-systemd (10.0.0-2ubuntu8.7) ...\nSetting up gir1.2-spiceclientgtk-3.0:amd64 (0.42-2ubuntu2) ...\nSetting up libjack-jackd2-0:amd64 (1.9.21~dfsg-3ubuntu3) ...\nSetting up libnetfilter-conntrack3:amd64 (1.0.9-6build1) ...\nSetting up xml-core (0.19) ...\nSetting up gir1.2-vte-2.91:amd64 (0.76.0-1ubuntu0.1) ...\nSetting up libvirt-daemon (10.0.0-2ubuntu8.7) ...\nSetting up libsdl2-2.0-0:amd64 (2.30.0+dfsg-1ubuntu3.1) ...\nSetting up gir1.2-ayatanaappindicator3-0.1 (0.5.93-1build3) ...\nSetting up gir1.2-gtksource-4:amd64 (4.8.4-5build4) ...\nSetting up qemu-system-modules-opengl (1:8.2.2+ds-0ubuntu1.7) ...\nSetting up iptables (1.8.10-3ubuntu2) ...\nupdate-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in auto mode\nupdate-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables (ip6tables) in auto mode\nupdate-alternatives: using /usr/sbin/iptables-nft to provide /usr/sbin/iptables (iptables) in auto mode\nupdate-alternatives: using /usr/sbin/ip6tables-nft to provide /usr/sbin/ip6tables (ip6tables) in auto mode\nupdate-alternatives: using /usr/sbin/arptables-nft to provide /usr/sbin/arptables (arptables) in auto mode\nupdate-alternatives: using /usr/sbin/ebtables-nft to provide /usr/sbin/ebtables (ebtables) in auto mode\nSetting up qemu-system-gui (1:8.2.2+ds-0ubuntu1.7) ...\nSetting up parted (3.6-4build1) ...\nSetting up dnsmasq-base (2.90-2build2) ...\nSetting up swtpm-tools (0.7.3-0ubuntu5.24.04.1) ...\ninfo: Selecting GID from range 100 to 999 ...\ninfo: Adding group `swtpm' (GID 107) ...\ninfo: The home dir /var/lib/swtpm you specified can't be accessed: No such file or directory\n\ninfo: Selecting UID from range 100 to 999 ...\n\ninfo: Adding system user `swtpm' (UID 103) ...\ninfo: Adding new user `swtpm' (UID 103) with group `swtpm' ...\ninfo: Not creating home directory `/var/lib/swtpm'.\nSetting up virt-manager (1:4.1.0-3ubuntu0.1) ...\nSetting up qemu-system-modules-spice (1:8.2.2+ds-0ubuntu1.7) ...\nSetting up liblvm2cmd2.03:amd64 (2.03.16-3ubuntu3.2) ...\nSetting up dmeventd (2:1.02.185-3ubuntu3.2) ...\nCreated symlink /etc/systemd/system/sockets.target.wants/dm-event.socket → /usr/lib/systemd/system/dm-event.socket.\nSetting up lvm2 (2.03.16-3ubuntu3.2) ...\nCreated symlink /etc/systemd/system/sysinit.target.wants/blk-availability.service → /usr/lib/systemd/system/blk-ava\nilability.service.\nCreated symlink /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service → /usr/lib/systemd/system/lvm2-monito\nr.service.\nCreated symlink /etc/systemd/system/sysinit.target.wants/lvm2-lvmpolld.socket → /usr/lib/systemd/system/lvm2-lvmpol\nld.socket.\nProcessing triggers for libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.4) ...\nProcessing triggers for dbus (1.14.10-4ubuntu4.1) ...\nProcessing triggers for hicolor-icon-theme (0.17-2) ...\nProcessing triggers for libc-bin (2.39-0ubuntu8.4) ...\nProcessing triggers for man-db (2.12.0-4build2) ...\nProcessing triggers for sgml-base (1.31) ...\nSetting up polkitd (124-2ubuntu1.24.04.2) ...\nCreating group 'polkitd' with GID 991.\nCreating user 'polkitd' (User for polkitd) with UID 991 and GID 991.\ninvoke-rc.d: could not determine current runlevel\ninvoke-rc.d: policy-rc.d denied execution of reload.\nstart-stop-daemon: unable to stat /usr/libexec/polkitd (No such file or directory)\nSetting up libvirt-daemon-system (10.0.0-2ubuntu8.7) ...\nuseradd warning: libvirt-qemu's uid 64055 is greater than SYS_UID_MAX 999\nchown: changing ownership of '/var/lib/libvirt/qemu/': Operation not permitted\ndpkg: error processing package libvirt-daemon-system (--configure):\n installed libvirt-daemon-system package post-installation script subprocess returned error exit status 1\nErrors were encountered while processing:\n libvirt-daemon-system\nE: Sub-process /usr/bin/dpkg returned an error code (1)\n📦[waylon@ubuntu ~]$ virt-manager\n```\n",
      "summary": "I got virtual machine manager running on two Bazzite machines today. It was a bit tricky, more than I thought actually. I ran into all sorts of...",
      "date_published": "2025-06-27T21:09:05Z",
      "date_modified": "2025-06-27T21:09:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bazzite"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sst-opencode/",
      "url": "https://go.waylonwalker.com/sst-opencode/",
      "title": "⭐ sst opencode",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/sst/opencode\" 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\"\u003eopencode\u003c/a\u003e by \u003ca href=\"https://github.com/sst\" 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\"\u003esst\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAI coding agent, built for the terminal.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [opencode](https://github.com/sst/opencode) by [sst](https://github.com/sst).\n\nAI coding agent, built for the terminal.\n",
      "summary": "Looking for inspiration? opencode by sst.",
      "date_published": "2025-06-24T14:38:03Z",
      "date_modified": "2025-06-24T14:38:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/anomalyco-opencode/",
      "url": "https://go.waylonwalker.com/anomalyco-opencode/",
      "title": "⭐ anomalyco opencode",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/anomalyco/opencode\" 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\"\u003eopencode\u003c/a\u003e from \u003ca href=\"https://github.com/anomalyco\" 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\"\u003eanomalyco\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe open source coding agent.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [opencode](https://github.com/anomalyco/opencode) from [anomalyco](https://github.com/anomalyco).\n\nThe open source coding agent.\n",
      "summary": "I'm impressed by opencode from anomalyco.",
      "date_published": "2025-06-24T14:38:03Z",
      "date_modified": "2025-06-24T14:38:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-718/",
      "url": "https://go.waylonwalker.com/thought-718/",
      "title": "💭 Notes – 06:11 Sun 22 Jun 2025 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-06-22T06:11Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 06:11 Sun 22 Jun 2025 — Notes – 06:11 Sun 22 Jun 2025\" loading=\"lazy\"/ data-glightbox=\"description: Notes – 06:11 Sun 22 Jun 2025 — Notes – 06:11 Sun 22 Jun 2025\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 06:11 Sun 22 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 06:11 Sun 22 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat’s even real anymore?  What a shitty age we are in that you have to form an opinion about news outlets and media outlets.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-06-22T06:11Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 06:11 Sun 22 Jun 2025 — Notes – 06:11 Sun 22 Jun 2025\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 06:11 Sun 22 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 06:11 Sun 22 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWhat's even real anymore?  What a shitty age we are in that you have to form an opinion about news outlets and media outlets.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/notes/2025-06-22T06:11Z/",
      "date_published": "2025-06-24T13:25:49Z",
      "date_modified": "2025-06-24T13:25:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dunno",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-717/",
      "url": "https://go.waylonwalker.com/thought-717/",
      "title": "💭 neverjust",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.neverjust.net/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.neverjust.net/opengraph-image.png?fcfb5c7c48aa740e\" alt=\"neverjust — a guide to better developer communication\" loading=\"lazy\"/ data-glightbox=\"description: neverjust — a guide to better developer communication\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eneverjust\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ea guide to better developer communication\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eneverjust · neverjust.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI just never quite understood why the word \u003cem\u003ejust\u003c/em\u003e can send people over the top.  I get it when you don’t know someone, you don’t have history with them, and they come in saying you are doing something wrong.\u003c/p\u003e\n\u003cp\u003eI pulled this out into a full post \u003ca href=\"/just/\" class=\"wikilink\" data-title=\"just\" data-description=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\" data-date=\"2025-06-23\" data-preview=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\"\u003ejust\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.neverjust.net/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.neverjust.net/opengraph-image.png?fcfb5c7c48aa740e\" alt=\"neverjust — a guide to better developer communication\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eneverjust\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ea guide to better developer communication\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eneverjust \u0026middot; neverjust.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI just never quite understood why the word *just* can send people over the top.  I get it when you don't know someone, you don't have history with them, and they come in saying you are doing something wrong.\n\nI pulled this out into a full post \u003ca href=\"/just/\" class=\"wikilink\" data-title=\"just\" data-description=\"I just never quite understood why the word can send people over the top. I get it when you don\u0026#39;t know someone, you don\u0026#39;t have history with them, and they...\" data-date=\"2025-06-23\"\u003ejust\u003c/a\u003e\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.neverjust.net/",
      "date_published": "2025-06-23T23:55:57Z",
      "date_modified": "2025-06-23T23:55:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-716/",
      "url": "https://go.waylonwalker.com/thought-716/",
      "title": "💭 Software engineer get laid off in 2025 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"_HcN2zdNoms\" title=\"Software engineer get laid off in 2025\" playlabel=\"Play: Software engineer get laid off in 2025\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e2025 is not the year to get put on the market, its rough out there.  Junior’s have little chance, senior+ are even struggling.  We had it easy from 2020-2023, now its over saturated and you have to want to be in this industry to be here and stay here.  It used to be a fine place to get a good job to pay the bills, the bar has been raised and if you don’t want to be here you are going to struggle.  Theo covers this in this linked video deeply [[ thoughts-472 ]].\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"_HcN2zdNoms\" title=\"Software engineer get laid off in 2025\" playlabel=\"Play: Software engineer get laid off in 2025\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n2025 is not the year to get put on the market, its rough out there.  Junior's have little chance, senior+ are even struggling.  We had it easy from 2020-2023, now its over saturated and you have to want to be in this industry to be here and stay here.  It used to be a fine place to get a good job to pay the bills, the bar has been raised and if you don't want to be here you are going to struggle.  Theo covers this in this linked video deeply [[ thoughts-472 ]].\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/_HcN2zdNoms",
      "date_published": "2025-06-23T13:13:58Z",
      "date_modified": "2025-06-23T13:13:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-715/",
      "url": "https://go.waylonwalker.com/thought-715/",
      "title": "💭 If Netflix Made a ‘Day in the Life of a Software Engineer’ - Y...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bvINaJEQNSQ\" title=\"If Netflix Made a ‘Day in the Life of a Software Engineer’\" playlabel=\"Play: If Netflix Made a ‘Day in the Life of a Software Engineer’\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eNailed the netflix documentary style.  Videos like this make me so grateful that I have  a job in this rough market, if you’ve followed jepi’s series you know he’s been out of a job for months, and he is not alone in this.  This is the year of “laid of, i didn’t get laid off, I left to focus on my startup”, [[ thoughts-716 ]]\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bvINaJEQNSQ\" title=\"If Netflix Made a ‘Day in the Life of a Software Engineer’\" playlabel=\"Play: If Netflix Made a ‘Day in the Life of a Software Engineer’\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nNailed the netflix documentary style.  Videos like this make me so grateful that I have  a job in this rough market, if you've followed jepi's series you know he's been out of a job for months, and he is not alone in this.  This is the year of \"laid of, i didn't get laid off, I left to focus on my startup\", [[ thoughts-716 ]]\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=bvINaJEQNSQ",
      "date_published": "2025-06-23T12:51:39Z",
      "date_modified": "2025-06-23T12:51:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-708/",
      "url": "https://go.waylonwalker.com/thought-708/",
      "title": "💭 Notes – 09:32 Thu 19 Jun 2025 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-06-19T09:32Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 09:32 Thu 19 Jun 2025 — Notes – 09:32 Thu 19 Jun 2025\" loading=\"lazy\"/ data-glightbox=\"description: Notes – 09:32 Thu 19 Jun 2025 — Notes – 09:32 Thu 19 Jun 2025\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 09:32 Thu 19 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 09:32 Thu 19 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDavid’s design on his blog is fantastic likely from years of small improvements like this converting ugly quotes to pretty quotes and optimizing fonts.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt’s common for markdown libraries to convert the first to the second like my build script does.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis is new to me, I had no idea that markdown libraries did this, I’m now interested if markdown-it does it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFor subsetting I use the fontTools library but I’ve no idea how to setup Python environments. I got it working once and failed to document the process.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDavid, David, David, I’m sorry python has done you this dirty.  I should do a post on making python environments in the age of \u003ca href=\"/tags/uv/\" class=\"wikilink\" data-title=\"Posts tagged: uv\" data-description=\"All posts with the tag \u0026#34;uv\u0026#34;\" data-preview=\"All posts with the tag \u0026#34;uv\u0026#34;\"\u003ePosts tagged: uv\u003c/a\u003e.  You got options to run in docker/podman, a whole ass vm, uv venv, uvx, uv run, uv script, python -m venv, virtualenv, poetry, hatch, and too many more.  The ones that matter are containers or uv.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/notes/2025-06-19T09:32Z/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/assets/images/ogimage.png\" alt=\"Notes – 09:32 Thu 19 Jun 2025 — Notes – 09:32 Thu 19 Jun 2025\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNotes – 09:32 Thu 19 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNotes – 09:32 Thu 19 Jun 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDavid's design on his blog is fantastic likely from years of small improvements like this converting ugly quotes to pretty quotes and optimizing fonts.\n\n\u003e It’s common for markdown libraries to convert the first to the second like my build script does.\n\nThis is new to me, I had no idea that markdown libraries did this, I'm now interested if markdown-it does it.\n\n\u003e For subsetting I use the fontTools library but I’ve no idea how to setup Python environments. I got it working once and failed to document the process. \n\nDavid, David, David, I'm sorry python has done you this dirty.  I should do a post on making python environments in the age of \u003ca href=\"/tags/uv/\" class=\"wikilink\" data-title=\"Posts tagged: uv\" data-description=\"All posts with the tag \u0026#34;uv\u0026#34;\"\u003ePosts tagged: uv\u003c/a\u003e.  You got options to run in docker/podman, a whole ass vm, uv venv, uvx, uv run, uv script, python -m venv, virtualenv, poetry, hatch, and too many more.  The ones that matter are containers or uv.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/notes/2025-06-19T09:32Z/",
      "date_published": "2025-06-19T13:18:20Z",
      "date_modified": "2025-06-19T13:18:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "blog",
        "fonts",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier-vcs-quirks/",
      "url": "https://go.waylonwalker.com/copier-vcs-quirks/",
      "title": "copier vcs quirks",
      "content_html": "\u003cp\u003eCopier has a few quirks with vcs that I just discovered by trying to test out\nsome changes.  I may have some config that I have long forgotten about\nsomewhere deep in my dotfiles, I don’t think so, but id love to be wrong and\ncorrected, please reach out.\u003c/p\u003e\n\u003ch2 id=\"what-doesnt-work\"\u003eWhat Doesn’t Work \u003ca href=\"#what-doesnt-work\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI tried throwing everything at this template to make it work.  I tried a bunch\nof flags that did not work. I tried making commits to the local repo to get rid\nof the dirty warning. I really wanted to test new changes locally without\ncommitting and pushing untested and potentially broken changes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvx copier copy ../markata-blog-starter .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvx copier copy gh:waylonwalker/markata-blog-starter@develop .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvx copier copy ../markata-blog-starter . -wlg --trust\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-works-----vcs-ref\"\u003eWhat Works - –vcs-ref \u003ca href=\"#what-works-----vcs-ref\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFinally after trying everything to get the local copy to work, and my guess of\n@branch not working I found this to work.  It does require me to go to the repo\non my develop branch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvx copier copy gh:waylonwalker/markata-blog-starter --vcs-ref develop .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-works---delete-\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e\"\u003eWhat Works - delete .git \u003ca href=\"#what-works---delete-git\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eReally this might be my best option to make quick changes and test them locally\nwithout going through a version control system.  It is not ideal, but makes it\neasy to quickly iterate on.  I might be renaming .git, or copying to /tmp for\nquick iteration.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm -rf .git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvx copier copy ../markata-blog-starter .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"copier-i-love\"\u003eCopier I love \u003ca href=\"#copier-i-love\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCopier is a great templating tool.  I really love it.  I use it every single\nday to create posts on this blog using \u003ca href=\"/tmux-copier-templates/\" class=\"wikilink\" data-title=\"Tmux hotkey for copier templates\" data-description=\"I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...\" data-date=\"2022-01-24\" data-preview=\"I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...\"\u003eTmux hotkey for copier templates\u003c/a\u003e.  This is\nthe first time this quirk has got me and it had me puzzled for 45 minutes as I\ndid not expect this behavior whatsoever.\u003c/p\u003e\n",
      "content_text": "\nCopier has a few quirks with vcs that I just discovered by trying to test out\nsome changes.  I may have some config that I have long forgotten about\nsomewhere deep in my dotfiles, I don't think so, but id love to be wrong and\ncorrected, please reach out.\n\n## What Doesn't Work\n\nI tried throwing everything at this template to make it work.  I tried a bunch\nof flags that did not work. I tried making commits to the local repo to get rid\nof the dirty warning. I really wanted to test new changes locally without\ncommitting and pushing untested and potentially broken changes.\n\n``` bash\nuvx copier copy ../markata-blog-starter .\nuvx copier copy gh:waylonwalker/markata-blog-starter@develop .\nuvx copier copy ../markata-blog-starter . -wlg --trust\n```\n\n## What Works - --vcs-ref\n\nFinally after trying everything to get the local copy to work, and my guess of\n@branch not working I found this to work.  It does require me to go to the repo\non my develop branch.\n\n``` bash\nuvx copier copy gh:waylonwalker/markata-blog-starter --vcs-ref develop .\n```\n\n## What Works - delete .git\n\nReally this might be my best option to make quick changes and test them locally\nwithout going through a version control system.  It is not ideal, but makes it\neasy to quickly iterate on.  I might be renaming .git, or copying to /tmp for\nquick iteration.\n\n``` bash\nrm -rf .git\nuvx copier copy ../markata-blog-starter .\n```\n\n## Copier I love\n\nCopier is a great templating tool.  I really love it.  I use it every single\nday to create posts on this blog using \u003ca href=\"/tmux-copier-templates/\" class=\"wikilink\" data-title=\"Tmux hotkey for copier templates\" data-description=\"I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...\" data-date=\"2022-01-24\"\u003eTmux hotkey for copier templates\u003c/a\u003e.  This is\nthe first time this quirk has got me and it had me puzzled for 45 minutes as I\ndid not expect this behavior whatsoever.\n\n\n",
      "summary": "Copier has a few quirks with vcs that I just discovered by trying to test out some changes. I may have some config that I have long forgotten about somewhere...",
      "date_published": "2025-06-19T08:04:51Z",
      "date_modified": "2025-06-19T08:04:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/canonical-checkbox/",
      "url": "https://go.waylonwalker.com/canonical-checkbox/",
      "title": "⭐ canonical checkbox",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/canonical/checkbox\" 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\"\u003echeckbox\u003c/a\u003e from \u003ca href=\"https://github.com/canonical\" 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\"\u003ecanonical\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eCheckbox is a testing framework used to validate device compatibility with Ubuntu Linux. It’s the testing tool developed for the purposes of the Ubuntu Certification program.\u003c/p\u003e\n",
      "content_text": "\nI came across [checkbox](https://github.com/canonical/checkbox) from [canonical](https://github.com/canonical), and it's packed with great features and ideas.\n\nCheckbox is a testing framework used to validate device compatibility with Ubuntu Linux. It’s the testing tool developed for the purposes of the Ubuntu Certification program.\n",
      "summary": "I came across checkbox from canonical, and it's packed with great features and ideas.",
      "date_published": "2025-06-18T02:07:34Z",
      "date_modified": "2025-06-18T02:07:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-704/",
      "url": "https://go.waylonwalker.com/thought-704/",
      "title": "💭 Bug: Pypi metadata is wrong (Requires: Python \u003e=3.6) · Issue #...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jmcnamara/XlsxWriter/issues/1131\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/bb386566ec32565615608d972769aa7a4695afabb6146c28fdec0287958ea9ac/jmcnamara/XlsxWriter/issues/1131\" alt=\"Bug: Pypi metadata is wrong (Requires: Python \u0026gt;=3.6) · Issue #1131 · jmcnamara/XlsxWriter — Current behavior When pulling the dependency with pip (without pinning the version), our python3.6 tester pulls 3.2.3 and not 3.2.2 even though the version is no longer compatible with python 3.6. ...\" loading=\"lazy\"/ data-glightbox=\"description: Bug: Pypi metadata is wrong (Requires: Python \u0026gt;=3.6) · Issue #1131 · jmcnamara/XlsxWriter — Current behavior When pulling the dependency with pip (without pinning the version), our python3.6 tester pulls 3.2.3 and not 3.2.2 even though the version is no longer compatible with python 3.6. ...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBug: Pypi metadata is wrong (Requires: Python \u0026gt;=3.6) · Issue #1131 · jmcnamara/XlsxWriter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCurrent behavior When pulling the dependency with pip (without pinning the version), our python3.6 tester pulls 3.2.3 and not 3.2.2 even though the version is no longer compatible with python 3.6. ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epypi yanks suck, they are rare, this one got me today as it was a pinned dependency in my dependency chain.  The latest release broke python 3.6/3.7 (which 3.6 has  been EOL for 3.5 years btw), and it claimed \u0026gt;=3.6.  In order to allow users to still install xlsxwriter without pinning down it needed yanked.  I’m not sure if there was another way around it as pypi releases are immutable, so you cannot fix\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/2ba70753-5723-4b96-8f2b-8090be07d6ad.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/2ba70753-5723-4b96-8f2b-8090be07d6ad.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis now has me wondering what the heck is using it with old pythons.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIt appears to have broken builds on Canonical/checkbox for ubuntu 18.04.  Checkbox is a device compatibility testing framework.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/canonical/checkbox/actions/runs/14644718138/job/41098549191#step:8:125\" 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\"\u003ehttps://github.com/canonical/checkbox/actions/runs/14644718138/job/41098549191#step:8:125\u003c/a\u003e\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/6fe3e01b-e180-4d2a-a00c-6b9fab727626.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/6fe3e01b-e180-4d2a-a00c-6b9fab727626.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jmcnamara/XlsxWriter/issues/1131\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/bb386566ec32565615608d972769aa7a4695afabb6146c28fdec0287958ea9ac/jmcnamara/XlsxWriter/issues/1131\" alt=\"Bug: Pypi metadata is wrong (Requires: Python \u0026gt;=3.6) · Issue #1131 · jmcnamara/XlsxWriter — Current behavior When pulling the dependency with pip (without pinning the version), our python3.6 tester pulls 3.2.3 and not 3.2.2 even though the version is no longer compatible with python 3.6. ...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBug: Pypi metadata is wrong (Requires: Python \u0026gt;=3.6) · Issue #1131 · jmcnamara/XlsxWriter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCurrent behavior When pulling the dependency with pip (without pinning the version), our python3.6 tester pulls 3.2.3 and not 3.2.2 even though the version is no longer compatible with python 3.6. ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npypi yanks suck, they are rare, this one got me today as it was a pinned dependency in my dependency chain.  The latest release broke python 3.6/3.7 (which 3.6 has  been EOL for 3.5 years btw), and it claimed \u003e=3.6.  In order to allow users to still install xlsxwriter without pinning down it needed yanked.  I'm not sure if there was another way around it as pypi releases are immutable, so you cannot fix  \n\n![image](https://dropper.wayl.one/api/file/2ba70753-5723-4b96-8f2b-8090be07d6ad.webp)\n\n\u003e This now has me wondering what the heck is using it with old pythons.\n\nIt appears to have broken builds on Canonical/checkbox for ubuntu 18.04.  Checkbox is a device compatibility testing framework.\n\nhttps://github.com/canonical/checkbox/actions/runs/14644718138/job/41098549191#step:8:125\n\n![image](https://dropper.wayl.one/api/file/6fe3e01b-e180-4d2a-a00c-6b9fab727626.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/jmcnamara/XlsxWriter/issues/1131",
      "date_published": "2025-06-18T02:04:41Z",
      "date_modified": "2025-06-18T02:04:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "pypi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-703/",
      "url": "https://go.waylonwalker.com/thought-703/",
      "title": "💭 Conventional Commits",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.conventionalcommits.org/en/v1.0.0/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.conventionalcommits.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.conventionalcommits.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eConventional Commits\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA specification for adding human and machine readable meaning to commit messages\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eConventional Commits · conventionalcommits.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI try to use conventional commits on all of my commits, but I often end up only using feat/fix.  I need to keep this page handy and get new verbiage worked into my language\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003efix:\u003c/li\u003e\n\u003cli\u003efeat:\u003c/li\u003e\n\u003cli\u003ebuild:\u003c/li\u003e\n\u003cli\u003echore:\u003c/li\u003e\n\u003cli\u003eci:\u003c/li\u003e\n\u003cli\u003edocs:\u003c/li\u003e\n\u003cli\u003estyle:\u003c/li\u003e\n\u003cli\u003erefactor:\u003c/li\u003e\n\u003cli\u003eperf:\u003c/li\u003e\n\u003cli\u003etest:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOptionally include a scope \u003ccode\u003efix(parser):\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eA bang indicates a breaking change note. For example …\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echore!: drop support \u003cspan class=\"k\"\u003efor\u003c/span\u003e Node \u003cspan class=\"m\"\u003e6\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBREAKING CHANGE: use JavaScript features not available in Node 6.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.conventionalcommits.org/en/v1.0.0/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eConventional Commits\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA specification for adding human and machine readable meaning to commit messages\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eConventional Commits \u0026middot; conventionalcommits.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI try to use conventional commits on all of my commits, but I often end up only using feat/fix.  I need to keep this page handy and get new verbiage worked into my language \n\n* fix:\n* feat:\n* build:\n* chore:\n* ci:\n* docs:\n* style:\n* refactor:\n* perf:\n* test:\n\nOptionally include a scope `fix(parser):`\n\nA bang indicates a breaking change note. For example ...\n\n``` bash\nchore!: drop support for Node 6\n\nBREAKING CHANGE: use JavaScript features not available in Node 6.\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.conventionalcommits.org/en/v1.0.0/",
      "date_published": "2025-06-17T16:37:14Z",
      "date_modified": "2025-06-17T16:37:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-702/",
      "url": "https://go.waylonwalker.com/thought-702/",
      "title": "💭 FROGS ep1 The home - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bPlPkDEcZBA\" title=\"FROGS ep1 The home\" playlabel=\"Play: FROGS ep1 The home\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWyatt built out this full world to start making a film series about FROGS.  The entire set it built on a flat world, but yet feels so immersive.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bPlPkDEcZBA\" title=\"FROGS ep1 The home\" playlabel=\"Play: FROGS ep1 The home\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWyatt built out this full world to start making a film series about FROGS.  The entire set it built on a flat world, but yet feels so immersive.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=bPlPkDEcZBA\u0026list=TLPQMTcwNjIwMjVHHHsm3llljQ\u0026index=3",
      "date_published": "2025-06-17T13:08:54Z",
      "date_modified": "2025-06-17T13:08:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "minecraft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-695/",
      "url": "https://go.waylonwalker.com/thought-695/",
      "title": "💭 Visualizing My Blog’s Internal Links - Jim Nielsen’s Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVisualizing My Blog’s Internal Links\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI like Jim’s visualizations on his site, reminds me a lot of obsidian.  I’ve tried to do the same on my \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 page in the past, but it didn’t come out right.  I’m going to have to give this another go.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVisualizing My Blog’s Internal Links\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI like Jim's visualizations on his site, reminds me a lot of obsidian.  I've tried to do the same on my \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 page in the past, but it didn't come out right.  I'm going to have to give this another go.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/",
      "date_published": "2025-06-16T00:48:19Z",
      "date_modified": "2025-06-16T00:48:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-694/",
      "url": "https://go.waylonwalker.com/thought-694/",
      "title": "💭 Your Framework is Showing 😳 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/06/13/your-framework-is-showing-nextjs-error/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2025-06-13-your-framework-is-showing-nextjs-error.png\" alt=\"Your Framework is Showing — The one where I’ve had enough of the same Next.js error\" loading=\"lazy\"/ data-glightbox=\"description: Your Framework is Showing — The one where I’ve had enough of the same Next.js error\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYour Framework is Showing\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I’ve had enough of the same Next.js error\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat breakdown of nextjs.  I was highly unaware of its \u003cem\u003eperformance\u003c/em\u003e optimizations before reading this.  The smell of vendor lock in from next/vercel has been there from the start, this is the first real claim I’ve seen.\u003c/p\u003e\n\u003cp\u003eI’m out on modern js front ends, complex builds that change every 6 months, design patterns are out of date just as fast.  Its hard to keep up, especially when you don’t have the use case for highly interactive apps.  Libraries like \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e or plain ol js gets the job done on the majority of sites and everything I tend to work on.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/06/13/your-framework-is-showing-nextjs-error/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2025-06-13-your-framework-is-showing-nextjs-error.png\" alt=\"Your Framework is Showing — The one where I’ve had enough of the same Next.js error\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYour Framework is Showing\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I’ve had enough of the same Next.js error\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat breakdown of nextjs.  I was highly unaware of its _performance_ optimizations before reading this.  The smell of vendor lock in from next/vercel has been there from the start, this is the first real claim I've seen.  \n\nI'm out on modern js front ends, complex builds that change every 6 months, design patterns are out of date just as fast.  Its hard to keep up, especially when you don't have the use case for highly interactive apps.  Libraries like htmx or plain ol js gets the job done on the majority of sites and everything I tend to work on.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2025/06/13/your-framework-is-showing-nextjs-error/",
      "date_published": "2025-06-15T00:02:28Z",
      "date_modified": "2025-06-15T00:02:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-693/",
      "url": "https://go.waylonwalker.com/thought-693/",
      "title": "💭 I DONT KNOW WHY - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Se6HHCcy8q4\" title=\"I DONT KNOW WHY\" playlabel=\"Play: I DONT KNOW WHY\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m totally with Prime here, there is something about the read only, mouse clicking part of my brain that causes me to be more critical of the code at a different level.  It doesn’t hit the part of my brain thinking about the edit or how to do the edit, it hits a part thats thinking about how I will have to deal with the code moving forward.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Se6HHCcy8q4\" title=\"I DONT KNOW WHY\" playlabel=\"Play: I DONT KNOW WHY\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI'm totally with Prime here, there is something about the read only, mouse clicking part of my brain that causes me to be more critical of the code at a different level.  It doesn't hit the part of my brain thinking about the edit or how to do the edit, it hits a part thats thinking about how I will have to deal with the code moving forward.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/Se6HHCcy8q4",
      "date_published": "2025-06-14T22:44:34Z",
      "date_modified": "2025-06-14T22:44:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-692/",
      "url": "https://go.waylonwalker.com/thought-692/",
      "title": "💭 Next.js 15.1+ is unusable outside of Vercel | Omar Abid - Pers...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://omarabid.com/nextjs-vercel\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNext.js 15.1+ is unusable outside of Vercel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTBD\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eOmar Abid - Personal Blog · omarabid.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eVendor lock in disguised as performance.  Nextjs aparantly now streams all of your metadata on the fly with js.  This would obviously kill all seo right, well not if you’re on vercel they automatically detect search crawlers and serve the metadata.  Why the f do they need to do this and not just serve everyone the metadata.  The Web is this beautiful place where anyone can create and build amazing things with a relatively low skill.  Js is meant to be enhancement, not degrade the experience of its users.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://omarabid.com/nextjs-vercel\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNext.js 15.1+ is unusable outside of Vercel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTBD\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eOmar Abid - Personal Blog \u0026middot; omarabid.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nVendor lock in disguised as performance.  Nextjs aparantly now streams all of your metadata on the fly with js.  This would obviously kill all seo right, well not if you're on vercel they automatically detect search crawlers and serve the metadata.  Why the f do they need to do this and not just serve everyone the metadata.  The Web is this beautiful place where anyone can create and build amazing things with a relatively low skill.  Js is meant to be enhancement, not degrade the experience of its users.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://omarabid.com/nextjs-vercel",
      "date_published": "2025-06-14T18:10:58Z",
      "date_modified": "2025-06-14T18:10:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/using-yek/",
      "url": "https://go.waylonwalker.com/using-yek/",
      "title": "using yek to serialize text files into llm friendly file",
      "content_html": "\u003cp\u003eI’ve been using \u003ca href=\"https://gitingest.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gitingest.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gitingest.com.ico\" class=\"has-avatar  has-avatar-before\"\u003egitingest\u003c/a\u003e web ui [[ thoughts-516 ]]\nfor quite awhile to serialize \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo into llm friendly text files.  This\ngives tools context about repos that are not in the training data so that it\nknows about it and how to use the code in the repo.  gitingest also has a\npython library [[ thoughts-517 ]]\u003c/p\u003e\n\u003cp\u003eI had a use case for a project not yet on git, and found yek.\u003c/p\u003e\n\u003ch2 id=\"installing-yek\"\u003eInstalling yek \u003ca href=\"#installing-yek\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTheir instructions tell you to curl to bash.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -fsSL https://bodo.run/yek.sh \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI don’t like curl to bash from random sites, so I have my own \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\nversion of i.jpillora.com.  I like using this because it pulls from github and\nI trust github as a source for artifacts as good as the repo I am pulling\nfrom.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.jpillora.com/bodo-run/yek \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-yek\"\u003eUsing yek \u003ca href=\"#using-yek\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eyek\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003e/tmp/yek-output/yek-output-bb01e621.txt\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis will give you a link to a text file that you can add to many llm tools.\nThis happened so fast for me that I didn’t even believe that it worked\nproperly.\u003c/p\u003e\n\u003ch2 id=\"more-options\"\u003emore options \u003ca href=\"#more-options\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAs with most clis, you can run \u003ccode\u003eyek --help\u003c/code\u003e to see the options available.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eyek --help\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been using [gitingest](https://gitingest.com/) web ui [[ thoughts-516 ]]\nfor quite awhile to serialize git repo into llm friendly text files.  This\ngives tools context about repos that are not in the training data so that it\nknows about it and how to use the code in the repo.  gitingest also has a\npython library [[ thoughts-517 ]]\n\nI had a use case for a project not yet on git, and found yek.\n\n## Installing yek\n\nTheir instructions tell you to curl to bash.\n\n``` bash\ncurl -fsSL https://bodo.run/yek.sh | bash\n```\n\nI don't like curl to bash from random sites, so I have my own self hosted\nversion of i.jpillora.com.  I like using this because it pulls from github and\nI trust github as a source for artifacts as good as the repo I am pulling\nfrom.\n\n``` bash\ncurl https://i.jpillora.com/bodo-run/yek | bash\n```\n\n## Using yek\n\n``` bash\nyek\n```\n\n\u003e /tmp/yek-output/yek-output-bb01e621.txt\n\nThis will give you a link to a text file that you can add to many llm tools.\nThis happened so fast for me that I didn't even believe that it worked\nproperly.\n\n## more options\n\nAs with most clis, you can run `yek --help` to see the options available.\n\n``` bash\nyek --help\n```\n",
      "summary": "I've been using gitingest web ui thoughts-516 for quite awhile to serialize git repo into llm friendly text files. This gives tools context about repos that...",
      "date_published": "2025-06-11T11:01:34Z",
      "date_modified": "2025-06-11T11:01:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/brightnessctl-adjust-screen-brightness/",
      "url": "https://go.waylonwalker.com/brightnessctl-adjust-screen-brightness/",
      "title": "brightnessctl adjust screen brightness",
      "content_html": "\u003cp\u003eToday I discovered \u003ccode\u003ebrightnessctl\u003c/code\u003e to adjust the screen brightness on my\nAwesomeWM machine.  Its a command line utility that you can use to adjust the\nbrightness of your screen.  A command line interface like this gives you the\nability to bind keys with something like [[xbindkeys]] or your window manager\nconfiguration.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install brightnessctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S brightnessctl\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow that you have it installed you can use it to adjust the brightness of your\nscreen, this worked particularly well for my laptop screen, I don’t think this\nworks for monitors, in my experience they are usually controlled by the built\nin osd.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Increase brightness by 10%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrightnessctl \u003cspan class=\"nb\"\u003eset\u003c/span\u003e +10%\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Decrease brightness by 10%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrightnessctl \u003cspan class=\"nb\"\u003eset\u003c/span\u003e 10%-\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set brightness to 50%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrightnessctl \u003cspan class=\"nb\"\u003eset\u003c/span\u003e 50%\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set brightness to 100%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrightnessctl \u003cspan class=\"nb\"\u003eset\u003c/span\u003e 100%\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eon my machine I had to use `sudo` to run the command, otherwise I got the following error:\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCan\u003cspan class=\"err\"\u003e\u0026#39;\u003c/span\u003et modify brightness: Permission denied\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eYou should run this program with root privileges.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAlternatively, get write permissions \u003cspan class=\"k\"\u003efor\u003c/span\u003e device files.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n",
      "content_text": "\nToday I discovered `brightnessctl` to adjust the screen brightness on my\nAwesomeWM machine.  Its a command line utility that you can use to adjust the\nbrightness of your screen.  A command line interface like this gives you the\nability to bind keys with something like [[xbindkeys]] or your window manager\nconfiguration.\n\n\n``` bash\nsudo apt install brightnessctl\n# or \nparu -S brightnessctl\n```\n\nNow that you have it installed you can use it to adjust the brightness of your\nscreen, this worked particularly well for my laptop screen, I don't think this\nworks for monitors, in my experience they are usually controlled by the built\nin osd.\n\n``` bash\n# Increase brightness by 10%\nbrightnessctl set +10%\n# Decrease brightness by 10%\nbrightnessctl set 10%-\n# Set brightness to 50%\nbrightnessctl set 50%\n# Set brightness to 100%\nbrightnessctl set 100%\n```\n\n!!! note\n    on my machine I had to use `sudo` to run the command, otherwise I got the following error:\n\n    ``` bash\n    Can't modify brightness: Permission denied\n\n    You should run this program with root privileges.\n    Alternatively, get write permissions for device files.\n    ```\n",
      "summary": "Today I discovered to adjust the screen brightness on my AwesomeWM machine. Its a command line utility that you can use to adjust the brightness of your...",
      "date_published": "2025-06-11T08:42:36Z",
      "date_modified": "2025-06-11T08:42:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-684/",
      "url": "https://go.waylonwalker.com/thought-684/",
      "title": "💭 Think less, ship more",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/think-less/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/think-less.png\" alt=\"Think less, ship more — I do too much thinking about what I want to make, and not enough actually making the thing.\" loading=\"lazy\"/ data-glightbox=\"description: Think less, ship more — I do too much thinking about what I want to make, and not enough actually making the thing.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThink less, ship more\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI do too much thinking about what I want to make, and not enough actually making the thing.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI thin a lot of us have this issues, \u003cstrong\u003eespecially\u003c/strong\u003e on side projects.  At work therre are expectations, jira tickets and so on, keeping you shipping.  I think there is something to be said about getting that quick and dirty POC to the right group of people early for feedback before you add redis caching, kubernetes, auto scaling, disruption budget, distributed nodes, high availability, backups, disaster recovery.  At work you kinda  have to have the right person to shoot ideas by that can understand that you probably need some of these complex things for your app and it will take time to get right.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/think-less/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/think-less.png\" alt=\"Think less, ship more — I do too much thinking about what I want to make, and not enough actually making the thing.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThink less, ship more\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI do too much thinking about what I want to make, and not enough actually making the thing.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI thin a lot of us have this issues, **especially** on side projects.  At work therre are expectations, jira tickets and so on, keeping you shipping.  I think there is something to be said about getting that quick and dirty POC to the right group of people early for feedback before you add redis caching, kubernetes, auto scaling, disruption budget, distributed nodes, high availability, backups, disaster recovery.  At work you kinda  have to have the right person to shoot ideas by that can understand that you probably need some of these complex things for your app and it will take time to get right.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/think-less/",
      "date_published": "2025-06-10T13:02:28Z",
      "date_modified": "2025-06-10T13:02:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-683/",
      "url": "https://go.waylonwalker.com/thought-683/",
      "title": "💭 robinroy03/videoeditor: Video Editor Application using React, ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/robinroy03/videoeditor\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/988575614/c172efea-e6db-4922-b695-abaddc42b4c9\" alt=\"GitHub - trykimu/videoeditor: Your Creative Copilot for Video Editing — Your Creative Copilot for Video Editing. Contribute to trykimu/videoeditor development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - trykimu/videoeditor: Your Creative Copilot for Video Editing — Your Creative Copilot for Video Editing. Contribute to trykimu/videoeditor development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - trykimu/videoeditor: Your Creative Copilot for Video Editing\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYour Creative Copilot for Video Editing. Contribute to trykimu/videoeditor development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI would love to have a browser based video editor I could throw on a server and do quick edits from anywhere.  I tried to get this one to work and struggled to get front end to send api requets to backend.  I think the root of it was their redis wants to run on 80, this caused a permission error so I tried to run 8880:80, but redis was still unable to start due to a config permission error.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/robinroy03/videoeditor\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/988575614/c172efea-e6db-4922-b695-abaddc42b4c9\" alt=\"GitHub - trykimu/videoeditor: Your Creative Copilot for Video Editing — Your Creative Copilot for Video Editing. Contribute to trykimu/videoeditor development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - trykimu/videoeditor: Your Creative Copilot for Video Editing\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYour Creative Copilot for Video Editing. Contribute to trykimu/videoeditor development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI would love to have a browser based video editor I could throw on a server and do quick edits from anywhere.  I tried to get this one to work and struggled to get front end to send api requets to backend.  I think the root of it was their redis wants to run on 80, this caused a permission error so I tried to run 8880:80, but redis was still unable to start due to a config permission error.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/robinroy03/videoeditor",
      "date_published": "2025-06-10T02:31:25Z",
      "date_modified": "2025-06-10T02:31:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-host",
        "video-editor",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/trykimu-videoeditor/",
      "url": "https://go.waylonwalker.com/trykimu-videoeditor/",
      "title": "⭐ trykimu videoeditor",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/trykimu/videoeditor\" 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\"\u003evideoeditor\u003c/a\u003e from \u003ca href=\"https://github.com/trykimu\" 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\"\u003etrykimu\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eYour Creative Copilot for Video Editing\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [videoeditor](https://github.com/trykimu/videoeditor) from [trykimu](https://github.com/trykimu).\n\nYour Creative Copilot for Video Editing\n",
      "summary": "I'm impressed by videoeditor from trykimu.",
      "date_published": "2025-06-10T02:27:48Z",
      "date_modified": "2025-06-10T02:27:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/robinroy03-videoeditor/",
      "url": "https://go.waylonwalker.com/robinroy03-videoeditor/",
      "title": "⭐ robinroy03 videoeditor",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/robinroy03/videoeditor\" 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\"\u003evideoeditor\u003c/a\u003e, created by \u003ca href=\"https://github.com/robinroy03\" 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\"\u003erobinroy03\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eVideo Editor Application using React, Remotion \u0026amp; TypeScript.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [videoeditor](https://github.com/robinroy03/videoeditor), created by [robinroy03](https://github.com/robinroy03).\n\nVideo Editor Application using React, Remotion \u0026 TypeScript.\n",
      "summary": "If you're into interesting projects, don't miss out on videoeditor, created by robinroy03.",
      "date_published": "2025-06-10T02:27:48Z",
      "date_modified": "2025-06-10T02:27:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-681/",
      "url": "https://go.waylonwalker.com/thought-681/",
      "title": "💭 Taming file zoos: Data science with DuckDB database files - Al...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Yq-hxgysWLQ\" title=\"Taming file zoos: Data science with DuckDB database files - Alex Monahan\" playlabel=\"Play: Taming file zoos: Data science with DuckDB database files - Alex Monahan\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe ability to query s3 buckets so seamless looks like such a pleasure to work with if you have a use case for that.  Kedro catalog takes care of this most of the time for me, but I wonder if there are some cross project searching use cases I might find for this.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Yq-hxgysWLQ\" title=\"Taming file zoos: Data science with DuckDB database files - Alex Monahan\" playlabel=\"Play: Taming file zoos: Data science with DuckDB database files - Alex Monahan\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThe ability to query s3 buckets so seamless looks like such a pleasure to work with if you have a use case for that.  Kedro catalog takes care of this most of the time for me, but I wonder if there are some cross project searching use cases I might find for this.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=Yq-hxgysWLQ",
      "date_published": "2025-06-09T13:31:30Z",
      "date_modified": "2025-06-09T13:31:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-677/",
      "url": "https://go.waylonwalker.com/thought-677/",
      "title": "💭 PocketCal Build Log",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/pocketcal-build-log/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/pocketcal-build-log.png\" alt=\"PocketCal Build Log — I made a date-sharing app called PocketCal. Here\" loading=\"lazy\"/ data-glightbox=\"description: PocketCal Build Log — I made a date-sharing app called PocketCal. Here\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePocketCal Build Log\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI made a date-sharing app called PocketCal. Here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI love this idea of tiny useful apps for yourself.  In fact I’m working on a project to built out \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 for myself to replace my common needs.  I absolutely love that all of the state is stored in the url bar, nothing is stored server side.  As much as I love to hate js, I really appreciate that things like this can be built to just live on the web, be accessible from anywhere, and live practically forever as they require such little hosting demand.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/pocketcal-build-log/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/pocketcal-build-log.png\" alt=\"PocketCal Build Log — I made a date-sharing app called PocketCal. Here\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePocketCal Build Log\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI made a date-sharing app called PocketCal. Here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI love this idea of tiny useful apps for yourself.  In fact I'm working on a project to built out \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 for myself to replace my common needs.  I absolutely love that all of the state is stored in the url bar, nothing is stored server side.  As much as I love to hate js, I really appreciate that things like this can be built to just live on the web, be accessible from anywhere, and live practically forever as they require such little hosting demand.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/pocketcal-build-log/",
      "date_published": "2025-06-08T00:29:14Z",
      "date_modified": "2025-06-08T00:29:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-675/",
      "url": "https://go.waylonwalker.com/thought-675/",
      "title": "💭 numtide/treefmt: one CLI to format your repo [maintainers=@zim...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/numtide/treefmt\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/672364d29c9b877bd37200e0e0d95582a4c6dba723f023abe60f83a0ab39ed72/numtide/treefmt\" alt=\"GitHub - numtide/treefmt: the formatter multiplexer [maintainers=@zimbatm,@brianmcgee] — the formatter multiplexer [maintainers=@zimbatm,@brianmcgee] - numtide/treefmt\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - numtide/treefmt: the formatter multiplexer [maintainers=@zimbatm,@brianmcgee] — the formatter multiplexer [maintainers=@zimbatm,@brianmcgee] - numtide/treefmt\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - numtide/treefmt: the formatter multiplexer [maintainers=@zimbatm,@brianmcgee]\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ethe formatter multiplexer [maintainers=@zimbatm,@brianmcgee] - numtide/treefmt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis looks like a very useful formatting tool to keep in the back of my mind.  I do a lot of python and our tool tends to be pre-commit, named after the \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e hook pre-commit.  It specifies a bunch of tools to run, you can run them in ci, manually, and opt into doing it before commit.  I like the simplicity of this one not needing a whole ecosystem, but rather just leveraging the cli commands from those tools.  This would probably be something that would get in the way of setup for new devs and not something I would throw on one project by itself, its another thing for everyone to figure out how to install and run on every platform, I’m sure its not hard, but being on python teams pre-commit just fits in.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/numtide/treefmt\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/672364d29c9b877bd37200e0e0d95582a4c6dba723f023abe60f83a0ab39ed72/numtide/treefmt\" alt=\"GitHub - numtide/treefmt: the formatter multiplexer [maintainers=@zimbatm,@brianmcgee] — the formatter multiplexer [maintainers=@zimbatm,@brianmcgee] - numtide/treefmt\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - numtide/treefmt: the formatter multiplexer [maintainers=@zimbatm,@brianmcgee]\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ethe formatter multiplexer [maintainers=@zimbatm,@brianmcgee] - numtide/treefmt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis looks like a very useful formatting tool to keep in the back of my mind.  I do a lot of python and our tool tends to be pre-commit, named after the git hook pre-commit.  It specifies a bunch of tools to run, you can run them in ci, manually, and opt into doing it before commit.  I like the simplicity of this one not needing a whole ecosystem, but rather just leveraging the cli commands from those tools.  This would probably be something that would get in the way of setup for new devs and not something I would throw on one project by itself, its another thing for everyone to figure out how to install and run on every platform, I'm sure its not hard, but being on python teams pre-commit just fits in.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/numtide/treefmt",
      "date_published": "2025-06-08T00:20:41Z",
      "date_modified": "2025-06-08T00:20:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-674/",
      "url": "https://go.waylonwalker.com/thought-674/",
      "title": "💭 Keynote Speaker - Cory Doctorow - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ydVmzg_SJLw\" title=\"Keynote Speaker - Cory Doctorow\" playlabel=\"Play: Keynote Speaker - Cory Doctorow\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is one of the greatest pycon keynotes I’ve ever seen, bookmarking this to come back and leave better thoughts on later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ydVmzg_SJLw\" title=\"Keynote Speaker - Cory Doctorow\" playlabel=\"Play: Keynote Speaker - Cory Doctorow\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is one of the greatest pycon keynotes I've ever seen, bookmarking this to come back and leave better thoughts on later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ydVmzg_SJLw",
      "date_published": "2025-06-07T23:00:50Z",
      "date_modified": "2025-06-07T23:00:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-673/",
      "url": "https://go.waylonwalker.com/thought-673/",
      "title": "💭 Dopamine Driven Development - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"AWZ9AgjPfwo\" title=\"Dopamine Driven Development\" playlabel=\"Play: Dopamine Driven Development\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eFocus on the joy, not the suck.  Nothing you do in life will be absolute pure joy with no downsides forever, life does not work that way, your brain does not look that way.  Look at anyone who ever got massive billion dollar payouts for something like minecraft and how much their life is not glorious when they have nothing to really look forward to.\u003c/p\u003e\n\u003cp\u003ePrime talks about it in almost a cliche way, every boring ass task is an opportunity to grow.  This is so real though, if you look at every task ask a shit you gotta do to check that jira ticket off and make bossy lady not scream at you its going to be a hell.  If you rather look at it as opportunities to implement new features in new ways or learn something to better yourself and watch yourself grow you are going to take a big dopamine hit.  I think prime talks about this in the sense of larger projects.  He as talked about his experience being much less of a daily standup, but more of a ok we got three months to figure this out lets go boys.  When you are stuck in that daily jira grind it’s harder to see that larger picture of the learning and growing you are doing over the course of 3 or 6 months.\u003c/p\u003e\n\u003cp\u003eTimestamped to the part of the video that really dives into gratitude and finding the joy in the work that you have to do on purpose, but the whole vid is fire.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"AWZ9AgjPfwo\" title=\"Dopamine Driven Development\" playlabel=\"Play: Dopamine Driven Development\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nFocus on the joy, not the suck.  Nothing you do in life will be absolute pure joy with no downsides forever, life does not work that way, your brain does not look that way.  Look at anyone who ever got massive billion dollar payouts for something like minecraft and how much their life is not glorious when they have nothing to really look forward to.\n\nPrime talks about it in almost a cliche way, every boring ass task is an opportunity to grow.  This is so real though, if you look at every task ask a shit you gotta do to check that jira ticket off and make bossy lady not scream at you its going to be a hell.  If you rather look at it as opportunities to implement new features in new ways or learn something to better yourself and watch yourself grow you are going to take a big dopamine hit.  I think prime talks about this in the sense of larger projects.  He as talked about his experience being much less of a daily standup, but more of a ok we got three months to figure this out lets go boys.  When you are stuck in that daily jira grind it's harder to see that larger picture of the learning and growing you are doing over the course of 3 or 6 months.\n\nTimestamped to the part of the video that really dives into gratitude and finding the joy in the work that you have to do on purpose, but the whole vid is fire.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=AWZ9AgjPfwo\u0026t=654s",
      "date_published": "2025-06-07T22:59:04Z",
      "date_modified": "2025-06-07T22:59:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-672/",
      "url": "https://go.waylonwalker.com/thought-672/",
      "title": "💭 DHH IS RIGHT ABOUT EVERYTHING (Again)? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"EIBxRMH4bvs\" title=\"DHH IS RIGHT ABOUT EVERYTHING (Again)?\" playlabel=\"Play: DHH IS RIGHT ABOUT EVERYTHING (Again)?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eShould I go to college?  Was my education worth it? Should I keep going.  A question that comes in all too often accross most industries that require some level of education.  DHH has such great takes on it, some I had never fully thought about.  He starts out with should we have people study niche topics (using Russian Poetry as an example).  Yes the world deserves people who can make their life works out of something that brings them and many other so much joy, but no you probably shouldn’t go 100k’s into debt to do it.  Should I get a software engineering degree, or become a doctor also have similar answers, it needs to be somewhat justified and not outrageous as has become the norm.\u003c/p\u003e\n\u003cp\u003eWe used to listen in to Dave Ramsey on long car rides and he would have people call in and say, they went half a million dollars into debt to become a dentist, only to discover they did not want to do dentistry.  At this point it’s too bad, you gotta suck it up and pay that off with something that makes some serious cash, and the only skill you probably got that can bring in that level of cash is … dentistry.\u003c/p\u003e\n\u003cp\u003eThey dive into the college experience, learning to have adult debates with classmates about which direction a project should go or how to complete it.  Great stuff!\u003c/p\u003e\n\u003cp\u003eSomething I had never put thoughts to is how do you feel when class is cancelled or an assignment is removed.  Are you excited to “not have to do it”?  I’d bet that most people do.  That’s probably a good sign that you are there for the wrong reasons.  What other industry do you pay a f*** ton of money for a product and be like nah ill just take the receipt, you keep the thing.\u003c/p\u003e\n\u003cp\u003eThis all just gets your foot in the door.  If you spent none of that time learning it will become apparent really fast and you will not climb the ladder.  Yes climbing the corp ladder is cliche, but at some point you probably want paid more and get opportunity to make more decisions.  And if it turns out you really suck, you’re going to find yourself looking for a new job with no skill and a big pile of student debt sitting behind you.\u003c/p\u003e\n\u003cp\u003eStudent debt is probably one of the biggest issues of our generation that only appears to be getting worse, everything signals your need to go to college, presige is important.  It feels like the other side is filled with glory lots of money and you will have all that debt paid off in no time.  I get it when you’re 18 and you see 50k or 100k in student debt, but 80k or 150k salaries on the other side its like damn I make nothing right now I’ll have that paid off in no time.  Then you get out and realize everything costs serious money, housing, kids, cars, broken AC units, and you cant pay off 50k in a year and a half making 80k.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"EIBxRMH4bvs\" title=\"DHH IS RIGHT ABOUT EVERYTHING (Again)?\" playlabel=\"Play: DHH IS RIGHT ABOUT EVERYTHING (Again)?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nShould I go to college?  Was my education worth it? Should I keep going.  A question that comes in all too often accross most industries that require some level of education.  DHH has such great takes on it, some I had never fully thought about.  He starts out with should we have people study niche topics (using Russian Poetry as an example).  Yes the world deserves people who can make their life works out of something that brings them and many other so much joy, but no you probably shouldn't go 100k's into debt to do it.  Should I get a software engineering degree, or become a doctor also have similar answers, it needs to be somewhat justified and not outrageous as has become the norm.\n\nWe used to listen in to Dave Ramsey on long car rides and he would have people call in and say, they went half a million dollars into debt to become a dentist, only to discover they did not want to do dentistry.  At this point it's too bad, you gotta suck it up and pay that off with something that makes some serious cash, and the only skill you probably got that can bring in that level of cash is ... dentistry.\n\nThey dive into the college experience, learning to have adult debates with classmates about which direction a project should go or how to complete it.  Great stuff!\n\nSomething I had never put thoughts to is how do you feel when class is cancelled or an assignment is removed.  Are you excited to \"not have to do it\"?  I'd bet that most people do.  That's probably a good sign that you are there for the wrong reasons.  What other industry do you pay a f*** ton of money for a product and be like nah ill just take the receipt, you keep the thing.\n\nThis all just gets your foot in the door.  If you spent none of that time learning it will become apparent really fast and you will not climb the ladder.  Yes climbing the corp ladder is cliche, but at some point you probably want paid more and get opportunity to make more decisions.  And if it turns out you really suck, you're going to find yourself looking for a new job with no skill and a big pile of student debt sitting behind you.\n\nStudent debt is probably one of the biggest issues of our generation that only appears to be getting worse, everything signals your need to go to college, presige is important.  It feels like the other side is filled with glory lots of money and you will have all that debt paid off in no time.  I get it when you're 18 and you see 50k or 100k in student debt, but 80k or 150k salaries on the other side its like damn I make nothing right now I'll have that paid off in no time.  Then you get out and realize everything costs serious money, housing, kids, cars, broken AC units, and you cant pay off 50k in a year and a half making 80k.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=EIBxRMH4bvs",
      "date_published": "2025-06-07T22:49:47Z",
      "date_modified": "2025-06-07T22:49:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-671/",
      "url": "https://go.waylonwalker.com/thought-671/",
      "title": "💭 WebTUI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://webtui.ironclad.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://webtui.ironclad.sh/cover.png\" alt=\"WebTUI — Modular CSS Library that brings the beauty of Terminal UIs to the browser\" loading=\"lazy\"/ data-glightbox=\"description: WebTUI — Modular CSS Library that brings the beauty of Terminal UIs to the browser\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWebTUI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eModular CSS Library that brings the beauty of Terminal UIs to the browser\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewebtui.ironclad.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ewebtui, looks like a pretty sick design aesthetic.  I like the keyboard driven nature of it, the look and feel is on point to a terminal interface, sadly it looks like it is not a 2 way street, you don’t automatically get a tui our of your website, just one that looks the part in the browser.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://webtui.ironclad.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://webtui.ironclad.sh/cover.png\" alt=\"WebTUI — Modular CSS Library that brings the beauty of Terminal UIs to the browser\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWebTUI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eModular CSS Library that brings the beauty of Terminal UIs to the browser\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewebtui.ironclad.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nwebtui, looks like a pretty sick design aesthetic.  I like the keyboard driven nature of it, the look and feel is on point to a terminal interface, sadly it looks like it is not a 2 way street, you don't automatically get a tui our of your website, just one that looks the part in the browser.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://webtui.ironclad.sh/",
      "date_published": "2025-06-07T22:32:42Z",
      "date_modified": "2025-06-07T22:32:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-668/",
      "url": "https://go.waylonwalker.com/thought-668/",
      "title": "💭 Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bAmJQuX4-ak\" title=\"Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me?\" playlabel=\"Play: Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve never heard of niri, or a scrolling window manager, it looks quite interesting.  I think tiling window manager misses out on named sessions and hotkey straight to tmux sessions, Brodi mentions not using tmux right before this segment.  Niri looks quite interesting, but looks like it suffers specificity.  maybe there are other tools that allow me to jump straight to something like brave, or steam, but I don’t see how I could jump to a specific terminal.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"bAmJQuX4-ak\" title=\"Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me?\" playlabel=\"Play: Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI've never heard of niri, or a scrolling window manager, it looks quite interesting.  I think tiling window manager misses out on named sessions and hotkey straight to tmux sessions, Brodi mentions not using tmux right before this segment.  Niri looks quite interesting, but looks like it suffers specificity.  maybe there are other tools that allow me to jump straight to something like brave, or steam, but I don't see how I could jump to a specific terminal.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=bAmJQuX4-ak\u0026t=1684s",
      "date_published": "2025-06-07T01:05:25Z",
      "date_modified": "2025-06-07T01:05:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/niri-wm-niri/",
      "url": "https://go.waylonwalker.com/niri-wm-niri/",
      "title": "⭐ niri-wm niri",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/niri-wm/niri\" 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\"\u003eniri\u003c/a\u003e by \u003ca href=\"https://github.com/niri-wm\" 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\"\u003eniri-wm\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA scrollable-tiling Wayland compositor.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [niri](https://github.com/niri-wm/niri) by [niri-wm](https://github.com/niri-wm), and it's truly impressive.\n\nA scrollable-tiling Wayland compositor.\n",
      "summary": "I recently discovered niri by niri-wm, and it's truly impressive.",
      "date_published": "2025-06-07T01:03:02Z",
      "date_modified": "2025-06-07T01:03:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yalter-niri/",
      "url": "https://go.waylonwalker.com/yalter-niri/",
      "title": "⭐ YaLTeR niri",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/YaLTeR/niri\" 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\"\u003eniri\u003c/a\u003e from \u003ca href=\"https://github.com/YaLTeR\" 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\"\u003eYaLTeR\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA scrollable-tiling Wayland compositor.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [niri](https://github.com/YaLTeR/niri) from [YaLTeR](https://github.com/YaLTeR).\n\nA scrollable-tiling Wayland compositor.\n",
      "summary": "I'm impressed by niri from YaLTeR.",
      "date_published": "2025-06-07T01:03:02Z",
      "date_modified": "2025-06-07T01:03:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-667/",
      "url": "https://go.waylonwalker.com/thought-667/",
      "title": "💭 Backups interrupted by full disk usage",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/backups-interrupted-by-full-disk-usage/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"Backups interrupted by full disk usage | Nic Payne — I just got a message from HCIO that my primary backup script is late... This\nhappens every now and then but I decided to check on it... Quickly `ssh` in and\nI n\" loading=\"lazy\"/ data-glightbox=\"description: Backups interrupted by full disk usage | Nic Payne — I just got a message from HCIO that my primary backup script is late... This\nhappens every now and then but I decided to check on it... Quickly `ssh` in and\nI n\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackups interrupted by full disk usage | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI just got a message from HCIO that my primary backup script is late... This\nhappens every now and then but I decided to check on it... Quickly `ssh` in and\nI n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m way behind on my notification game and need to pick it up. maybe I’ll look into hcio as well.  maybe I’ll look into something that goes straight to signal or just get things working on ntfy.   An 80GB log file is massive and the kind of thing id like to see notifications more.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/backups-interrupted-by-full-disk-usage/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"Backups interrupted by full disk usage | Nic Payne — I just got a message from HCIO that my primary backup script is late... This\nhappens every now and then but I decided to check on it... Quickly `ssh` in and\nI n\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackups interrupted by full disk usage | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI just got a message from HCIO that my primary backup script is late... This\nhappens every now and then but I decided to check on it... Quickly `ssh` in and\nI n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm way behind on my notification game and need to pick it up. maybe I'll look into hcio as well.  maybe I'll look into something that goes straight to signal or just get things working on ntfy.   An 80GB log file is massive and the kind of thing id like to see notifications more.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/backups-interrupted-by-full-disk-usage/",
      "date_published": "2025-06-06T15:53:41Z",
      "date_modified": "2025-06-06T15:53:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "self-host",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-666/",
      "url": "https://go.waylonwalker.com/thought-666/",
      "title": "💭 Queso Notes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/queso-notes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"Queso Notes | Nic Payne — It occured to me that this is my blog... I can write about whatever the heck I want! May 2025 Made 2 quesos very similar - they consisted of: 1.5 lbs ground bee\" loading=\"lazy\"/ data-glightbox=\"description: Queso Notes | Nic Payne — It occured to me that this is my blog... I can write about whatever the heck I want! May 2025 Made 2 quesos very similar - they consisted of: 1.5 lbs ground bee\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQueso Notes | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIt occured to me that this is my blog... I can write about whatever the heck I want! May 2025 Made 2 quesos very similar - they consisted of: 1.5 lbs ground bee\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTaking this as inspiration to do more non-tech on my blog, I’ve branched out into \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;\"\u003ePosts tagged: gaming\u003c/a\u003e, but need take it to the next step.  excited to watch \u003ca href=\"pype.dev\"\u003epype.dev\u003c/a\u003e evolve as well.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/queso-notes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"Queso Notes | Nic Payne — It occured to me that this is my blog... I can write about whatever the heck I want! May 2025 Made 2 quesos very similar - they consisted of: 1.5 lbs ground bee\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQueso Notes | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIt occured to me that this is my blog... I can write about whatever the heck I want! May 2025 Made 2 quesos very similar - they consisted of: 1.5 lbs ground bee\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTaking this as inspiration to do more non-tech on my blog, I've branched out into \u003ca href=\"/tags/gaming/\" class=\"wikilink\" data-title=\"Posts tagged: gaming\" data-description=\"All posts with the tag \u0026#34;gaming\u0026#34;\"\u003ePosts tagged: gaming\u003c/a\u003e, but need take it to the next step.  excited to watch [pype.dev](pype.dev) evolve as well.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/queso-notes/",
      "date_published": "2025-06-06T15:50:43Z",
      "date_modified": "2025-06-06T15:50:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zk-org-zk/",
      "url": "https://go.waylonwalker.com/zk-org-zk/",
      "title": "⭐ zk-org zk",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/zk-org/zk\" 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\"\u003ezk\u003c/a\u003e by \u003ca href=\"https://github.com/zk-org\" 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\"\u003ezk-org\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA plain text note-taking assistant\u003c/p\u003e\n",
      "content_text": "\n[zk](https://github.com/zk-org/zk) by [zk-org](https://github.com/zk-org) is a game-changer in its space. Excited to see how it evolves.\n\nA plain text note-taking assistant\n",
      "summary": "zk by zk-org is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-06-06T01:22:44Z",
      "date_modified": "2025-06-06T01:22:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/get-alex-alex/",
      "url": "https://go.waylonwalker.com/get-alex-alex/",
      "title": "⭐ get-alex alex",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/get-alex/alex\" 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\"\u003ealex\u003c/a\u003e, created by \u003ca href=\"https://github.com/get-alex\" 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\"\u003eget-alex\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCatch insensitive, inconsiderate writing\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [alex](https://github.com/get-alex/alex), created by [get-alex](https://github.com/get-alex).\n\nCatch insensitive, inconsiderate writing\n",
      "summary": "If you're into interesting projects, don't miss out on alex, created by get-alex.",
      "date_published": "2025-06-06T01:18:53Z",
      "date_modified": "2025-06-06T01:18:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lukas-reineke-cbfmt/",
      "url": "https://go.waylonwalker.com/lukas-reineke-cbfmt/",
      "title": "⭐ lukas-reineke cbfmt",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/lukas-reineke/cbfmt\" 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\"\u003ecbfmt\u003c/a\u003e by \u003ca href=\"https://github.com/lukas-reineke\" 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\"\u003elukas-reineke\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA tool to format codeblocks inside markdown and org documents.\u003c/p\u003e\n",
      "content_text": "\nThe work on [cbfmt](https://github.com/lukas-reineke/cbfmt) by [lukas-reineke](https://github.com/lukas-reineke).\n\nA tool to format codeblocks inside markdown and org documents.\n",
      "summary": "The work on cbfmt by lukas-reineke.",
      "date_published": "2025-06-06T01:18:47Z",
      "date_modified": "2025-06-06T01:18:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/feel-ix-343-markdown-oxide/",
      "url": "https://go.waylonwalker.com/feel-ix-343-markdown-oxide/",
      "title": "⭐ Feel-ix-343 markdown-oxide",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Feel-ix-343\" 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\"\u003eFeel-ix-343\u003c/a\u003e and their project \u003ca href=\"https://github.com/Feel-ix-343/markdown-oxide\" 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\"\u003emarkdown-oxide\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePKM Markdown Language Server\u003c/p\u003e\n",
      "content_text": "\nCheck out [Feel-ix-343](https://github.com/Feel-ix-343) and their project [markdown-oxide](https://github.com/Feel-ix-343/markdown-oxide).\n\nPKM Markdown Language Server\n",
      "summary": "Check out Feel-ix-343 and their project markdown-oxide.",
      "date_published": "2025-06-06T01:18:37Z",
      "date_modified": "2025-06-06T01:18:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hougesen-mdsf/",
      "url": "https://go.waylonwalker.com/hougesen-mdsf/",
      "title": "⭐ hougesen mdsf",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/hougesen\" 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\"\u003ehougesen’s\u003c/a\u003e project \u003ca href=\"https://github.com/hougesen/mdsf\" 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\"\u003emdsf\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFormat markdown code blocks using your favorite tools\u003c/p\u003e\n",
      "content_text": "\nI like [hougesen's](https://github.com/hougesen) project [mdsf](https://github.com/hougesen/mdsf).\n\nFormat markdown code blocks using your favorite tools\n",
      "summary": "I like hougesen's project mdsf.",
      "date_published": "2025-06-06T01:18:28Z",
      "date_modified": "2025-06-06T01:18:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/numtide-treefmt/",
      "url": "https://go.waylonwalker.com/numtide-treefmt/",
      "title": "⭐ numtide treefmt",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/numtide/treefmt\" 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\"\u003etreefmt\u003c/a\u003e by \u003ca href=\"https://github.com/numtide\" 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\"\u003enumtide\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eone CLI to format your repo [maintainers=@zimbatm,@brianmcgee]\u003c/p\u003e\n",
      "content_text": "\nThe work on [treefmt](https://github.com/numtide/treefmt) by [numtide](https://github.com/numtide).\n\none CLI to format your repo [maintainers=@zimbatm,@brianmcgee]\n",
      "summary": "The work on treefmt by numtide.",
      "date_published": "2025-06-06T01:18:23Z",
      "date_modified": "2025-06-06T01:18:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rich-theme/",
      "url": "https://go.waylonwalker.com/rich-theme/",
      "title": "rich theme",
      "content_html": "\u003cp\u003eThe rich console is themeable, I’ve been a long time user of rich and had no\nIdea.  You can define your own theme keywords and use them just like you use\nnormal rich keywords in square brackets like\u003ccode\u003e\u0026#39;[bold red]\u0026#39;\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.console\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.theme\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eTheme\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecustom_theme\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTheme\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;info\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;dim cyan\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;warning\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;magenta\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;danger\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;bold red\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etheme\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ecustom_theme\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;This is information\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;info\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[warning]The pod bay doors are locked[/warning]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Something terrible happened!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;danger\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThe rich console is themeable, I've been a long time user of rich and had no\nIdea.  You can define your own theme keywords and use them just like you use\nnormal rich keywords in square brackets like`'[bold red]'`.\n\n``` python\nfrom rich.console import Console\nfrom rich.theme import Theme\ncustom_theme = Theme({\n    \"info\": \"dim cyan\",\n    \"warning\": \"magenta\",\n    \"danger\": \"bold red\"\n})\nconsole = Console(theme=custom_theme)\nconsole.print(\"This is information\", style=\"info\")\nconsole.print(\"[warning]The pod bay doors are locked[/warning]\")\nconsole.print(\"Something terrible happened!\", style=\"danger\")\n```\n",
      "summary": "The rich console is themeable, I've been a long time user of rich and had no Idea. You can define your own theme keywords and use them just like you use...",
      "date_published": "2025-06-05T20:37:10Z",
      "date_modified": "2025-06-05T20:37:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-665/",
      "url": "https://go.waylonwalker.com/thought-665/",
      "title": "💭 The ethics of README ads – Will McGugan – Will McGugan's essays",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willmcgugan.github.io/the-ethics-of-readme-ads/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://willmcgugan.github.io/images/will2025.jpeg\" alt=\"The ethics of README ads — I’ve been considering accepting sponsorship again for my projects.\" loading=\"lazy\"/ data-glightbox=\"description: The ethics of README ads — I’ve been considering accepting sponsorship again for my projects.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe ethics of README ads\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’ve been considering accepting sponsorship again for my projects.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWill McGugan · willmcgugan.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve long avoided running ads on my blog for the same reason.  For a few months I ran an ad above the fold.  It was a “Your Ad Here” kind of thing, and in the messaging I was looking for content relevant to my content, not google driven ads. This resulted in nothing, no hits, not a one.  I’m kinda with Will on this one beer money is not worth degrading the project for.  I seriously thought some of the big projects with a moderate level of success got a good cut for these sponsorships.  Some of the companies are big companies, like how do they even go through meetings and decide who gets beer money without spending more than that in decision making resources.  Maybe they have a guy with more autonomy than I would expect.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willmcgugan.github.io/the-ethics-of-readme-ads/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://willmcgugan.github.io/images/will2025.jpeg\" alt=\"The ethics of README ads — I’ve been considering accepting sponsorship again for my projects.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe ethics of README ads\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’ve been considering accepting sponsorship again for my projects.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWill McGugan \u0026middot; willmcgugan.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've long avoided running ads on my blog for the same reason.  For a few months I ran an ad above the fold.  It was a \"Your Ad Here\" kind of thing, and in the messaging I was looking for content relevant to my content, not google driven ads. This resulted in nothing, no hits, not a one.  I'm kinda with Will on this one beer money is not worth degrading the project for.  I seriously thought some of the big projects with a moderate level of success got a good cut for these sponsorships.  Some of the companies are big companies, like how do they even go through meetings and decide who gets beer money without spending more than that in decision making resources.  Maybe they have a guy with more autonomy than I would expect.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://willmcgugan.github.io/the-ethics-of-readme-ads/",
      "date_published": "2025-06-05T14:49:09Z",
      "date_modified": "2025-06-05T14:49:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "oss",
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-664/",
      "url": "https://go.waylonwalker.com/thought-664/",
      "title": "💭 minio/minio Tags | Docker Hub",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hub.docker.com/r/minio/minio/tags?name=RELEASE.2025-04-08\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hub.docker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hub.docker.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eminio/minio - Docker Image\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehub.docker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBrowsing for the minio tag that I have running right now I discovered that you can do \u003ccode\u003eminio --version\u003c/code\u003e and you get the same version that matches the docker tag, this is super convenient and helpful.  I also notice that they use timestamped version numbers.  I kinda dont mind this.  It feels easy to understand how far behind it is. I really appreciate that the version in the container matches the version inside the container.\u003c/p\u003e\n\u003cp\u003eIt’s not as pretty or flexible as semver, it does not communicate trees of majors and minors, but how often do we continue supporting/patching older majors and minors, in my experience only really big teams or teams with sufficient motivation are doing this.\u003c/p\u003e\n\u003cp\u003efood for thought.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hub.docker.com/r/minio/minio/tags?name=RELEASE.2025-04-08\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eminio/minio - Docker Image\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehub.docker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBrowsing for the minio tag that I have running right now I discovered that you can do `minio --version` and you get the same version that matches the docker tag, this is super convenient and helpful.  I also notice that they use timestamped version numbers.  I kinda dont mind this.  It feels easy to understand how far behind it is. I really appreciate that the version in the container matches the version inside the container.\n\nIt's not as pretty or flexible as semver, it does not communicate trees of majors and minors, but how often do we continue supporting/patching older majors and minors, in my experience only really big teams or teams with sufficient motivation are doing this. \n\nfood for thought.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hub.docker.com/r/minio/minio/tags?name=RELEASE.2025-04-08",
      "date_published": "2025-06-04T13:58:40Z",
      "date_modified": "2025-06-04T13:58:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "versioning",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/unset-multiple-environment-variables/",
      "url": "https://go.waylonwalker.com/unset-multiple-environment-variables/",
      "title": "unset multiple environment variables",
      "content_html": "\u003cp\u003eYou can unset multiple environment variables at once. I did not know this was a\nthing, its something that ended up happening organically on a call and asking\nsomeone to run \u003ccode\u003eunset\u003c/code\u003e.  They had never done it before and did not know how it\nworks, but did exactly as I said instead of what I meant.  I like this handy\nshortcut doing it in one line rather than each one individually, I will be\nusing this in the future. You might need this for something like\n\u003ca href=\"/running-aws-cli-commands-with-localstack/\" class=\"wikilink\" data-title=\"running aws cli commands with localstack\" data-description=\"Upon first running an cli command using localstack you might end up with the following error.\" data-date=\"2022-10-17\" data-preview=\"Upon first running an cli command using localstack you might end up with the following error.\"\u003erunning aws cli commands with localstack\u003c/a\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eunset\u003c/span\u003e AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\nYou can unset multiple environment variables at once. I did not know this was a\nthing, its something that ended up happening organically on a call and asking\nsomeone to run `unset`.  They had never done it before and did not know how it\nworks, but did exactly as I said instead of what I meant.  I like this handy\nshortcut doing it in one line rather than each one individually, I will be\nusing this in the future. You might need this for something like\n\u003ca href=\"/running-aws-cli-commands-with-localstack/\" class=\"wikilink\" data-title=\"running aws cli commands with localstack\" data-description=\"Upon first running an cli command using localstack you might end up with the following error.\" data-date=\"2022-10-17\"\u003erunning aws cli commands with localstack\u003c/a\u003e.\n\n``` bash\nunset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION\n```\n",
      "summary": "You can unset multiple environment variables at once. I did not know this was a thing, its something that ended up happening organically on a call and asking...",
      "date_published": "2025-06-03T11:21:11Z",
      "date_modified": "2025-06-03T11:21:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-663/",
      "url": "https://go.waylonwalker.com/thought-663/",
      "title": "💭 The 1-3-1 Writing Technique",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"SIKo2lCzfhE\" title=\"The 1-3-1 Writing Technique\" playlabel=\"Play: The 1-3-1 Writing Technique\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI am going to start trying to employ this rhythm to my writing.  I’m not very sure how I feel about it, there is something almost too assertive about it.  It’s giving me a (i’m great and you should too) kind of vibe.   I want to become more assertive in my writing.\u003c/p\u003e\n\u003cp\u003eI’m giving this a shot and see what I learn, you might notice in my tils.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"SIKo2lCzfhE\" title=\"The 1-3-1 Writing Technique\" playlabel=\"Play: The 1-3-1 Writing Technique\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI am going to start trying to employ this rhythm to my writing.  I'm not very sure how I feel about it, there is something almost too assertive about it.  It's giving me a (i'm great and you should too) kind of vibe.   I want to become more assertive in my writing.\n\nI'm giving this a shot and see what I learn, you might notice in my tils.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/SIKo2lCzfhE",
      "date_published": "2025-06-02T20:07:09Z",
      "date_modified": "2025-06-02T20:07:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "writing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/i3lock-on-awesomewm/",
      "url": "https://go.waylonwalker.com/i3lock-on-awesomewm/",
      "title": "i3lock on AwesomeWM",
      "content_html": "\u003cp\u003e\u003ccode\u003ei3lock\u003c/code\u003e is a fantastic lockscreen for tiling window managers.\u003c/p\u003e\n\u003cp\u003eIf you are using a tiling window manager within a public space you need to add\na lockscreen.  I have one machine that I take with me to a public space.  Its\nsecure enough that I can leave it, but not secure enough that I want to leave\nit unlocked.  So when I need to leave it behind for the restroom I need to lock\nit up.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://man.archlinux.org/man/extra/i3lock/i3lock.1.en\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/man.archlinux.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/man.archlinux.org.ico\" class=\"has-avatar  has-avatar-before\"\u003earch wiki\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S i3lock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt install i3lock\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow that you have \u003ccode\u003ei3lock\u003c/code\u003e installed lets lock that screen.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# lock it with a pure white flashbang\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei3lock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# lock it with a black background\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei3lock -c \u003cspan class=\"m\"\u003e000000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# lock it with a custom color\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei3lock -c 2e1330\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# lock it with a wallpaper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei3lock -c \u003cspan class=\"m\"\u003e000000\u003c/span\u003e ~/Pictures/Wallpapers/mywallpaper.png\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can use your window manager or something more generic like xbindkeys to set\na hotkey. This way you don’t have to open a terminal and type out the command\nevery time you leave your desk.  You can just press something like \u003ccode\u003eSUPER+L\u003c/code\u003e\nlike you would on other OS’s.\u003c/p\u003e\n\u003ch2 id=\"fancy\"\u003eFancy \u003ca href=\"#fancy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you like it a bit fancier, you can use \u003ccode\u003ei3lock-fancy\u003c/code\u003e, it can blur,\npixelate, and greyscale your current screen.  I did not really like this\nbecause you can still tell what is going on the screen.  It’s probably secure\nenough and looks better, but I went with regular \u003ccode\u003ei3lock\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S i3lock-fancy-git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt install i3lock-fancy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n`i3lock` is a fantastic lockscreen for tiling window managers.\n\nIf you are using a tiling window manager within a public space you need to add\na lockscreen.  I have one machine that I take with me to a public space.  Its\nsecure enough that I can leave it, but not secure enough that I want to leave\nit unlocked.  So when I need to leave it behind for the restroom I need to lock\nit up.\n\n[arch wiki](https://man.archlinux.org/man/extra/i3lock/i3lock.1.en)\n\n``` bash\nparu -S i3lock\n# or\napt install i3lock\n```\n\nNow that you have `i3lock` installed lets lock that screen.\n\n``` bash\n# lock it with a pure white flashbang\ni3lock\n\n# lock it with a black background\ni3lock -c 000000\n\n# lock it with a custom color\ni3lock -c 2e1330\n\n# lock it with a wallpaper\ni3lock -c 000000 ~/Pictures/Wallpapers/mywallpaper.png\n```\n\nYou can use your window manager or something more generic like xbindkeys to set\na hotkey. This way you don't have to open a terminal and type out the command\nevery time you leave your desk.  You can just press something like `SUPER+L`\nlike you would on other OS's.\n\n## Fancy\n\nIf you like it a bit fancier, you can use `i3lock-fancy`, it can blur,\npixelate, and greyscale your current screen.  I did not really like this\nbecause you can still tell what is going on the screen.  It's probably secure\nenough and looks better, but I went with regular `i3lock`.\n\n``` bash\nparu -S i3lock-fancy-git\n# or\napt install i3lock-fancy\n```\n",
      "summary": "is a fantastic lockscreen for tiling window managers.",
      "date_published": "2025-06-02T14:40:56Z",
      "date_modified": "2025-06-02T14:40:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "awesomewm"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-662/",
      "url": "https://go.waylonwalker.com/thought-662/",
      "title": "💭 From Prisma Founder to LiveStore: Building local-first apps wi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"aKTbGIrkrLE\" title=\"From Prisma Founder to LiveStore: Building local-first apps with Johannes Schickling\" playlabel=\"Play: From Prisma Founder to LiveStore: Building local-first apps with Johannes Schickling\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis talk about live store really made me think about database transactions in a new way.  They are talking about live-store, and the complexity of distributed applications like a notes app with the ability to go offline and continue working.  The complexity of resyncing each instance is not simple, conflict resolution accross all the possible installs that may or may not even be online is a really hard problem.  They go deep on discussing an event driven paradigm that is driven off of a log of events and how this changes how we deal with databases.  Using the event log as the source of truth we can do things like forget about database migrations, we can replay all of the events onto a new database.  Its very interesting to rethink in terms of a log system that speaks in terms of understandable events (not table operations) as the source of truth for an application.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"aKTbGIrkrLE\" title=\"From Prisma Founder to LiveStore: Building local-first apps with Johannes Schickling\" playlabel=\"Play: From Prisma Founder to LiveStore: Building local-first apps with Johannes Schickling\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis talk about live store really made me think about database transactions in a new way.  They are talking about live-store, and the complexity of distributed applications like a notes app with the ability to go offline and continue working.  The complexity of resyncing each instance is not simple, conflict resolution accross all the possible installs that may or may not even be online is a really hard problem.  They go deep on discussing an event driven paradigm that is driven off of a log of events and how this changes how we deal with databases.  Using the event log as the source of truth we can do things like forget about database migrations, we can replay all of the events onto a new database.  Its very interesting to rethink in terms of a log system that speaks in terms of understandable events (not table operations) as the source of truth for an application.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=aKTbGIrkrLE\u0026t=3260s",
      "date_published": "2025-05-31T20:58:05Z",
      "date_modified": "2025-05-31T20:58:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "database",
        "event",
        "recommended",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-661/",
      "url": "https://go.waylonwalker.com/thought-661/",
      "title": "💭 DHH on X: \"You don't need a mentor. There's no secret sauce le...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1928856582588076171\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI need to find this podcast, was DHH this animated through the whole thing?\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYou don’t need a mentor. There’s no secret sauce left inside anyone’s head any more. It’s all been tapped, bottled, tweeted, and shared a million times. Sample some of that, but also guard your ignorance. You’ll lose it soon enough.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIt takes work, one on one hand holding is a shortcut.  Sometimes one that we need.  Sometimes we need to level up quick, hence why your job might pair you up with someone for the first few months, but it is not something you need, you can figure shit out on your own with hard work.  These days we have things like gippity to bounce ideas off, and you can generally get the sense of the direction the average of the internet it was trained on.  Always add your own experience and make a choice for yourself.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1928856582588076171\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI need to find this podcast, was DHH this animated through the whole thing?\n\n\u003e You don't need a mentor. There's no secret sauce left inside anyone's head any more. It's all been tapped, bottled, tweeted, and shared a million times. Sample some of that, but also guard your ignorance. You'll lose it soon enough.\n\nIt takes work, one on one hand holding is a shortcut.  Sometimes one that we need.  Sometimes we need to level up quick, hence why your job might pair you up with someone for the first few months, but it is not something you need, you can figure shit out on your own with hard work.  These days we have things like gippity to bounce ideas off, and you can generally get the sense of the direction the average of the internet it was trained on.  Always add your own experience and make a choice for yourself.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/dhh/status/1928856582588076171",
      "date_published": "2025-05-31T19:49:38Z",
      "date_modified": "2025-05-31T19:49:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-660/",
      "url": "https://go.waylonwalker.com/thought-660/",
      "title": "💭 Self-Host Weekly",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://selfh.st/weekly/2025-05-30/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://selfh.st/content/images/2025/05/2025-05-30-featured-image.png\" alt=\"Self-Host Weekly (30 May 2025) — Self-hosted news, updates, launches, and content for the week ending Friday, May 30, 2025\" loading=\"lazy\"/ data-glightbox=\"description: Self-Host Weekly (30 May 2025) — Self-hosted news, updates, launches, and content for the week ending Friday, May 30, 2025\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSelf-Host Weekly (30 May 2025)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSelf-hosted news, updates, launches, and content for the week ending Friday, May 30, 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eselfh.st · selfh.st\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe object storage (S3-compatible) platform MinIO created a bit of a stir this week\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI had not heard about this before it came in through selfh.st.  I use minio a lot, and did not know there are so many great alternatives out there for it.  I might be looking into some of these options such as \u003ca href=\"https://garagehq.deuxfleurs.fr/?ref=selfh.st\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/garagehq.deuxfleurs.fr.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/garagehq.deuxfleurs.fr.png\" class=\"has-avatar  has-avatar-before\"\u003egarage\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIts hard to tell from this article what mino dropped, but luckily for me it seems to be all ui related.    I use the UI for debugging/feedback/sometimes learning, but at this point I’ve got good flows for setting up new access keys, buckets, and everything with the cli.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://selfh.st/weekly/2025-05-30/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://selfh.st/content/images/2025/05/2025-05-30-featured-image.png\" alt=\"Self-Host Weekly (30 May 2025) — Self-hosted news, updates, launches, and content for the week ending Friday, May 30, 2025\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSelf-Host Weekly (30 May 2025)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSelf-hosted news, updates, launches, and content for the week ending Friday, May 30, 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eselfh.st \u0026middot; selfh.st\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e The object storage (S3-compatible) platform MinIO created a bit of a stir this week \n\nI had not heard about this before it came in through selfh.st.  I use minio a lot, and did not know there are so many great alternatives out there for it.  I might be looking into some of these options such as [garage](https://garagehq.deuxfleurs.fr/?ref=selfh.st).  \n\nIts hard to tell from this article what mino dropped, but luckily for me it seems to be all ui related.    I use the UI for debugging/feedback/sometimes learning, but at this point I've got good flows for setting up new access keys, buckets, and everything with the cli.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://selfh.st/weekly/2025-05-30/",
      "date_published": "2025-05-31T16:29:26Z",
      "date_modified": "2025-05-31T16:29:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "self-host",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-659/",
      "url": "https://go.waylonwalker.com/thought-659/",
      "title": "💭 DHH on X: \"NIH: Not Invented Here Syndrome might come from a g...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1928450457262850053\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI suffer hard from NIH, I’m cheap, I like building things, I hate reading the docs, the perfect recipe for some bad NIH.  I really like DHH’s take here.  If no one builds anything new we get stuck with the same old shit.  I think theres a lot of things that as far as my use case is concerned feature complete and needs no more.  I would just build with it or on it, but not re-invent.  It’s a slippery slope.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/dhh/status/1928450457262850053\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI suffer hard from NIH, I'm cheap, I like building things, I hate reading the docs, the perfect recipe for some bad NIH.  I really like DHH's take here.  If no one builds anything new we get stuck with the same old shit.  I think theres a lot of things that as far as my use case is concerned feature complete and needs no more.  I would just build with it or on it, but not re-invent.  It's a slippery slope.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/dhh/status/1928450457262850053",
      "date_published": "2025-05-31T15:40:11Z",
      "date_modified": "2025-05-31T15:40:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-658/",
      "url": "https://go.waylonwalker.com/thought-658/",
      "title": "💭 feat: add hackernews hits on home page · jimniels/blog@b1a250b",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/892f6fed54ab75821aa86deeb035f754e41eb0f9f405d6b058aa958579ccd866/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8\" alt=\"feat: add hackernews hits on home page · jimniels/blog@b1a250b — Contribute to jimniels/blog development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: feat: add hackernews hits on home page · jimniels/blog@b1a250b — Contribute to jimniels/blog development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efeat: add hackernews hits on home page · jimniels/blog@b1a250b\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to jimniels/blog development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJim Nielsen fetches his hacker news ranked articles for his home page.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/892f6fed54ab75821aa86deeb035f754e41eb0f9f405d6b058aa958579ccd866/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8\" alt=\"feat: add hackernews hits on home page · jimniels/blog@b1a250b — Contribute to jimniels/blog development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efeat: add hackernews hits on home page · jimniels/blog@b1a250b\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to jimniels/blog development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJim Nielsen fetches his hacker news ranked articles for his home page.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8",
      "date_published": "2025-05-31T01:56:00Z",
      "date_modified": "2025-05-31T01:56:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-657/",
      "url": "https://go.waylonwalker.com/thought-657/",
      "title": "💭 Hackernews query by url",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hn.algolia.com/api/v1/search?query=waylonwalker.com\u0026amp;restrictSearchableAttributes=url\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hn.algolia.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hn.algolia.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehn.algolia.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"https://blog.jim-nielsen.com/2022/playing-with-blog-home/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ethis post\u003c/a\u003e by Jim Nielsen, lead me to \u003ca href=\"https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8\" 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\"\u003ethis commit\u003c/a\u003e where I found that he was including posts of his that wound up on hackernews.  I really like this idea and might take it, even though i have very few HN linked posts.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hn.algolia.com/api/v1/search?query=waylonwalker.com\u0026amp;restrictSearchableAttributes=url\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehn.algolia.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n[this post](https://blog.jim-nielsen.com/2022/playing-with-blog-home/) by Jim Nielsen, lead me to [this commit](https://github.com/jimniels/blog/commit/b1a250b2357d21e69a58ce3265114e1761fb47f8) where I found that he was including posts of his that wound up on hackernews.  I really like this idea and might take it, even though i have very few HN linked posts.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hn.algolia.com/api/v1/search?query=waylonwalker.com\u0026restrictSearchableAttributes=url",
      "date_published": "2025-05-31T01:54:59Z",
      "date_modified": "2025-05-31T01:54:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-656/",
      "url": "https://go.waylonwalker.com/thought-656/",
      "title": "💭 External Links - Jim Nielsen’s Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/about/external-links/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Links - Jim Nielsen’s Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI really like the idea of Jim’s Eternal Links, and really want to take it for myself.  To expand here I want to be able to look for common places for rss feeds, and be able to scrape out rss feeds for sites that I tend to link to often.  Also if they have something like a /blogroll it might be a good place to find new great people to follow.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/about/external-links/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Links - Jim Nielsen’s Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI really like the idea of Jim's Eternal Links, and really want to take it for myself.  To expand here I want to be able to look for common places for rss feeds, and be able to scrape out rss feeds for sites that I tend to link to often.  Also if they have something like a /blogroll it might be a good place to find new great people to follow.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/about/external-links/",
      "date_published": "2025-05-31T01:51:13Z",
      "date_modified": "2025-05-31T01:51:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-655/",
      "url": "https://go.waylonwalker.com/thought-655/",
      "title": "💭 Could I Have Some More Friction in My Life, Please? - Jim Niel...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/more-friction-please/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCould I Have Some More Friction in My Life, Please?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMaybe we need a little more friction in the world. More things that merit our time. Less things that don’t.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can resonate with this post, less friction feels like it leads me to thinking less, having less skin in the game, understanding less, feeling less fulfilled.  \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 is a new trend of 2025, it feels like the future, but it does not quite feel like the present yet.  It’s riddled with errors and I only get frustrated when it doesn’t work.  I like having some friction that leads me to think and pay attention.  There might be a future where this is not required for some things like coding up crud apps, but that does not feel like today.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2025/more-friction-please/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCould I Have Some More Friction in My Life, Please?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Maybe we need a little more friction in the world. More things that merit our time. Less things that don’t.\n\nI can resonate with this post, less friction feels like it leads me to thinking less, having less skin in the game, understanding less, feeling less fulfilled.  Vibe coding is a new trend of 2025, it feels like the future, but it does not quite feel like the present yet.  It's riddled with errors and I only get frustrated when it doesn't work.  I like having some friction that leads me to think and pay attention.  There might be a future where this is not required for some things like coding up crud apps, but that does not feel like today.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2025/more-friction-please/",
      "date_published": "2025-05-31T01:49:35Z",
      "date_modified": "2025-05-31T01:49:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-654/",
      "url": "https://go.waylonwalker.com/thought-654/",
      "title": "💭 A Gentle Intro to RSS",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://derekkedziora.com/blog/rss-guide\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/derekkedziora.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/derekkedziora.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA Gentle Intro to RSS\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA guide to RSS for the less tech savvy.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDerek Kedziora · derekkedziora.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSome of the best things from the old internet are still preserved with RSS. Content is shared via simple files, which means the slow-loading, ad-stuffed and tracker-filled clutter of the modern internet are mostly absent.\u003c/p\u003e\n\u003cp\u003eThere aren’t any algorithms. RSS readers are wonderfully dumb. There’s no AI sifting through content to find whatever will outrage you the most. You just get new posts and mark them as read. It’s a calmer world.\u003c/p\u003e\n\u003cp\u003eWith RSS I follow lots of people writing about normal people things. People blog about getting back into playing the drums, a fun book they just read, a tough problem they’re working through and the other day to day things of life. This type of content tends to get buried on social media — it doesn’t get the clicks and sell ads like fear and outrage do.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI feel like a curmudgeon, but i feel all of these things. I dont think that the new web is completely terrible, what is terrible is that the options of an algorithm ran by companies with differing goals is seemingly the only option.  RSS still works, its fantastic, I personally love it, but theres only a small fraction of the internet that it reaches both ways.  Few people have a reader, even fewer have a feed.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://derekkedziora.com/blog/rss-guide\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA Gentle Intro to RSS\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA guide to RSS for the less tech savvy.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDerek Kedziora \u0026middot; derekkedziora.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Some of the best things from the old internet are still preserved with RSS. Content is shared via simple files, which means the slow-loading, ad-stuffed and tracker-filled clutter of the modern internet are mostly absent.\n\u003e\n\u003e There aren’t any algorithms. RSS readers are wonderfully dumb. There’s no AI sifting through content to find whatever will outrage you the most. You just get new posts and mark them as read. It’s a calmer world.\n\u003e\n\u003e With RSS I follow lots of people writing about normal people things. People blog about getting back into playing the drums, a fun book they just read, a tough problem they’re working through and the other day to day things of life. This type of content tends to get buried on social media — it doesn’t get the clicks and sell ads like fear and outrage do.\n\nI feel like a curmudgeon, but i feel all of these things. I dont think that the new web is completely terrible, what is terrible is that the options of an algorithm ran by companies with differing goals is seemingly the only option.  RSS still works, its fantastic, I personally love it, but theres only a small fraction of the internet that it reaches both ways.  Few people have a reader, even fewer have a feed.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://derekkedziora.com/blog/rss-guide",
      "date_published": "2025-05-31T01:44:36Z",
      "date_modified": "2025-05-31T01:44:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "rss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-653/",
      "url": "https://go.waylonwalker.com/thought-653/",
      "title": "💭 Command Line | gitignore.io / docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.gitignore.io/install/command-line\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://docs.gitignore.io/~gitbook/ogimage/-LIvvKfMD3PkcDQCppzH\" alt=\"Command Line | gitignore.io / docs — To run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.\" loading=\"lazy\"/ data-glightbox=\"description: Command Line | gitignore.io / docs — To run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCommand Line | gitignore.io / docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTo run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.gitignore.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a very interesting cli, its so simple.  I stumbled accross the \u003ccode\u003egi\u003c/code\u003e command awhile back and was like pfft, I dont want to install something for that.  Didn’t even realize that you \u003cstrong\u003edon’t\u003c/strong\u003e install it, its just http.  Their \u003cem\u003einstall\u003c/em\u003e instructions lead you to putting a curl funtion in your bashrc.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e gi\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e curl -sLw \u003cspan class=\"se\"\u003e\\\u0026#34;\\\\\\n\\\u0026#34;\u003c/span\u003e https://www.toptal.com/developers/gitignore/api/\u003cspan class=\"se\"\u003e\\$\u003c/span\u003e@ \u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis now has me wondering “What else can build like this?”\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.gitignore.io/install/command-line\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://docs.gitignore.io/~gitbook/ogimage/-LIvvKfMD3PkcDQCppzH\" alt=\"Command Line | gitignore.io / docs — To run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCommand Line | gitignore.io / docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTo run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.gitignore.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a very interesting cli, its so simple.  I stumbled accross the `gi` command awhile back and was like pfft, I dont want to install something for that.  Didn't even realize that you **don't** install it, its just http.  Their _install_ instructions lead you to putting a curl funtion in your bashrc.  \n\n``` bash\nfunction gi() { curl -sLw \\\"\\\\\\n\\\" https://www.toptal.com/developers/gitignore/api/\\$@ ;}\n```\n\nThis now has me wondering \"What else can build like this?\"\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.gitignore.io/install/command-line",
      "date_published": "2025-05-29T16:22:42Z",
      "date_modified": "2025-05-29T16:22:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-652/",
      "url": "https://go.waylonwalker.com/thought-652/",
      "title": "💭 My Keyboard Has Sublayers… and It’s Insane - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"wz5eOowV9iw\" title=\"My Hyper key Has Sublayers… Let me Show you Why\" playlabel=\"Play: My Hyper key Has Sublayers… Let me Show you Why\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003elinkarzu has a way to navigate his entire mac using a hyper key.  Everything looks so tight and polished, also a lot to remember!  Lucky he has a system of mnemonics that make it easy to remember.  His setup is very Mac focused using mac only apps, so this would not work for me, though I’m sure I could get something similar on linux.  He did mention Kanata which is cross platform.\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 use a far different system that is fast loose and easy.  On every system I run I have 9 workspaces that let me put 9 applications, I can easily move apps to different workspaces and have a side by side if I need.  The core of what I do is terminal, web browser, and chat. Those go on workspaces 4,5,6, whch are home-row keys.  If I’m running obs, that is on 8, steam goes on 1. but I have some freedom to move.  Sometimes 2 will be an image editor or a video editor, sometimes something else all together, but I can quickly go to each app.\u003c/p\u003e\n\u003ch2 id=\"what-i-like-from-linkazru\"\u003eWhat I like from Linkazru \u003ca href=\"#what-i-like-from-linkazru\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI do like his layered approach.  I run a 42 key keyboard so things can get a bit cramped quickly. And when thinking in mnemonics you only get 26 letters in the alphabet, but prefixing these with another layer this number goes up exponentially.  Sublayers sound sick to be honest.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"wz5eOowV9iw\" title=\"My Hyper key Has Sublayers… Let me Show you Why\" playlabel=\"Play: My Hyper key Has Sublayers… Let me Show you Why\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nlinkarzu has a way to navigate his entire mac using a hyper key.  Everything looks so tight and polished, also a lot to remember!  Lucky he has a system of mnemonics that make it easy to remember.  His setup is very Mac focused using mac only apps, so this would not work for me, though I'm sure I could get something similar on linux.  He did mention Kanata which is cross platform.\n\n## What I do\n\nI use a far different system that is fast loose and easy.  On every system I run I have 9 workspaces that let me put 9 applications, I can easily move apps to different workspaces and have a side by side if I need.  The core of what I do is terminal, web browser, and chat. Those go on workspaces 4,5,6, whch are home-row keys.  If I'm running obs, that is on 8, steam goes on 1. but I have some freedom to move.  Sometimes 2 will be an image editor or a video editor, sometimes something else all together, but I can quickly go to each app.\n\n## What I like from Linkazru\n\nI do like his layered approach.  I run a 42 key keyboard so things can get a bit cramped quickly. And when thinking in mnemonics you only get 26 letters in the alphabet, but prefixing these with another layer this number goes up exponentially.  Sublayers sound sick to be honest.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=wz5eOowV9iw",
      "date_published": "2025-05-29T13:04:50Z",
      "date_modified": "2025-05-29T13:04:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keeb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-651/",
      "url": "https://go.waylonwalker.com/thought-651/",
      "title": "💭 Forrest Knight on X: \"you're not allowed to write comments in ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ForrestPKnight/status/1927398791398719997\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOh, I feel this.  I go through the effort of removing dum ai comments so the ai looks less ai.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eyou’re not allowed to write comments in your code anymore, because if you do everyone will just think it’s ai generated.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/ForrestPKnight/status/1927398791398719997\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOh, I feel this.  I go through the effort of removing dum ai comments so the ai looks less ai.\n\n\u003e you're not allowed to write comments in your code anymore, because if you do everyone will just think it's ai generated.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/ForrestPKnight/status/1927398791398719997",
      "date_published": "2025-05-29T01:41:41Z",
      "date_modified": "2025-05-29T01:41:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-650/",
      "url": "https://go.waylonwalker.com/thought-650/",
      "title": "💭 The adapter pattern in python | Rob Parsons",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://robp.dev/the-adapter-pattern-in-python/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/robp.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/robp.dev.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe adapter pattern in python\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe Adapter pattern is a design pattern that allows objects with incompatible interfaces to work together. It provides a way to convert the interface of an object into another interface that client...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eRob Parsons · robp.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis has me wondering if I need to really learn more patterns, data structures, and algorithms.  This looks particularly useful when trying to combine several objects that you dont have full control over and make them behave similarly.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://robp.dev/the-adapter-pattern-in-python/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe adapter pattern in python\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe Adapter pattern is a design pattern that allows objects with incompatible interfaces to work together. It provides a way to convert the interface of an object into another interface that client...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eRob Parsons \u0026middot; robp.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis has me wondering if I need to really learn more patterns, data structures, and algorithms.  This looks particularly useful when trying to combine several objects that you dont have full control over and make them behave similarly.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://robp.dev/the-adapter-pattern-in-python/",
      "date_published": "2025-05-28T21:19:27Z",
      "date_modified": "2025-05-28T21:19:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kubernetes-node-labels/",
      "url": "https://go.waylonwalker.com/kubernetes-node-labels/",
      "title": "kubernetes node labels",
      "content_html": "\u003cp\u003eIf you need to target a specific k8s node in the cluster, you can use labels.\nYou want to treat your nodes as much like cattle as you can, but sometimes\nbudgets get in the way.  You might be like me and just run any free hardware\nyou can get in your cluster, or you might have some large storage or gpu needs\nthat you can’t afford to put on every node in the cluster.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl get nodes --show-labels\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# add the bigpool label\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl label node k8s-1 \u003cspan class=\"nv\"\u003ebigpool\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl get nodes --show-labels\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# remove the bigpool label\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl label node k8s-1 bigpool-\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo use the label in a pod set \u003ccode\u003espec.nodeSelector\u003c/code\u003e to the label that you\napplied.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ePod\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebusybox\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebusybox\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebusybox\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enodeSelector\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebigpool\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIf you need to target a specific k8s node in the cluster, you can use labels.\nYou want to treat your nodes as much like cattle as you can, but sometimes\nbudgets get in the way.  You might be like me and just run any free hardware\nyou can get in your cluster, or you might have some large storage or gpu needs\nthat you can't afford to put on every node in the cluster.\n\n``` bash\nkubectl get nodes --show-labels\n\n# add the bigpool label\nkubectl label node k8s-1 bigpool=true\nkubectl get nodes --show-labels\n\n# remove the bigpool label\nkubectl label node k8s-1 bigpool-\n```\n\nTo use the label in a pod set `spec.nodeSelector` to the label that you\napplied.\n\n``` yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: busybox\nspec:\n  containers:\n  - name: busybox\n    image: busybox\n  nodeSelector:\n    bigpool: \"true\"\n```\n",
      "summary": "If you need to target a specific k8s node in the cluster, you can use labels. You want to treat your nodes as much like cattle as you can, but sometimes...",
      "date_published": "2025-05-28T18:49:19Z",
      "date_modified": "2025-05-28T18:49:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-649/",
      "url": "https://go.waylonwalker.com/thought-649/",
      "title": "💭 Adding a Dynamic Now Page in Jekyll",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://derekkedziora.com/blog/dynamic-now-page\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/derekkedziora.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/derekkedziora.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAdding a Dynamic Now Page in Jekyll\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMake an auto-updating now page on a static site like Jekyll, Hugo, 11ty or Gatsby\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDerek Kedziora · derekkedziora.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ewow looking at how this is done kinda draws me towards jekyll a little bit, I did not realize some of the similarities that it has with markata.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://derekkedziora.com/blog/dynamic-now-page\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAdding a Dynamic Now Page in Jekyll\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMake an auto-updating now page on a static site like Jekyll, Hugo, 11ty or Gatsby\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDerek Kedziora \u0026middot; derekkedziora.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nwow looking at how this is done kinda draws me towards jekyll a little bit, I did not realize some of the similarities that it has with markata.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://derekkedziora.com/blog/dynamic-now-page",
      "date_published": "2025-05-28T13:56:38Z",
      "date_modified": "2025-05-28T13:56:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-648/",
      "url": "https://go.waylonwalker.com/thought-648/",
      "title": "💭 CSS if() functions \u0026 reading-flow (in Chrome 137) - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Apn8ucs7AL0\" title=\"CSS if() functions \u0026amp; reading-flow (in Chrome 137)\" playlabel=\"Play: CSS if() functions \u0026amp; reading-flow (in Chrome 137)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003ecss if() just landed, I’m struggling to understand what I an do with this that I can’t do with something as old as classes.  I can get it if I don’t have control over \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 creation or js to add classes.  The example that Una shows includes data that could directly be a classname with a set of styles in css rather than this crazy css variable unpacking out of a data attribute and an if statement.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Apn8ucs7AL0\" title=\"CSS if() functions \u0026amp; reading-flow (in Chrome 137)\" playlabel=\"Play: CSS if() functions \u0026amp; reading-flow (in Chrome 137)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\ncss if() just landed, I'm struggling to understand what I an do with this that I can't do with something as old as classes.  I can get it if I don't have control over html creation or js to add classes.  The example that Una shows includes data that could directly be a classname with a set of styles in css rather than this crazy css variable unpacking out of a data attribute and an if statement.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=Apn8ucs7AL0",
      "date_published": "2025-05-28T03:02:11Z",
      "date_modified": "2025-05-28T03:02:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-647/",
      "url": "https://go.waylonwalker.com/thought-647/",
      "title": "💭 wants | maya.land",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maya.land/wants/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://maya.land/assets/vanitas-big.jpg\" alt=\"wants — Personal website. Webby personsite. Amateur hour round the clock.\" loading=\"lazy\"/ data-glightbox=\"description: wants — Personal website. Webby personsite. Amateur hour round the clock.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewants\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePersonal website. Webby personsite. Amateur hour round the clock.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaya.land · maya.land\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAllen Carr1 on quitting smoking:\n[Carr] recommends working to really notice and internalise that disconnect [between what we want and what we enjoy]. He tells smokers to pay attention to their next cigarette. It’s like mindfulness but for noticing the unpleasantness.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can appreciate the restraint here, theres something about the mindfulness behind it all.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maya.land/wants/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://maya.land/assets/vanitas-big.jpg\" alt=\"wants — Personal website. Webby personsite. Amateur hour round the clock.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewants\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePersonal website. Webby personsite. Amateur hour round the clock.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaya.land \u0026middot; maya.land\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Allen Carr1 on quitting smoking:\n\u003e [Carr] recommends working to really notice and internalise that disconnect [between what we want and what we enjoy]. He tells smokers to pay attention to their next cigarette. It’s like mindfulness but for noticing the unpleasantness.\n\nI can appreciate the restraint here, theres something about the mindfulness behind it all.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://maya.land/wants/",
      "date_published": "2025-05-28T02:00:31Z",
      "date_modified": "2025-05-28T02:00:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-646/",
      "url": "https://go.waylonwalker.com/thought-646/",
      "title": "💭 Blogroll",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://reader.waylonwalker.com/blogroll/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://shots.wayl.one/shot/?url=https://waylonwalker.com/reader/og/\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"Blogroll — Blogroll - a collection of awesome people I follow online\" loading=\"lazy\"/ data-glightbox=\"description: Blogroll — Blogroll - a collection of awesome people I follow online\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBlogroll\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBlogroll - a collection of awesome people I follow online\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWaylon Walker · reader.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI rolled out the blogroll today, nothing pretty, but is one single page of the rss feeds I follow.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://reader.waylonwalker.com/blogroll/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://waylonwalker.com/reader/og/\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"Blogroll — Blogroll - a collection of awesome people I follow online\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBlogroll\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBlogroll - a collection of awesome people I follow online\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWaylon Walker \u0026middot; reader.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI rolled out the blogroll today, nothing pretty, but is one single page of the rss feeds I follow.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://reader.waylonwalker.com/blogroll/",
      "date_published": "2025-05-27T02:33:08Z",
      "date_modified": "2025-05-27T02:33:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "rss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-645/",
      "url": "https://go.waylonwalker.com/thought-645/",
      "title": "💭 Late Night Linux – Episode 335 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"warmcBBfZn0\" title=\"Late Night Linux – Episode 335\" playlabel=\"Play: Late Night Linux – Episode 335\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eMarkata got a shout out part way through the latest episode of LNL, I will go back, re-listen and take some of the feedback.  His thoughts on Markata were interesting. On one hand it really is a thing for me that works for me, and as a person with too many side projects I don’t have the focus to really give it polish.  On the other hand it really confirms why listen to podcasts, news, finger on the pulse, opinions and how often these guys are wrong, they are not the expert they probably look at 6 things like this a week.  He said that it was some sort of javascript thing, that maybe he could fix or customize with javascript if he wanted, kinda shocking, I thought maybe I accidentally added node modules or something dumb, nope, I have a whopping 1.4% js.  So most of the comments were plain wrong.  I get it he probably peeked at it for 30s and realized it wasn’t the thing for his problem.  At the same time I should probably do a better job at marketing what it really is, cleaning up the docs and demo.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"warmcBBfZn0\" title=\"Late Night Linux – Episode 335\" playlabel=\"Play: Late Night Linux – Episode 335\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nMarkata got a shout out part way through the latest episode of LNL, I will go back, re-listen and take some of the feedback.  His thoughts on Markata were interesting. On one hand it really is a thing for me that works for me, and as a person with too many side projects I don't have the focus to really give it polish.  On the other hand it really confirms why listen to podcasts, news, finger on the pulse, opinions and how often these guys are wrong, they are not the expert they probably look at 6 things like this a week.  He said that it was some sort of javascript thing, that maybe he could fix or customize with javascript if he wanted, kinda shocking, I thought maybe I accidentally added node modules or something dumb, nope, I have a whopping 1.4% js.  So most of the comments were plain wrong.  I get it he probably peeked at it for 30s and realized it wasn't the thing for his problem.  At the same time I should probably do a better job at marketing what it really is, cleaning up the docs and demo.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=warmcBBfZn0",
      "date_published": "2025-05-27T02:31:53Z",
      "date_modified": "2025-05-27T02:31:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "markata",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-644/",
      "url": "https://go.waylonwalker.com/thought-644/",
      "title": "💭 Root for Your Friends · Joseph Thacker",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html\" alt=\"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html\"/ data-glightbox=\"description: https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eSuch a great message right now.  I feel like everywhere I turn is negativity, especially social media.  It feels like so many things are trying to divide and create hate.  “This” is what we should be doing with social media.  There are a lot of elements of “there are two ways to have the biggest building in town, tear down all the bigger buildings, or just build the biggest fucking building”, If you want to be successful in X then surround yourself with others successful in X.  This is a catalytic skill that everyone needs to have in their belt.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html](/static/https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html)\n\nSuch a great message right now.  I feel like everywhere I turn is negativity, especially social media.  It feels like so many things are trying to divide and create hate.  \"This\" is what we should be doing with social media.  There are a lot of elements of \"there are two ways to have the biggest building in town, tear down all the bigger buildings, or just build the biggest fucking building\", If you want to be successful in X then surround yourself with others successful in X.  This is a catalytic skill that everyone needs to have in their belt.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html",
      "date_published": "2025-05-27T02:27:24Z",
      "date_modified": "2025-05-27T02:27:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/javascript-b64/",
      "url": "https://go.waylonwalker.com/javascript-b64/",
      "title": "javascript b64",
      "content_html": "\u003cp\u003eI’m currently [[replacing-google-search-apps-with-self-hosted-web-apps]] and\ndecided to create a simple b64 encoder/decoder, just start typing to enter\ntext, escape to deselect, then e/d to encode/decode.\u003c/p\u003e\n\u003cp\u003eI’m trying to make these apps super simple, \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 out of minio, static\n\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, and javascript.  It’s been fun to get back to some simple interactive web\ndevelopment like this. No build just a website that does something.  No broken\nbuilds, no containers to deploy, just push to minio.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eencoded\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003ebtoa\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edecoded\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003eatob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eencoded\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere is the result.\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",
      "content_text": "\nI'm currently [[replacing-google-search-apps-with-self-hosted-web-apps]] and\ndecided to create a simple b64 encoder/decoder, just start typing to enter\ntext, escape to deselect, then e/d to encode/decode.\n\nI'm trying to make these apps super simple, self hosted out of minio, static\nhtml, and javascript.  It's been fun to get back to some simple interactive web\ndevelopment like this. No build just a website that does something.  No broken\nbuilds, no containers to deploy, just push to minio.\n\n``` javascript\nencoded = btoa(content);\ndecoded = atob(encoded);\n```\n\nHere is the result.\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",
      "summary": "I'm currently replacing-google-search-apps-with-self-hosted-web-apps and decided to create a simple b64 encoder/decoder, just start typing to enter text,...",
      "date_published": "2025-05-25T21:01:04Z",
      "date_modified": "2025-05-25T21:01:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "javascript"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ayoisaiah-f2/",
      "url": "https://go.waylonwalker.com/ayoisaiah-f2/",
      "title": "⭐ ayoisaiah f2",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ayoisaiah/f2\" 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\"\u003ef2\u003c/a\u003e by \u003ca href=\"https://github.com/ayoisaiah\" 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\"\u003eayoisaiah\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eF2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!\u003c/p\u003e\n",
      "content_text": "\n[f2](https://github.com/ayoisaiah/f2) by [ayoisaiah](https://github.com/ayoisaiah) is a game-changer in its space. Excited to see how it evolves.\n\nF2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!\n",
      "summary": "f2 by ayoisaiah is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-05-24T21:00:49Z",
      "date_modified": "2025-05-24T21:00:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-642/",
      "url": "https://go.waylonwalker.com/thought-642/",
      "title": "💭 Billy Basso on code architecture of Animal Well! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YngwUu4bXR4\" title=\"Billy Basso on code architecture of Animal Well!\" playlabel=\"Play: Billy Basso on code architecture of Animal Well!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat conversation with Billy Basso the creator of Animal Well on the code architecture of Animal well.  It’s all hand crafted C++. He talks about early games he tried to build being heavy in oop, and really got lost in oop.  Animal well is very flat, there is no inheritance, just lists of entities that all implement similar methods in their own way.  Layering and order of entities becomes very important.  Its crazy how much he had to think about hardware and MS build being very helpful with this, but needing to know all of the console apis.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YngwUu4bXR4\" title=\"Billy Basso on code architecture of Animal Well!\" playlabel=\"Play: Billy Basso on code architecture of Animal Well!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat conversation with Billy Basso the creator of Animal Well on the code architecture of Animal well.  It's all hand crafted C++. He talks about early games he tried to build being heavy in oop, and really got lost in oop.  Animal well is very flat, there is no inheritance, just lists of entities that all implement similar methods in their own way.  Layering and order of entities becomes very important.  Its crazy how much he had to think about hardware and MS build being very helpful with this, but needing to know all of the console apis.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=YngwUu4bXR4\u0026t=6039s",
      "date_published": "2025-05-24T19:38:21Z",
      "date_modified": "2025-05-24T19:38:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gamedev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-641/",
      "url": "https://go.waylonwalker.com/thought-641/",
      "title": "💭 Just fucking code.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.justfuckingcode.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJust fucking code.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustfuckingcode.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is great, beautifully captures a modern backend view of \u003ca href=\"https://motherfuckingwebsite.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/motherfuckingwebsite.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/motherfuckingwebsite.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://motherfuckingwebsite.com/\u003c/a\u003e.  I honestly resonate with almost all of this.  I have found myself in more trouble than help when trying to fully vibe out a project.  It never refactors, it leaves it shit everywhere, it mostly does what you say, until you get to something that seems easy, so you try to do it yourself, but you break its brittle piece of shit into pieces any time you try to touch it.  AI coding help is great, mcp seems like it really has some game changing abilities, but hands of vibe coded crap aint there yet for me.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.justfuckingcode.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJust fucking code.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejustfuckingcode.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is great, beautifully captures a modern backend view of https://motherfuckingwebsite.com/.  I honestly resonate with almost all of this.  I have found myself in more trouble than help when trying to fully vibe out a project.  It never refactors, it leaves it shit everywhere, it mostly does what you say, until you get to something that seems easy, so you try to do it yourself, but you break its brittle piece of shit into pieces any time you try to touch it.  AI coding help is great, mcp seems like it really has some game changing abilities, but hands of vibe coded crap aint there yet for me.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.justfuckingcode.com/",
      "date_published": "2025-05-24T19:31:09Z",
      "date_modified": "2025-05-24T19:31:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-640/",
      "url": "https://go.waylonwalker.com/thought-640/",
      "title": "💭 The Plot of \"Hollow Knight\" in One Minute - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"3xWgKFISG5U\" title=\"The Plot of \u0026#34;Hollow Knight\u0026#34; in One Minute\" playlabel=\"Play: The Plot of \u0026#34;Hollow Knight\u0026#34; in One Minute\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI did not realize half of this, and it took me at least 4 watches through this to catch everything.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"3xWgKFISG5U\" title=\"The Plot of \u0026#34;Hollow Knight\u0026#34; in One Minute\" playlabel=\"Play: The Plot of \u0026#34;Hollow Knight\u0026#34; in One Minute\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI did not realize half of this, and it took me at least 4 watches through this to catch everything.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/3xWgKFISG5U",
      "date_published": "2025-05-24T00:01:07Z",
      "date_modified": "2025-05-24T00:01:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "game",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-639/",
      "url": "https://go.waylonwalker.com/thought-639/",
      "title": "💭 k8s-monitoring-helm/charts/k8s-monitoring/docs/examples/privat...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/grafana/k8s-monitoring-helm/blob/main/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml#L29\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/dd8d46e228a558134624703be1aee1d77d36daea854a4d94d48345ffc509340b/grafana/k8s-monitoring-helm\" alt=\"k8s-monitoring-helm/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml at main · grafana/k8s-monitoring-helm — Contribute to grafana/k8s-monitoring-helm development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: k8s-monitoring-helm/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml at main · grafana/k8s-monitoring-helm — Contribute to grafana/k8s-monitoring-helm development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ek8s-monitoring-helm/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml at main · grafana/k8s-monitoring-helm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to grafana/k8s-monitoring-helm development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ek8s-monitoring requires setting imageregistry and pullsecrets twice\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eglobal\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eregistry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy.registry.com\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epullSecrets\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy-registry-creds\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eimageRegistry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy.registry.com\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eimagePullSecrets\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy-registry-creds\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/grafana/k8s-monitoring-helm/blob/main/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml#L29\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/dd8d46e228a558134624703be1aee1d77d36daea854a4d94d48345ffc509340b/grafana/k8s-monitoring-helm\" alt=\"k8s-monitoring-helm/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml at main · grafana/k8s-monitoring-helm — Contribute to grafana/k8s-monitoring-helm development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ek8s-monitoring-helm/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml at main · grafana/k8s-monitoring-helm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to grafana/k8s-monitoring-helm development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nk8s-monitoring requires setting imageregistry and pullsecrets twice\n\n``` yaml\nglobal:\n  image:\n    registry: my.registry.com\n    pullSecrets:\n      - name: my-registry-creds\n  imageRegistry: my.registry.com\n  imagePullSecrets:\n    - name: my-registry-creds\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/grafana/k8s-monitoring-helm/blob/main/charts/k8s-monitoring/docs/examples/private-image-registries/globally/values.yaml#L29",
      "date_published": "2025-05-23T19:58:59Z",
      "date_modified": "2025-05-23T19:58:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "helm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-638/",
      "url": "https://go.waylonwalker.com/thought-638/",
      "title": "💭 No docs, no bugs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/May/22/no-docs-no-bugs/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNo docs, no bugs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf your library doesn\u0026#39;t have any documentation, it can\u0026#39;t have any bugs. Documentation specifies what your code is supposed to do. Your tests specify what it actually does. Bugs exist …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBugs exist when your test-enforced implementation fails to match the behavior described in your documentation. Without documentation a bug is just undefined behavior.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis is quite an interesting thought, so does this mean that, none of my undocumented side projects have bugs?  no I think there is still some implied behavior that naming things covers.  a function \u003ccode\u003eget_bucket_contents\u003c/code\u003e implies doing something wtih s3, getting stuff from your local filesystem or crashing would be considered a bug.  I think the argument here is that if I start mining bitcoin when you call \u003ccode\u003eget_bucket_contents\u003c/code\u003e and I have not documented it that this is a feature not a bug.  If I were to take this a step further, now do I need to document that this does not also start a bitcoin miner?  maybe this is more of an unwanted feature than a bug, I’m convincing myself more and more.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/May/22/no-docs-no-bugs/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNo docs, no bugs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf your library doesn\u0026#39;t have any documentation, it can\u0026#39;t have any bugs. Documentation specifies what your code is supposed to do. Your tests specify what it actually does. Bugs exist …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Bugs exist when your test-enforced implementation fails to match the behavior described in your documentation. Without documentation a bug is just undefined behavior.\n\nThis is quite an interesting thought, so does this mean that, none of my undocumented side projects have bugs?  no I think there is still some implied behavior that naming things covers.  a function `get_bucket_contents` implies doing something wtih s3, getting stuff from your local filesystem or crashing would be considered a bug.  I think the argument here is that if I start mining bitcoin when you call `get_bucket_contents` and I have not documented it that this is a feature not a bug.  If I were to take this a step further, now do I need to document that this does not also start a bitcoin miner?  maybe this is more of an unwanted feature than a bug, I'm convincing myself more and more.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/May/22/no-docs-no-bugs/#atom-everything",
      "date_published": "2025-05-22T19:50:40Z",
      "date_modified": "2025-05-22T19:50:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-637/",
      "url": "https://go.waylonwalker.com/thought-637/",
      "title": "💭 The Subtle Details That Make Hollow Knight Great - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Vxt8uud5o_4\" title=\"The Subtle Details That Make Hollow Knight Great\" playlabel=\"Play: The Subtle Details That Make Hollow Knight Great\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eSo many small details go into making hollow knight such a great game, but it starts with such good controls, every thing is so fluid and predictable.  I knew about coyote time, but not some of the other details that Juniper covers, such as hang time, and faster decent than jump.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"Vxt8uud5o_4\" title=\"The Subtle Details That Make Hollow Knight Great\" playlabel=\"Play: The Subtle Details That Make Hollow Knight Great\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nSo many small details go into making hollow knight such a great game, but it starts with such good controls, every thing is so fluid and predictable.  I knew about coyote time, but not some of the other details that Juniper covers, such as hang time, and faster decent than jump.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=Vxt8uud5o_4\u0026t=1s",
      "date_published": "2025-05-22T19:00:50Z",
      "date_modified": "2025-05-22T19:00:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gamedev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/web-wakelock/",
      "url": "https://go.waylonwalker.com/web-wakelock/",
      "title": "web wakelock",
      "content_html": "\u003cp\u003eI’m trying to replace my usage of google inline search apps with real apps,\ntoday I used a stopwatch to time some things out at work by opening stopwatch.\nThis was something I just wanted running in a tab on another screen, it was not\ntiming running code or anything, I was using it as a reminder to check browser\ncaches every 5 minutes or so for some testing.\u003c/p\u003e\n\u003cp\u003eSo tonight I whipped up a \u003ca href=\"https://stopwatch.wayl.one\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stopwatch.wayl.one.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stopwatch.wayl.one.ico\" class=\"has-avatar  has-avatar-before\"\u003estopwatch\u003c/a\u003e,\n\u003ca href=\"https://clock.wayl.one\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/clock.wayl.one.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/clock.wayl.one.ico\" class=\"has-avatar  has-avatar-before\"\u003eclock\u003c/a\u003e and \u003ca href=\"https://timer.wayl.one\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/timer.wayl.one.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/timer.wayl.one.ico\" class=\"has-avatar  has-avatar-before\"\u003etimer\u003c/a\u003e, all of\nwhich are using the wakelock API to keep the screen on while the app is\nrunning.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e// Wake Lock support\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e    \u003cspan class=\"kd\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003ewakeLock\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003easync\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e \u003cspan class=\"nx\"\u003erequestWakeLock\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"k\"\u003etry\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;wakeLock\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003ein\u003c/span\u003e \u003cspan class=\"nx\"\u003enavigator\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nx\"\u003ewakeLock\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e \u003cspan class=\"nx\"\u003enavigator\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ewakeLock\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;screen\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nx\"\u003econsole\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003elog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Wake lock acquired\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"k\"\u003ecatch\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eerr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003econsole\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eerror\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Wake lock error:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003eerr\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eaddEventListener\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;visibilitychange\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003ewakeLock\u003c/span\u003e \u003cspan class=\"o\"\u003e!==\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003evisibilityState\u003c/span\u003e \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;visible\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003erequestWakeLock\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003erequestWakeLock\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI'm trying to replace my usage of google inline search apps with real apps,\ntoday I used a stopwatch to time some things out at work by opening stopwatch.\nThis was something I just wanted running in a tab on another screen, it was not\ntiming running code or anything, I was using it as a reminder to check browser\ncaches every 5 minutes or so for some testing.\n\nSo tonight I whipped up a [stopwatch](https://stopwatch.wayl.one),\n[clock](https://clock.wayl.one) and [timer](https://timer.wayl.one), all of\nwhich are using the wakelock API to keep the screen on while the app is\nrunning.\n\n``` js\n    // Wake Lock support\n    let wakeLock = null;\n    async function requestWakeLock() {\n      try {\n        if ('wakeLock' in navigator) {\n          wakeLock = await navigator.wakeLock.request('screen');\n          console.log(\"Wake lock acquired\");\n        }\n      } catch (err) {\n        console.error(\"Wake lock error:\", err);\n      }\n    }\n\n    document.addEventListener(\"visibilitychange\", () =\u003e {\n      if (wakeLock !== null \u0026\u0026 document.visibilityState === \"visible\") {\n        requestWakeLock();\n      }\n    });\n\n    requestWakeLock();\n```\n",
      "summary": "I'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....",
      "date_published": "2025-05-21T20:50:22Z",
      "date_modified": "2025-05-21T20:50:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-dbztui/",
      "url": "https://go.waylonwalker.com/pypeaday-dbztui/",
      "title": "⭐ pypeaday dbztui",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/pypeaday/dbztui\" 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\"\u003edbztui\u003c/a\u003e from \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA DBZ TUI built with an early version of ninesUI and Windsurf\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [dbztui](https://github.com/pypeaday/dbztui) from [pypeaday](https://github.com/pypeaday).\n\nA DBZ TUI built with an early version of ninesUI and Windsurf\n",
      "summary": "I'm impressed by dbztui from pypeaday.",
      "date_published": "2025-05-19T16:40:31Z",
      "date_modified": "2025-05-19T16:40:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-636/",
      "url": "https://go.waylonwalker.com/thought-636/",
      "title": "💭 Python: The Documentary [OFFICIAL TRAILER] - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"pqBqdNIPrbo\" title=\"Python: The Documentary [OFFICIAL TRAILER] | Out now! 🚨\" playlabel=\"Play: Python: The Documentary [OFFICIAL TRAILER] | Out now! 🚨\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eExcited to hear this story, they have so many key players in the trailer this will be fantastic.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"pqBqdNIPrbo\" title=\"Python: The Documentary [OFFICIAL TRAILER] | Out now! 🚨\" playlabel=\"Play: Python: The Documentary [OFFICIAL TRAILER] | Out now! 🚨\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nExcited to hear this story, they have so many key players in the trailer this will be fantastic.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=pqBqdNIPrbo",
      "date_published": "2025-05-18T16:43:12Z",
      "date_modified": "2025-05-18T16:43:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vhs-themes/",
      "url": "https://go.waylonwalker.com/vhs-themes/",
      "title": "vhs themes",
      "content_html": "\u003cp\u003eI’ve been working on\n\u003ca href=\"https://github.com/WaylonWalker/ninesui/blob/main/README.md\" 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\"\u003eninesui\u003c/a\u003e,\ninspired by k9s see \u003ca href=\"https://thoughts.waylonwalker.com/post/633\" 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-633\u003c/a\u003e.\nI want a good flow for making video for the readme and I am using \u003ca href=\"https://charm.sh/apps/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/charm.sh.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/charm.sh.ico\" class=\"has-avatar  has-avatar-before\"\u003echarm.sh\u003c/a\u003e’s \u003ca href=\"https://github.com/charmbracelet/vhs\" 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\"\u003evhs\u003c/a\u003e for this.\nIts running in an archBTW distrobox and looks gawdaweful.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.mp4\" type=\"video/mp4\"\u003esort.mp4\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThe over saturated colors give it a really retro look, seems fine, but not my\ncup of tea.  I tried to change the textual theme to \u003ccode\u003etokyo-night\u003c/code\u003e and it might\nhave made it a bit better, but still over-saturated.\u003c/p\u003e\n\u003ch2 id=\"after\"\u003eAfter \u003ca href=\"#after\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat I found is that vhs has themes, setting it to \u003ccode\u003edracula\u003c/code\u003e made everything much better.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# sort.tape\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOutput assets/sort.mp4\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOutput assets/sort.gif\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRequire echo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSet Shell \u0026#34;bash\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSet FontSize 32\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSet Width 1920\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSet Height 1080\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+ Set Theme \u0026#39;Dracula\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.mp4\" type=\"video/mp4\"\u003esort.mp4\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"ninesui\"\u003eNinesUI \u003ca href=\"#ninesui\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’m using these in my \u003ca href=\"https://github.com/WaylonWalker/ninesui\" 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\"\u003eninesui\u003c/a\u003e\nproject, right now they are in the readme, but maybe some docs will grow\neventually.  Right now its hardcore explore phase.\u003c/p\u003e\n",
      "content_text": "\n\nI've been working on\n[ninesui](https://github.com/WaylonWalker/ninesui/blob/main/README.md),\ninspired by k9s see [thoughts-633](https://thoughts.waylonwalker.com/post/633).\nI want a good flow for making video for the readme and I am using [charm.sh](https://charm.sh/apps/)'s [vhs](https://github.com/charmbracelet/vhs) for this.\nIts running in an archBTW distrobox and looks gawdaweful.\n\n![sort.mp4](https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.mp4)\n\nThe over saturated colors give it a really retro look, seems fine, but not my\ncup of tea.  I tried to change the textual theme to `tokyo-night` and it might\nhave made it a bit better, but still over-saturated.\n\n## After\n\nWhat I found is that vhs has themes, setting it to `dracula` made everything much better.\n\n``` diff\n# sort.tape\nOutput assets/sort.mp4\nOutput assets/sort.gif\n\nRequire echo\n\nSet Shell \"bash\"\nSet FontSize 32\nSet Width 1920\nSet Height 1080\n+ Set Theme 'Dracula'\n```\n\n![sort.mp4](https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.mp4)\n\n## NinesUI\n\nI'm using these in my [ninesui](https://github.com/WaylonWalker/ninesui)\nproject, right now they are in the readme, but maybe some docs will grow\neventually.  Right now its hardcore explore phase.\n",
      "summary": "I've been working on ninesui, inspired by k9s see thoughts-633. I want a good flow for making video for the readme and I am using charm.sh's vhs for this....",
      "date_published": "2025-05-16T08:24:51Z",
      "date_modified": "2025-05-16T08:24:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tui",
        "vhs",
        "terminal"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-635/",
      "url": "https://go.waylonwalker.com/thought-635/",
      "title": "💭 Chris Biscardi's Digital Garden",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.christopherbiscardi.com/wtf-is-kubernetes\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.christopherbiscardi.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.christopherbiscardi.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003echristopherbiscardi.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting take on kubernetes from a front end perspective.  All valid arguments to me, and really the answer to any do you \u003cstrong\u003eneed\u003c/strong\u003e to any specific implementation of tech is probably no.  We got along just fine before k8s ever existed and you still can, but its really nice in a lot of cases.  If your skills lean toward backend or infrastructure I encourage you to give it a try.\u003c/p\u003e\n\u003ch2 id=\"k8s--distros-\"\u003ek8s \u003cem\u003edistros\u003c/em\u003e \u003ca href=\"#k8s--distros-\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere are a lot of beginner friendly k8s distros that you can setup with relative ease, kind and k0s are great for single node, If you want multi-node k3s is what I generally use.  If you want a very lightweight OS that you only interact with through an api, and has a very small attack surface talos is an amazing product.\u003c/p\u003e\n\u003ch2 id=\"when-else-might-you-want-k8s\"\u003eWhen else might you want k8s \u003ca href=\"#when-else-might-you-want-k8s\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInternal, on-prem, \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.  If you are trying to avoid the cloud for cost, rules, regulations, red tape, kubernetes is a great option to manage your container workflows yourself without needing to have a cloud budget, get approvals and sign offs on running workflows in a public cloud.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.christopherbiscardi.com/wtf-is-kubernetes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003echristopherbiscardi.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting take on kubernetes from a front end perspective.  All valid arguments to me, and really the answer to any do you **need** to any specific implementation of tech is probably no.  We got along just fine before k8s ever existed and you still can, but its really nice in a lot of cases.  If your skills lean toward backend or infrastructure I encourage you to give it a try.  \n\n\n## k8s _distros_\n\nThere are a lot of beginner friendly k8s distros that you can setup with relative ease, kind and k0s are great for single node, If you want multi-node k3s is what I generally use.  If you want a very lightweight OS that you only interact with through an api, and has a very small attack surface talos is an amazing product.\n\n## When else might you want k8s\n\nInternal, on-prem, self hosted.  If you are trying to avoid the cloud for cost, rules, regulations, red tape, kubernetes is a great option to manage your container workflows yourself without needing to have a cloud budget, get approvals and sign offs on running workflows in a public cloud.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.christopherbiscardi.com/wtf-is-kubernetes",
      "date_published": "2025-05-12T13:05:33Z",
      "date_modified": "2025-05-12T13:05:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-634/",
      "url": "https://go.waylonwalker.com/thought-634/",
      "title": "💭 GrafanaCON 2025 Keynote Livestream - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"JYVf-Z320Y0\" title=\"GrafanaCON 2025 Keynote Livestream\" playlabel=\"Play: GrafanaCON 2025 Keynote Livestream\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eJust listened to this as I am really starting to get into grafana and feel like there isn’t a mountain of setup this time around realizing how much of my stack is brand new.  Drill Down and Alloy are both new and key to my setup.  The Ai integrations at the end sound wicked good, I will be interested if you can do similar things with an MCP vs how much proprietary  stuff needs grafana cloud.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"JYVf-Z320Y0\" title=\"GrafanaCON 2025 Keynote Livestream\" playlabel=\"Play: GrafanaCON 2025 Keynote Livestream\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nJust listened to this as I am really starting to get into grafana and feel like there isn't a mountain of setup this time around realizing how much of my stack is brand new.  Drill Down and Alloy are both new and key to my setup.  The Ai integrations at the end sound wicked good, I will be interested if you can do similar things with an MCP vs how much proprietary  stuff needs grafana cloud.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=JYVf-Z320Y0",
      "date_published": "2025-05-11T02:59:15Z",
      "date_modified": "2025-05-11T02:59:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "observability",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-633/",
      "url": "https://go.waylonwalker.com/thought-633/",
      "title": "💭 The future of Textualize - Textual",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://textual.textualize.io/blog/2025/05/07/the-future-of-textualize/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png\" alt=\"Textual - The future of Textualize — Textual is a TUI framework for Python, inspired by modern web development.\" loading=\"lazy\"/ data-glightbox=\"description: Textual - The future of Textualize — Textual is a TUI framework for Python, inspired by modern web development.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTextual - The future of Textualize\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTextual is a TUI framework for Python, inspired by modern web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTextual Documentation · textual.textualize.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUltimately though a business needs a product. Textual has always been a solution in search of a problem. And while there are plenty of problems to which Textual is a fantastic solution, we weren’t able to find a shared problem or pain-point to build a viable business around.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can totally see this. Finding a marketable business idea is not easy, working in the developer space where everyone wants to do it themselves is no better.  Textual specifically I could see, I really wanted to build things on it as it came out, I had ideas, it was hard to use at the time and changing, so I took a break, got busy with far too many other things, and really I ’m good with rich most of the time.\u003c/p\u003e\n\u003cp\u003eI daily use k9s, its absolutely amazing at what it does and appreciate that I could build something like it in python, its just hard to justify the time investment for the things I tend to work on.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhich is why Textualize, the company, will be wrapping up in the next few weeks.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDamn, that hit hard, its been an adventure watching textual get built, things like posting look fantastic!  Glad to see that its still alive with open source and Will is not leaving, but there will be no company.  This likely means significanly less velocity, but it might mean that not being tied to making money other opportunities open up.\u003c/p\u003e\n\u003cp\u003eThanks for giving us amazing terminal products Will.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://textual.textualize.io/blog/2025/05/07/the-future-of-textualize/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png\" alt=\"Textual - The future of Textualize — Textual is a TUI framework for Python, inspired by modern web development.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTextual - The future of Textualize\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTextual is a TUI framework for Python, inspired by modern web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTextual Documentation \u0026middot; textual.textualize.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Ultimately though a business needs a product. Textual has always been a solution in search of a problem. And while there are plenty of problems to which Textual is a fantastic solution, we weren't able to find a shared problem or pain-point to build a viable business around. \n\nI can totally see this. Finding a marketable business idea is not easy, working in the developer space where everyone wants to do it themselves is no better.  Textual specifically I could see, I really wanted to build things on it as it came out, I had ideas, it was hard to use at the time and changing, so I took a break, got busy with far too many other things, and really I 'm good with rich most of the time.\n\nI daily use k9s, its absolutely amazing at what it does and appreciate that I could build something like it in python, its just hard to justify the time investment for the things I tend to work on.\n\n\u003e Which is why Textualize, the company, will be wrapping up in the next few weeks.\n\nDamn, that hit hard, its been an adventure watching textual get built, things like posting look fantastic!  Glad to see that its still alive with open source and Will is not leaving, but there will be no company.  This likely means significanly less velocity, but it might mean that not being tied to making money other opportunities open up.\n\n\nThanks for giving us amazing terminal products Will.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://textual.textualize.io/blog/2025/05/07/the-future-of-textualize/",
      "date_published": "2025-05-10T14:27:58Z",
      "date_modified": "2025-05-10T14:27:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-632/",
      "url": "https://go.waylonwalker.com/thought-632/",
      "title": "💭 What's next? – Will McGugan – Will McGugan's essays",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willmcgugan.github.io/whats-next/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://willmcgugan.github.io/images/will2025.jpeg\" alt=\"What’s next? — Some years ago I had the opportunity to work fulltime on project of mine. This was at a time where I fully intended to take a year off, but being able to make a living off a project of your own creation is something software engineers dream of. Working on Textualize has been a blast, but it has come to an end. Perhaps not in the way I would have liked, but I am satisfied I have contributed something awesome to the tech community.\" loading=\"lazy\"/ data-glightbox=\"description: What’s next? — Some years ago I had the opportunity to work fulltime on project of mine. This was at a time where I fully intended to take a year off, but being able to make a living off a project of your own creation is something software engineers dream of. Working on Textualize has been a blast, but it has come to an end. Perhaps not in the way I would have liked, but I am satisfied I have contributed something awesome to the tech community.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhat’s next?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSome years ago I had the opportunity to work fulltime on project of mine. This was at a time where I fully intended to take a year off, but being able to make a living off a project of your own cre...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWill McGugan · willmcgugan.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSo it’s back to plan A: taking a year off. I plan on using this time to focus on my health–something I haven’t prioritized while working as a CEO / Founder of a startup.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eWish you the best Will, you have given us textual and rich, and from what I can tell left it in some great hands.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAll I can say for certain is that I would like to write more. Writing scratches many of the same itches as software development, and it is a skill I’d like to nurture.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eGo get em Will, write to your hearts desire, and resist the urge to make an SSG company this time.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willmcgugan.github.io/whats-next/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://willmcgugan.github.io/images/will2025.jpeg\" alt=\"What’s next? — Some years ago I had the opportunity to work fulltime on project of mine. This was at a time where I fully intended to take a year off, but being able to make a living off a project of your own creation is something software engineers dream of. Working on Textualize has been a blast, but it has come to an end. Perhaps not in the way I would have liked, but I am satisfied I have contributed something awesome to the tech community.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhat’s next?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSome years ago I had the opportunity to work fulltime on project of mine. This was at a time where I fully intended to take a year off, but being able to make a living off a project of your own cre...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWill McGugan \u0026middot; willmcgugan.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e So it’s back to plan A: taking a year off. I plan on using this time to focus on my health–something I haven’t prioritized while working as a CEO / Founder of a startup.\n\nWish you the best Will, you have given us textual and rich, and from what I can tell left it in some great hands.\n\n\u003e All I can say for certain is that I would like to write more. Writing scratches many of the same itches as software development, and it is a skill I’d like to nurture.\n\nGo get em Will, write to your hearts desire, and resist the urge to make an SSG company this time.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://willmcgugan.github.io/whats-next/",
      "date_published": "2025-05-10T14:08:45Z",
      "date_modified": "2025-05-10T14:08:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-631/",
      "url": "https://go.waylonwalker.com/thought-631/",
      "title": "💭 Too much magic – Will McGugan – Will McGugan's essays",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willmcgugan.github.io/too-much-magic/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://willmcgugan.github.io/images/will2025.jpeg\" alt=\"Too much magic — A common criticisms of frameworks like Textual is that they have “too much magic”.\" loading=\"lazy\"/ data-glightbox=\"description: Too much magic — A common criticisms of frameworks like Textual is that they have “too much magic”.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eToo much magic\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA common criticisms of frameworks like Textual is that they have “too much magic”.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWill McGugan · willmcgugan.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNow “too much magic” is not the same thing as “bad magic”, although they are often conflated. Bad magic is when the implementation details leak out from the level below. This can manifest itself as cryptic errors that reference the magic’s implementation.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willmcgugan.github.io/too-much-magic/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://willmcgugan.github.io/images/will2025.jpeg\" alt=\"Too much magic — A common criticisms of frameworks like Textual is that they have “too much magic”.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eToo much magic\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA common criticisms of frameworks like Textual is that they have “too much magic”.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWill McGugan \u0026middot; willmcgugan.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Now “too much magic” is not the same thing as “bad magic”, although they are often conflated. Bad magic is when the implementation details leak out from the level below. This can manifest itself as cryptic errors that reference the magic’s implementation. \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://willmcgugan.github.io/too-much-magic/",
      "date_published": "2025-05-10T01:49:34Z",
      "date_modified": "2025-05-10T01:49:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-630/",
      "url": "https://go.waylonwalker.com/thought-630/",
      "title": "💭 Markdown's biggest hater | Knut Melvær - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"TACa-vtHQ9k\" title=\"Markdown\u0026#39;s biggest hater | Knut Melvær\" playlabel=\"Play: Markdown\u0026#39;s biggest hater | Knut Melvær\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDang Strong takes against markdown here with a strong push for bespoke content models/structures.  This idea is completely foreign and wild to me.  I get it that markdown has its issues with flavors, add ons and what not, but overall its mostly transportable, its a skill that works most content sites and writing tools.  I am so far on the other side that I seek out tools with markdown as an option and lean away from wsiwyg tools with specialized data formats on the backend.\u003c/p\u003e\n\u003cp\u003eI’ll end with, I’m also a dev that creates very simplified content and maybe seeing the backend of a site with lots of custom fields would be very eye opening for me.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"TACa-vtHQ9k\" title=\"Markdown\u0026#39;s biggest hater | Knut Melvær\" playlabel=\"Play: Markdown\u0026#39;s biggest hater | Knut Melvær\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDang Strong takes against markdown here with a strong push for bespoke content models/structures.  This idea is completely foreign and wild to me.  I get it that markdown has its issues with flavors, add ons and what not, but overall its mostly transportable, its a skill that works most content sites and writing tools.  I am so far on the other side that I seek out tools with markdown as an option and lean away from wsiwyg tools with specialized data formats on the backend.\n\nI'll end with, I'm also a dev that creates very simplified content and maybe seeing the backend of a site with lots of custom fields would be very eye opening for me.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=TACa-vtHQ9k\u0026t=2s",
      "date_published": "2025-05-10T00:52:59Z",
      "date_modified": "2025-05-10T00:52:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "markdown",
        "blogging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-629/",
      "url": "https://go.waylonwalker.com/thought-629/",
      "title": "💭 Week Links №2: April 2025 - daverupert.com",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2025/05/week-links-2/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/daverupert.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/daverupert.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWeek Links №2: April 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLast year I attempted to do some newsletter-style link aggregation… that good intention imploded spectacularly. But I switched to Obsidian this month and now I have a better system for aggregatin...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com · daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLast year I attempted to do some newsletter-style link aggregation… that good intention imploded spectacularly. But I switched to Obsidian this month and now I have a better system for aggregating links (post on that coming later). Inside this issue you’ll find some games, some \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 server hardware, some AI discourse™, some musical instruments, and more.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis hits so close to home, I even went through the effort of making a weeknotes script, one weeknote post.  I also was inspired by obsidian but it didn’t work out for me, so my script uses data from markata.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/b1a5212b-846f-4144-82ab-51cd9ace086d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/b1a5212b-846f-4144-82ab-51cd9ace086d.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2025/05/week-links-2/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWeek Links №2: April 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLast year I attempted to do some newsletter-style link aggregation… that good intention imploded spectacularly. But I switched to Obsidian this month and now I have a better system for aggregatin...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com \u0026middot; daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Last year I attempted to do some newsletter-style link aggregation… that good intention imploded spectacularly. But I switched to Obsidian this month and now I have a better system for aggregating links (post on that coming later). Inside this issue you’ll find some games, some homelab server hardware, some AI discourse™, some musical instruments, and more.\n\nThis hits so close to home, I even went through the effort of making a weeknotes script, one weeknote post.  I also was inspired by obsidian but it didn't work out for me, so my script uses data from markata.\n\n![image](https://dropper.wayl.one/api/file/b1a5212b-846f-4144-82ab-51cd9ace086d.webp)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daverupert.com/2025/05/week-links-2/",
      "date_published": "2025-05-09T13:49:04Z",
      "date_modified": "2025-05-09T13:49:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-627/",
      "url": "https://go.waylonwalker.com/thought-627/",
      "title": "💭 What ChatGPT is NOT - Tech Raven Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.techravenconsulting.com/what-chatgpt-is-not/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://blog.techravenconsulting.com/wp-content/uploads/2023/05/not-excited-ai.jpg\" alt=\"What ChatGPT is NOT - Tech Raven Blog — There is a lot of excitement about ChatGPT and how it allows us to interact with information and technology. I am actually excited that it now exists and still, I think it is being way overhyped. I know, SHOCKER, Silicon Valley overhypes a new technology. I have seen a bunch of things said, even by\" loading=\"lazy\"/ data-glightbox=\"description: What ChatGPT is NOT - Tech Raven Blog — There is a lot of excitement about ChatGPT and how it allows us to interact with information and technology. I am actually excited that it now exists and still, I think it is being way overhyped. I know, SHOCKER, Silicon Valley overhypes a new technology. I have seen a bunch of things said, even by\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhat ChatGPT is NOT - Tech Raven Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThere is a lot of excitement about ChatGPT and how it allows us to interact with information and technology. I am actually excited that it now exists and still, I think it is being way overhyped. I...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTech Raven Blog - · blog.techravenconsulting.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDo you remember regression models from college: given some data, you find a best fit line that allows you to predict Y given X. At the end of the day, ChatGPT, and LLMs in general, are the same thing as the regression model – it’s just that ChatGPT is the largest and fanciest model we currently have to model language and information.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI really am coming to the idea of calling it a “word calculator”, this seems to be the most succinct description of llms that the lay person can comprehend and relate to.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eChatGPT does not hallucinate or become unhinged\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI think Steve goes much deeper on this in his \u003ca href=\"https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.fafo.fm.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.fafo.fm.jpg\" class=\"has-avatar  has-avatar-before\"\u003eintervew on fafo.fm\u003c/a\u003e.  They describe it more as a pleaser or “yes man”  essentially all the companies that are building these models want to give the “best” answer, better than their competitors.  With this comes the risk of it being completely wrong, they are designed to always give an answer.\u003c/p\u003e\n\u003cp\u003eOn that episode they talk about how each word has a statistical probability tied to it and in some visualizations you can see the confidence, in almost every example of “hallucination” you will find some set of very poor confidence followed by BS.  Thats not to say that every time there is low confidence there is BS though, that is why this is such a hard problem.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eChatGPT is not a replacement for search\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI’ve become really bad at this.  This is slowly becoming my starting point for a lot of research, not my only research, but the first wet finger in the air.  Most often done with low effort, low risk tasks.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIn ChatGPT, just like in the shelf full of the Encyclopedia Britannica I had when I was a kid, information on topics has been reduced to good summaries and presented in logical format. In this case we have removed the human authors and replaced them with a very large neural network.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI really like this description and it matches up with my last comment.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.techravenconsulting.com/what-chatgpt-is-not/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://blog.techravenconsulting.com/wp-content/uploads/2023/05/not-excited-ai.jpg\" alt=\"What ChatGPT is NOT - Tech Raven Blog — There is a lot of excitement about ChatGPT and how it allows us to interact with information and technology. I am actually excited that it now exists and still, I think it is being way overhyped. I know, SHOCKER, Silicon Valley overhypes a new technology. I have seen a bunch of things said, even by\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhat ChatGPT is NOT - Tech Raven Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThere is a lot of excitement about ChatGPT and how it allows us to interact with information and technology. I am actually excited that it now exists and still, I think it is being way overhyped. I...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTech Raven Blog - \u0026middot; blog.techravenconsulting.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Do you remember regression models from college: given some data, you find a best fit line that allows you to predict Y given X. At the end of the day, ChatGPT, and LLMs in general, are the same thing as the regression model – it’s just that ChatGPT is the largest and fanciest model we currently have to model language and information.\n\n\nI really am coming to the idea of calling it a \"word calculator\", this seems to be the most succinct description of llms that the lay person can comprehend and relate to.\n\n\u003e ChatGPT does not hallucinate or become unhinged\n\nI think Steve goes much deeper on this in his [intervew on fafo.fm](https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/).  They describe it more as a pleaser or \"yes man\"  essentially all the companies that are building these models want to give the \"best\" answer, better than their competitors.  With this comes the risk of it being completely wrong, they are designed to always give an answer.\n\nOn that episode they talk about how each word has a statistical probability tied to it and in some visualizations you can see the confidence, in almost every example of \"hallucination\" you will find some set of very poor confidence followed by BS.  Thats not to say that every time there is low confidence there is BS though, that is why this is such a hard problem.\n\n\u003e ChatGPT is not a replacement for search\n\nI've become really bad at this.  This is slowly becoming my starting point for a lot of research, not my only research, but the first wet finger in the air.  Most often done with low effort, low risk tasks.\n\n\u003e In ChatGPT, just like in the shelf full of the Encyclopedia Britannica I had when I was a kid, information on topics has been reduced to good summaries and presented in logical format. In this case we have removed the human authors and replaced them with a very large neural network.\n\nI really like this description and it matches up with my last comment.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.techravenconsulting.com/what-chatgpt-is-not/",
      "date_published": "2025-05-09T13:45:18Z",
      "date_modified": "2025-05-09T13:45:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-626/",
      "url": "https://go.waylonwalker.com/thought-626/",
      "title": "💭 “I’d rather read the prompt” – Chris Coyier",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/05/08/id-rather-read-the-prompt/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJ0eHQiOiImIzgyMjA7SSYjODIxNztkIHJhdGhlciByZWFkIHRoZSBwcm9tcHQmIzgyMjE7IiwidGVtcGxhdGUiOiJmdWxsc2NyZWVuIiwiYmxvZ19pZCI6NzQwNzQyNDh9.W9bhDbBZweMngafWgIePBE_Oh-bseQDYOjq6RtAwCN8MQ\" alt=\"“I’d rather read the prompt” — Clayton Ramsey grades student assignments and gets papers that are just obviously ChatGPT output. I think any of us can spot it by now: awkward repetitive prose, heavy on bullet points with bold in…\" loading=\"lazy\"/ data-glightbox=\"description: “I’d rather read the prompt” — Clayton Ramsey grades student assignments and gets papers that are just obviously ChatGPT output. I think any of us can spot it by now: awkward repetitive prose, heavy on bullet points with bold in…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e“I’d rather read the prompt”\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eClayton Ramsey grades student assignments and gets papers that are just obviously ChatGPT output. I think any of us can spot it by now: awkward repetitive prose, heavy on bullet points with bold in…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier · chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ll triple down on the link-blog chain here, see this one going around all over this week and finally had time to read through when it hit my rss reader via Chris.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt should come as no surprise that nearly every vibe-coded app on the Internet struggles with security issues; look no further than the vibe-coded recipe app that leaks its OpenAI keys. Every time one generates code by prompt, they create a new stillborn program; \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 is the art of stitching together their corpses into Frankenstein’s monster.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDamn, that is a strong statement, stitching together the corpses, strong statement here.  The OpenAI key thing feels kind of obvious to me, every set of docs, blogs and examples on the internet need to be runnable for people to learn and try out new tech easy, putting secrets in the wrong place is easy, putting them somewhere that you can decode them without sharing them is hard team specific, app specific, and so nuanced to your architecture that its rarely included in public examples.  I imagine there are a lot of good code example out there that follow good practice, but it feels like that might have missed the training data here.\u003c/p\u003e\n\u003cp\u003eIt alrso reminds me of \u003ca href=\"https://thoughts.waylonwalker.com/post/625\" 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\"\u003ethought-625-the-rule\u003c/a\u003e, where prime talks about small apps being happy and easy and at some point every change is hard, and likely  impossible to vibe code.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe whole point of making creative work is to share one’s own experience - if there’s no experience to share, why bother? If it’s not worth writing, it’s not worth reading.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ellms are not capable of being creative, they are word calculators, statistical models that predict the next likely word based on their experience, they are not capable of new discoveries.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/05/08/id-rather-read-the-prompt/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJ0eHQiOiImIzgyMjA7SSYjODIxNztkIHJhdGhlciByZWFkIHRoZSBwcm9tcHQmIzgyMjE7IiwidGVtcGxhdGUiOiJmdWxsc2NyZWVuIiwiYmxvZ19pZCI6NzQwNzQyNDh9.W9bhDbBZweMngafWgIePBE_Oh-bseQDYOjq6RtAwCN8MQ\" alt=\"“I’d rather read the prompt” — Clayton Ramsey grades student assignments and gets papers that are just obviously ChatGPT output. I think any of us can spot it by now: awkward repetitive prose, heavy on bullet points with bold in…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e“I’d rather read the prompt”\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eClayton Ramsey grades student assignments and gets papers that are just obviously ChatGPT output. I think any of us can spot it by now: awkward repetitive prose, heavy on bullet points with bold in…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier \u0026middot; chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'll triple down on the link-blog chain here, see this one going around all over this week and finally had time to read through when it hit my rss reader via Chris.\n\n\u003e  It should come as no surprise that nearly every vibe-coded app on the Internet struggles with security issues; look no further than the vibe-coded recipe app that leaks its OpenAI keys. Every time one generates code by prompt, they create a new stillborn program; vibe coding is the art of stitching together their corpses into Frankenstein’s monster.\n\nDamn, that is a strong statement, stitching together the corpses, strong statement here.  The OpenAI key thing feels kind of obvious to me, every set of docs, blogs and examples on the internet need to be runnable for people to learn and try out new tech easy, putting secrets in the wrong place is easy, putting them somewhere that you can decode them without sharing them is hard team specific, app specific, and so nuanced to your architecture that its rarely included in public examples.  I imagine there are a lot of good code example out there that follow good practice, but it feels like that might have missed the training data here.\n\n It alrso reminds me of [thought-625-the-rule](https://thoughts.waylonwalker.com/post/625), where prime talks about small apps being happy and easy and at some point every change is hard, and likely  impossible to vibe code.\n\n\u003e The whole point of making creative work is to share one’s own experience - if there’s no experience to share, why bother? If it’s not worth writing, it’s not worth reading.\n\nllms are not capable of being creative, they are word calculators, statistical models that predict the next likely word based on their experience, they are not capable of new discoveries.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://chriscoyier.net/2025/05/08/id-rather-read-the-prompt/",
      "date_published": "2025-05-09T13:09:30Z",
      "date_modified": "2025-05-09T13:09:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-625/",
      "url": "https://go.waylonwalker.com/thought-625/",
      "title": "💭 The Rule - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"emlDGTXuhts\" title=\"The Rule\" playlabel=\"Play: The Rule\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eUnder 2000 everything is happy, green field.  Any decision you have made is relatively easy to back out of (barring you making a library with downstream users), but as you go, regret kicks in.  Regret we didn’t make that pydantic 2 upgrade earlier, as new features become more apealing.  Regret that we chose sqlite for simplicity, speed, agility, and now we might need robust and distributed.  Regret that you chose a front end framework, or to have a front end at all to a backend problem.  Regret that you put 6 layers of abstraction on your db early on and now that you understand the problem you want different abstractions, but all of your endpoints deeply depend on the current one.\u003c/p\u003e\n\u003cp\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 will not save you, it will only make these wrong decisions for you without the context that you have.  You will hate it’s decisions more because you had no input into some of them.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"emlDGTXuhts\" title=\"The Rule\" playlabel=\"Play: The Rule\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nUnder 2000 everything is happy, green field.  Any decision you have made is relatively easy to back out of (barring you making a library with downstream users), but as you go, regret kicks in.  Regret we didn't make that pydantic 2 upgrade earlier, as new features become more apealing.  Regret that we chose sqlite for simplicity, speed, agility, and now we might need robust and distributed.  Regret that you chose a front end framework, or to have a front end at all to a backend problem.  Regret that you put 6 layers of abstraction on your db early on and now that you understand the problem you want different abstractions, but all of your endpoints deeply depend on the current one.\n\nVibe coding will not save you, it will only make these wrong decisions for you without the context that you have.  You will hate it's decisions more because you had no input into some of them.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/emlDGTXuhts",
      "date_published": "2025-05-09T13:01:16Z",
      "date_modified": "2025-05-09T13:01:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "dev",
        "vibes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-624/",
      "url": "https://go.waylonwalker.com/thought-624/",
      "title": "💭 THE STANDUP - Coding DIRTY Episode 7",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hbEWfC4k-Gw\" title=\"🚨🚨 THE STANDUP - Coding DIRTY Episode 7 🚨🚨\" playlabel=\"Play: 🚨🚨 THE STANDUP - Coding DIRTY Episode 7 🚨🚨\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“Gradually roll out your releases to a small group of people”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e~ roughly what prime said (I’m listening live)\u003c/p\u003e\n\u003cp\u003eThis really hit home with me, tests can be so good at making sure that we dont repeat bugs and that laser focused things work, tests are generally small and focused, but this does not replace some sort of integration testing.  These days very few things are written as a monolith, and hence there are a lot of interactions that really need to play well together accross various systems.\u003c/p\u003e\n\u003cp\u003eThey call out Crowdstrike here, which took down the world blue screening critical windows systems everywhere in 2024.  It was revealed that a small changed was rushed through and skipped critical rollout paths since it seemed like a small change.  Crowdstrike also runs at a super low kernel level of access and a small memory bug can kill the system.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hbEWfC4k-Gw\" title=\"🚨🚨 THE STANDUP - Coding DIRTY Episode 7 🚨🚨\" playlabel=\"Play: 🚨🚨 THE STANDUP - Coding DIRTY Episode 7 🚨🚨\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n\u003e \"Gradually roll out your releases to a small group of people\"\n\n\n~ roughly what prime said (I'm listening live)\n\nThis really hit home with me, tests can be so good at making sure that we dont repeat bugs and that laser focused things work, tests are generally small and focused, but this does not replace some sort of integration testing.  These days very few things are written as a monolith, and hence there are a lot of interactions that really need to play well together accross various systems.\n\nThey call out Crowdstrike here, which took down the world blue screening critical windows systems everywhere in 2024.  It was revealed that a small changed was rushed through and skipped critical rollout paths since it seemed like a small change.  Crowdstrike also runs at a super low kernel level of access and a small memory bug can kill the system.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=hbEWfC4k-Gw",
      "date_published": "2025-05-07T18:00:09Z",
      "date_modified": "2025-05-07T18:00:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "testing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-623/",
      "url": "https://go.waylonwalker.com/thought-623/",
      "title": "💭 Learning monitoring",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://waylonwalker.com/thoughts/thought-623/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewaylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m trying to level up my sre game.  I’m trying to set up grafana dashboards for everything and it is such a wide surface area.  It’s never just one thing you have to have 3 or more things hooked together in order for the data to flow.\u003c/p\u003e\n\u003cp\u003eI’m really getting not invented here vibes, and thoughts that I can just build this myself.  Not grafana and it’s scalability necessarily, but small components of observability.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://waylonwalker.com/thoughts/thought-623/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewaylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm trying to level up my sre game.  I'm trying to set up grafana dashboards for everything and it is such a wide surface area.  It's never just one thing you have to have 3 or more things hooked together in order for the data to flow.\n\nI'm really getting not invented here vibes, and thoughts that I can just build this myself.  Not grafana and it's scalability necessarily, but small components of observability.  \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://waylonwalker.com/thoughts/thought-623/",
      "date_published": "2025-05-07T15:05:45Z",
      "date_modified": "2025-05-07T15:05:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fleeting",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-622/",
      "url": "https://go.waylonwalker.com/thought-622/",
      "title": "💭 Kubernetes Monitoring Helm tutorial | Grafana Loki documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://grafana.com/docs/loki/latest/send-data/k8s-monitoring-helm/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://grafana.com/meta-generator/Kubernetes+Monitoring+Helm+tutorial@@@loki@@@9.png\" alt=\"Kubernetes Monitoring Helm tutorial | Grafana Loki documentation\" loading=\"lazy\"/ data-glightbox=\"description: Kubernetes Monitoring Helm tutorial | Grafana Loki documentation\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  Kubernetes Monitoring Helm tutorial | Grafana Loki documentation\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGrafana Labs · grafana.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a really  great guide to setting up kubernetes monitoring with helm, it uses loki as a log datasource and alloy as a collector of kubernetes logs, events, and nodes.  The charts are setup really well to start collecting logs from all your kubernetes pods.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://grafana.com/docs/loki/latest/send-data/k8s-monitoring-helm/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://grafana.com/meta-generator/Kubernetes+Monitoring+Helm+tutorial@@@loki@@@9.png\" alt=\"Kubernetes Monitoring Helm tutorial | Grafana Loki documentation\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  Kubernetes Monitoring Helm tutorial | Grafana Loki documentation\n\n\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGrafana Labs \u0026middot; grafana.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a really  great guide to setting up kubernetes monitoring with helm, it uses loki as a log datasource and alloy as a collector of kubernetes logs, events, and nodes.  The charts are setup really well to start collecting logs from all your kubernetes pods.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://grafana.com/docs/loki/latest/send-data/k8s-monitoring-helm/",
      "date_published": "2025-05-07T01:42:38Z",
      "date_modified": "2025-05-07T01:42:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "grafana",
        "loki",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-621/",
      "url": "https://go.waylonwalker.com/thought-621/",
      "title": "💭 Configure the Tempo data source | Grafana documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://grafana.com/docs/grafana/latest/datasources/tempo/configure-tempo-data-source/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://grafana.com/meta-generator/Configure+the+Tempo+data+source@@@grafana@@@8.png\" alt=\"Configure the Tempo data source | Grafana documentation\" loading=\"lazy\"/ data-glightbox=\"description: Configure the Tempo data source | Grafana documentation\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  Configure the Tempo data source | Grafana documentation\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGrafana Labs · grafana.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eReally helpful article to getting tempo datasource setup in grafana, this enables you to see span and trace data within grafana.  This data helps debug and work through issues that you might come into  with performance and need to see the timing of requests along with logs.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://grafana.com/docs/grafana/latest/datasources/tempo/configure-tempo-data-source/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://grafana.com/meta-generator/Configure+the+Tempo+data+source@@@grafana@@@8.png\" alt=\"Configure the Tempo data source | Grafana documentation\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  Configure the Tempo data source | Grafana documentation\n\n\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGrafana Labs \u0026middot; grafana.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nReally helpful article to getting tempo datasource setup in grafana, this enables you to see span and trace data within grafana.  This data helps debug and work through issues that you might come into  with performance and need to see the timing of requests along with logs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://grafana.com/docs/grafana/latest/datasources/tempo/configure-tempo-data-source/",
      "date_published": "2025-05-07T01:38:20Z",
      "date_modified": "2025-05-07T01:38:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "grafana",
        "tempo",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/grafana-dashboards-as-k8s-configmap/",
      "url": "https://go.waylonwalker.com/grafana-dashboards-as-k8s-configmap/",
      "title": "grafana dashboards as k8s configmap",
      "content_html": "\u003cp\u003eI’m trying to learn proper logs, monitoring, otel, and grafana.  Today I\nimported a bunch of pre-made k8s dashboards and made a few of my own for\nspecific apps, and it made me want to know how I can turn my own custom\ndashboards into infrastructure as code.  Turns out grafana makes it pretty easy\nto do this, if you have the grafana dashboard sidecar running.  It will pick up\nany ConfigMap with the grafana_dashboard label and import it.\u003c/p\u003e\n\u003cp\u003eGo to Dashboards -\u0026gt; Pick a Dashboard -\u0026gt; Export -\u0026gt; JSON.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/530e8515-a72a-4341-82d7-37f6f985e327.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/530e8515-a72a-4341-82d7-37f6f985e327.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/d792b2db-2dcf-465f-a400-e84f199ec22d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/d792b2db-2dcf-465f-a400-e84f199ec22d.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/684701cc-efec-4e2b-9630-c8aea7ff5b14.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/684701cc-efec-4e2b-9630-c8aea7ff5b14.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eConfigMap\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy-dashboard\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emeta\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003elabels\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003egrafana_dashboard\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;1\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003emy-dashboard.json\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e      \u0026#34;annotations\u0026#34;: {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e        \u0026#34;list\u0026#34;: [\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e      ...\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e      \u0026#34;uid\u0026#34;: \u0026#34;fel2uhjhepg5ce\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e      \u0026#34;version\u0026#34;: 3\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    }\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI'm trying to learn proper logs, monitoring, otel, and grafana.  Today I\nimported a bunch of pre-made k8s dashboards and made a few of my own for\nspecific apps, and it made me want to know how I can turn my own custom\ndashboards into infrastructure as code.  Turns out grafana makes it pretty easy\nto do this, if you have the grafana dashboard sidecar running.  It will pick up\nany ConfigMap with the grafana_dashboard label and import it.\n\nGo to Dashboards -\u003e Pick a Dashboard -\u003e Export -\u003e JSON.\n\n![image](https://dropper.waylonwalker.com/api/file/530e8515-a72a-4341-82d7-37f6f985e327.webp)\n\n![image](https://dropper.waylonwalker.com/api/file/d792b2db-2dcf-465f-a400-e84f199ec22d.webp)\n\n![image](https://dropper.waylonwalker.com/api/file/684701cc-efec-4e2b-9630-c8aea7ff5b14.webp)\n\n``` yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: my-dashboard\n  namespace: meta\n  labels:\n    grafana_dashboard: \"1\"\ndata:\n  my-dashboard.json: |\n    {\n      \"annotations\": {\n        \"list\": [\n      ...\n      \"uid\": \"fel2uhjhepg5ce\",\n      \"version\": 3\n    }\n```\n",
      "summary": "I'm trying to learn proper logs, monitoring, otel, and grafana. Today I imported a bunch of pre-made k8s dashboards and made a few of my own for specific...",
      "date_published": "2025-05-06T20:24:35Z",
      "date_modified": "2025-05-06T20:24:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "otel",
        "grafana",
        "k8s"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gitroomhq-postiz-app/",
      "url": "https://go.waylonwalker.com/gitroomhq-postiz-app/",
      "title": "⭐ gitroomhq postiz-app",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/gitroomhq/postiz-app\" 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\"\u003epostiz-app\u003c/a\u003e by \u003ca href=\"https://github.com/gitroomhq\" 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\"\u003egitroomhq\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003e📨 The ultimate social media scheduling tool, with a bunch of AI  🤖\u003c/p\u003e\n",
      "content_text": "\nJust starred [postiz-app](https://github.com/gitroomhq/postiz-app) by [gitroomhq](https://github.com/gitroomhq). It's an exciting project with a lot to offer.\n\n📨 The ultimate social media scheduling tool, with a bunch of AI  🤖\n",
      "summary": "Just starred postiz-app by gitroomhq. It's an exciting project with a lot to offer.",
      "date_published": "2025-05-06T18:23:48Z",
      "date_modified": "2025-05-06T18:23:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wezterm-wezterm/",
      "url": "https://go.waylonwalker.com/wezterm-wezterm/",
      "title": "⭐ wezterm wezterm",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/wezterm/wezterm\" 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\"\u003ewezterm\u003c/a\u003e by \u003ca href=\"https://github.com/wezterm\" 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\"\u003ewezterm\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [wezterm](https://github.com/wezterm/wezterm) by [wezterm](https://github.com/wezterm), and it's truly impressive.\n\nA GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust\n",
      "summary": "I recently discovered wezterm by wezterm, and it's truly impressive.",
      "date_published": "2025-05-05T15:23:46Z",
      "date_modified": "2025-05-05T15:23:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-620/",
      "url": "https://go.waylonwalker.com/thought-620/",
      "title": "💭 Vectorizing Your Databases with Steve Pousty",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://ik.imagekit.io/podpage/tr:w-1200,h-630,c-force,bl-50:l-image,i-ik_canvas,bg-E8AA3A33,w-1200,h-630,l-end:l-image,ie-aHR0cHM6Ly9pbWcudHJhbnNpc3Rvci5mbS8wRzRSRHFsUFE4SGVvbzV4bUF0RmJLcVRMMlhiVnNTNl91bkNBVlI2OUhnL3JzOmZpbGw6MDowOjEvdzoxNDAwL2g6MTQwMC9xOjYwL21iOjUwMDAwMC9hSFIwY0hNNkx5OXBiV2N0L2RYQnNiMkZrTFhCeWIyUjEvWTNScGIyNHVkSEpoYm5OcC9jM1J2Y2k1bWJTOWpaRFpoL1l6a3pZbUkyTm1NMVpUSXkvWVdVMVpXVmxOekJoWkdNeS9NemRtWmk1d2JtYy5qcGc,w-550,h-550,c-at_max,lx-40,ly-40,lfo-top_left,l-end:l-text,ie-VmVjdG9yaXppbmcgWW91ciBEYXRhYmFzZXMgd2l0aCBTdGV2ZSBQb3VzdHk,w-550,fs-64,ff-Poppins,co-ffffff,ia-left,lx-630,ly-40,lfo-top_left,l-end/https://img.transistor.fm/0G4RDqlPQ8Heoo5xmAtFbKqTL2XbVsS6_unCAVR69Hg/rs:fill:0:0:1/w:1400/h:1400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9jZDZh/YzkzYmI2NmM1ZTIy/YWU1ZWVlNzBhZGMy/MzdmZi5wbmc.jpg?ik-t=1776471303\u0026amp;ik-s=794e85edaf5bd95e33fe0bb7974332b243d518b6\" alt=\"Vectorizing Your Databases with Steve Pousty — What exactly is an LLM doing and why do you need to learn so many new terms? Steve Pousty is here to explain that most of those new terms are things you already kno…\" loading=\"lazy\"/ data-glightbox=\"description: Vectorizing Your Databases with Steve Pousty — What exactly is an LLM doing and why do you need to learn so many new terms? Steve Pousty is here to explain that most of those new terms are things you already kno…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVectorizing Your Databases with Steve Pousty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhat exactly is an LLM doing and why do you need to learn so many new terms? Steve Pousty is here to explain that most of those new terms are things you already kno…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFork Around And Find Out · fafo.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSteve is such a great listen, the neurospicy 🌶️ rambles this episode goes on is so relatable.  I feel like I really missed out on some great takes on intellij vs neovim, but got some really great knowledge about vector db’s, embedding, text compression, similarities to vector algegra like infinite craft.\u003c/p\u003e\n\u003cp\u003eJust popped open infinitecraft and I’ve definitely played this with my kids before, super fun, just could not remember the name of this one.  I do remember an android one as well that is alchemist or something like that, which we have also played a lot.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://ik.imagekit.io/podpage/tr:w-1200,h-630,c-force,bl-50:l-image,i-ik_canvas,bg-E8AA3A33,w-1200,h-630,l-end:l-image,ie-aHR0cHM6Ly9pbWcudHJhbnNpc3Rvci5mbS8wRzRSRHFsUFE4SGVvbzV4bUF0RmJLcVRMMlhiVnNTNl91bkNBVlI2OUhnL3JzOmZpbGw6MDowOjEvdzoxNDAwL2g6MTQwMC9xOjYwL21iOjUwMDAwMC9hSFIwY0hNNkx5OXBiV2N0L2RYQnNiMkZrTFhCeWIyUjEvWTNScGIyNHVkSEpoYm5OcC9jM1J2Y2k1bWJTOWpaRFpoL1l6a3pZbUkyTm1NMVpUSXkvWVdVMVpXVmxOekJoWkdNeS9NemRtWmk1d2JtYy5qcGc,w-550,h-550,c-at_max,lx-40,ly-40,lfo-top_left,l-end:l-text,ie-VmVjdG9yaXppbmcgWW91ciBEYXRhYmFzZXMgd2l0aCBTdGV2ZSBQb3VzdHk,w-550,fs-64,ff-Poppins,co-ffffff,ia-left,lx-630,ly-40,lfo-top_left,l-end/https://img.transistor.fm/0G4RDqlPQ8Heoo5xmAtFbKqTL2XbVsS6_unCAVR69Hg/rs:fill:0:0:1/w:1400/h:1400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS9jZDZh/YzkzYmI2NmM1ZTIy/YWU1ZWVlNzBhZGMy/MzdmZi5wbmc.jpg?ik-t=1776471303\u0026amp;ik-s=794e85edaf5bd95e33fe0bb7974332b243d518b6\" alt=\"Vectorizing Your Databases with Steve Pousty — What exactly is an LLM doing and why do you need to learn so many new terms? Steve Pousty is here to explain that most of those new terms are things you already kno…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVectorizing Your Databases with Steve Pousty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhat exactly is an LLM doing and why do you need to learn so many new terms? Steve Pousty is here to explain that most of those new terms are things you already kno…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFork Around And Find Out \u0026middot; fafo.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSteve is such a great listen, the neurospicy 🌶️ rambles this episode goes on is so relatable.  I feel like I really missed out on some great takes on intellij vs neovim, but got some really great knowledge about vector db's, embedding, text compression, similarities to vector algegra like infinite craft. \n\n\nJust popped open infinitecraft and I've definitely played this with my kids before, super fun, just could not remember the name of this one.  I do remember an android one as well that is alchemist or something like that, which we have also played a lot.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.fafo.fm/vectorizing-your-databases-with-steve-pousty/",
      "date_published": "2025-05-04T17:54:39Z",
      "date_modified": "2025-05-04T17:54:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "rag",
        "vector",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-618/",
      "url": "https://go.waylonwalker.com/thought-618/",
      "title": "💭 Recovering from Disaster with Seth Eliot",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.fafo.fm/recovering-from-disaster-with-seth-eliot/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.fafo.fm.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.fafo.fm.jpg\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efafo.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis episode really got me thinking about the difference between HA and DR and my approach to each one.  They talk about it from the perspective of a cach cow kind of app rather than a \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 or internal tooling, but think of HA as 9’s how many 9s are we willing to pay for, tink of DR as dollars how many dollars will we loose during the period of recovery.  So much more in the episode, a lot of talk around cloud vendors and what they give you vs a purpose build platform with HA and DR in mind.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.fafo.fm/recovering-from-disaster-with-seth-eliot/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efafo.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis episode really got me thinking about the difference between HA and DR and my approach to each one.  They talk about it from the perspective of a cach cow kind of app rather than a homelab or internal tooling, but think of HA as 9's how many 9s are we willing to pay for, tink of DR as dollars how many dollars will we loose during the period of recovery.  So much more in the episode, a lot of talk around cloud vendors and what they give you vs a purpose build platform with HA and DR in mind.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.fafo.fm/recovering-from-disaster-with-seth-eliot/",
      "date_published": "2025-05-04T17:48:54Z",
      "date_modified": "2025-05-04T17:48:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cloud",
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kubero-dev-kubero/",
      "url": "https://go.waylonwalker.com/kubero-dev-kubero/",
      "title": "⭐ kubero-dev kubero",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/kubero-dev/kubero\" 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\"\u003ekubero\u003c/a\u003e by \u003ca href=\"https://github.com/kubero-dev\" 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\"\u003ekubero-dev\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA free and \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 PaaS alternative to Heroku / Netlify / Coolify / Vercel / Dokku / Portainer running on Kubernetes\u003c/p\u003e\n",
      "content_text": "\nJust starred [kubero](https://github.com/kubero-dev/kubero) by [kubero-dev](https://github.com/kubero-dev). It's an exciting project with a lot to offer.\n\nA free and self-hosted PaaS alternative to Heroku / Netlify / Coolify / Vercel / Dokku / Portainer running on Kubernetes\n",
      "summary": "Just starred kubero by kubero-dev. It's an exciting project with a lot to offer.",
      "date_published": "2025-05-04T17:39:16Z",
      "date_modified": "2025-05-04T17:39:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ruff-single-line-import/",
      "url": "https://go.waylonwalker.com/ruff-single-line-import/",
      "title": "ruff single line import",
      "content_html": "\u003cp\u003eI’ve been using ruff to lint my python code for quite awhile now, I was pretty\nearly to jump on it after release.  Some of my projects have had a nice\nforce-single-line setting and some have not.  I dug into the docs and it was\nnot clear what I needed to make it work.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eruff\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eselect\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;I\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"c\"\u003e# you probably want others as well\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eruff\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eisort\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eforce-single-line\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTurns out I was missing \u003cstrong\u003eI\u003c/strong\u003esort in the select list.\u003c/p\u003e\n",
      "content_text": "\nI've been using ruff to lint my python code for quite awhile now, I was pretty\nearly to jump on it after release.  Some of my projects have had a nice\nforce-single-line setting and some have not.  I dug into the docs and it was\nnot clear what I needed to make it work.\n\n``` toml\n[tool.ruff]\nselect = ['I'] # you probably want others as well\n\n[tool.ruff.isort]\nforce-single-line = true\n```\n\nTurns out I was missing **I**sort in the select list.\n",
      "summary": "I've been using ruff to lint my python code for quite awhile now, I was pretty early to jump on it after release. Some of my projects have had a nice...",
      "date_published": "2025-05-04T14:23:41Z",
      "date_modified": "2025-05-04T14:23:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linting",
        "ruff"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-617/",
      "url": "https://go.waylonwalker.com/thought-617/",
      "title": "💭 Red-Knot: Ruff's new Type Checker - Talk Python Live Stream - ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"XVwpL_cAvrw\" title=\"ty: Astral\u0026#39;s New Type Checker (Formerly Red-Knot) - Talk Python to Me Ep. 506\" playlabel=\"Play: ty: Astral\u0026#39;s New Type Checker (Formerly Red-Knot) - Talk Python to Me Ep. 506\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eAstral is doing great things in the python industry.  They are disrupting entire categories of tools with extremely fast, easy to use, and feature rich alternatives that make it really hard to keep using the incumbent.   So far I am seeing no signs of evil, sometimes with such a disrupter there is some sort of downside that make it hard to want to do the switch.  In the interview they even mention things like leaning on lsp so that it works across all editors rather than building out vscode integrations that work for \u003cstrong\u003emost\u003c/strong\u003e developers.  As a neovim user I greatly apreciate this.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"XVwpL_cAvrw\" title=\"ty: Astral\u0026#39;s New Type Checker (Formerly Red-Knot) - Talk Python to Me Ep. 506\" playlabel=\"Play: ty: Astral\u0026#39;s New Type Checker (Formerly Red-Knot) - Talk Python to Me Ep. 506\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nAstral is doing great things in the python industry.  They are disrupting entire categories of tools with extremely fast, easy to use, and feature rich alternatives that make it really hard to keep using the incumbent.   So far I am seeing no signs of evil, sometimes with such a disrupter there is some sort of downside that make it hard to want to do the switch.  In the interview they even mention things like leaning on lsp so that it works across all editors rather than building out vscode integrations that work for **most** developers.  As a neovim user I greatly apreciate this.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=XVwpL_cAvrw",
      "date_published": "2025-05-02T01:06:05Z",
      "date_modified": "2025-05-02T01:06:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-616/",
      "url": "https://go.waylonwalker.com/thought-616/",
      "title": "💭 Playground | Red Knot",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://types.ruff.rs/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/Astral.png\" alt=\"Playground | ty — An in-browser playground for ty, an extremely fast Python type-checker written in Rust.\" loading=\"lazy\"/ data-glightbox=\"description: Playground | ty — An in-browser playground for ty, an extremely fast Python type-checker written in Rust.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePlayground | ty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn in-browser playground for ty, an extremely fast Python type-checker written in Rust.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etypes.ruff.rs\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ety, has a playground running at types.ruff.rs.  You can edit code in there and see what the type checker results would be in browser.  This looks good, excited to see it running in my lsp.\u003c/p\u003e\n\u003cp\u003eHere is an example where a Optional may not be defined.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/783e4d9e-8b23-4304-8921-2ae05aebcc8a.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/783e4d9e-8b23-4304-8921-2ae05aebcc8a.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eChecking for existance before using it resolves the issue.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/cc28335c-4130-4bf4-829d-0ff39f2aa32d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/cc28335c-4130-4bf4-829d-0ff39f2aa32d.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://types.ruff.rs/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/Astral.png\" alt=\"Playground | ty — An in-browser playground for ty, an extremely fast Python type-checker written in Rust.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePlayground | ty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn in-browser playground for ty, an extremely fast Python type-checker written in Rust.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etypes.ruff.rs\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nty, has a playground running at types.ruff.rs.  You can edit code in there and see what the type checker results would be in browser.  This looks good, excited to see it running in my lsp.\n\nHere is an example where a Optional may not be defined.\n\n![image](https://dropper.wayl.one/api/file/783e4d9e-8b23-4304-8921-2ae05aebcc8a.webp)\n\nChecking for existance before using it resolves the issue.\n\n![image](https://dropper.wayl.one/api/file/cc28335c-4130-4bf4-829d-0ff39f2aa32d.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://types.ruff.rs/",
      "date_published": "2025-05-02T01:02:31Z",
      "date_modified": "2025-05-02T01:02:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-list-posts-by-year/",
      "url": "https://go.waylonwalker.com/markata-list-posts-by-year/",
      "title": "Markata list posts by year",
      "content_html": "\u003cp\u003eI was looking back at my \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 page today and wondered what were my\nposts about back at the beginning.  My blog is managed by \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 so I\nlooked at a few ways you could pull those posts up.  Turns out it’s pretty\nsimple to do, use the markata map with a filter.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emarkata\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;title, slug, date\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nb\"\u003efilter\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;date.year==2016\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esort\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;date\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ethe filter is python eval that should evaluate to a boolean, all of the\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eattributes of the post are available to filter on.\u003c/p\u003e\n\u003c/div\u003e\n\u003ch3 id=\"result\"\u003eResult \u003ca href=\"#result\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;⭐ jupyterlab jupyterlab\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;jupyterlab-jupyterlab\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2016\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e12\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e13\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;⭐ nickhould tidy-data-python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;nickhould-tidy-data-python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2016\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e12\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;⭐ mikeckennedy write-pythonic-code-demos\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;mikeckennedy-write-pythonic-code-demos\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2016\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e11\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;mikeckennedy-write-pythonic-code-for-better-data-science-webcast\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2016\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e11\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;⭐ rajshah4 dlgroup\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;rajshah4-dlgroup\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2016\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e11\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e18\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;⭐ pandas-dev pandas\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pandas-dev-pandas\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2016\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou could use the \u003ccode\u003elist\u003c/code\u003e command as well right within your shell and the same\nmap and filters work.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⬢ \u003cspan class=\"o\"\u003e[\u003c/span\u003edevtainer-0.1.3\u003cspan class=\"o\"\u003e]\u003c/span\u003e ❯ markata list --map title --filter\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;date.year==2016\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e22:35:06\u003cspan class=\"o\"\u003e]\u003c/span\u003e 2088/2145 posts skipped                                                                       skip.py:36\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           57/2145 posts not skipped                                                                     skip.py:37\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⭐ pandas-dev pandas\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⭐ rajshah4 dlgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⭐ mikeckennedy write-pythonic-code-demos\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⭐ nickhould tidy-data-python\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⭐ jupyterlab jupyterlab\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou could also do it with jin right inside of a markdown post using the\n\u003ca href=\"https://markata.dev/markata/plugins/jinja-md/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/markata.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/markata.dev.ico\" class=\"has-avatar  has-avatar-before\"\u003ejinja_md\u003c/a\u003e plugin.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% raw %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% for title, slug, date in markata.map(\u0026#39;title, slug, date\u0026#39;, filter=\u0026#39;date.year==2016\u0026#39;, sort=\u0026#39;date\u0026#39;) %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003e{{title}}\u003c/span\u003e](\u003cspan class=\"na\"\u003e{{slug}}\u003c/span\u003e) - {{date}}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% endfor %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% endraw %}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eYou do have to `jinja: true` in the frontmatter of the post.\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 id=\"result-1\"\u003eResult \u003ca href=\"#result-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e{% for title, slug, date in markata.map(’title, slug, date’, filter=‘date.year==2016’, sort=‘date’) %}\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"%7B%7Bslug%7D%7D\"\u003e{{title}}\u003c/a\u003e - {{date}}\n{% endfor %}\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nI was looking back at my \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 page today and wondered what were my\nposts about back at the beginning.  My blog is managed by \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 so I\nlooked at a few ways you could pull those posts up.  Turns out it's pretty\nsimple to do, use the markata map with a filter.\n\n\n``` python\nfrom markata import Markata\n\nm.map('title, slug, date', filter='date.year==2016', sort='date')\n```\n\n!!! Note\n    the filter is python eval that should evaluate to a boolean, all of the\n    attributes of the post are available to filter on.\n\n### Result\n\n``` python\n[\n    ('⭐ jupyterlab jupyterlab', 'jupyterlab-jupyterlab', datetime.date(2016, 12, 13)),\n    ('⭐ nickhould tidy-data-python', 'nickhould-tidy-data-python', datetime.date(2016, 12, 9)),\n    (\n        '⭐ mikeckennedy write-pythonic-code-demos',\n        'mikeckennedy-write-pythonic-code-demos',\n        datetime.date(2016, 11, 22)\n    ),\n    (\n        '⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast',\n        'mikeckennedy-write-pythonic-code-for-better-data-science-webcast',\n        datetime.date(2016, 11, 22)\n    ),\n    ('⭐ rajshah4 dlgroup', 'rajshah4-dlgroup', datetime.date(2016, 11, 18)),\n    ('⭐ pandas-dev pandas', 'pandas-dev-pandas', datetime.date(2016, 10, 5))\n]\n```\n\nYou could use the `list` command as well right within your shell and the same\nmap and filters work.\n\n``` bash\n⬢ [devtainer-0.1.3] ❯ markata list --map title --filter='date.year==2016'\n[22:35:06] 2088/2145 posts skipped                                                                       skip.py:36\n           57/2145 posts not skipped                                                                     skip.py:37\n\n⭐ pandas-dev pandas\n⭐ rajshah4 dlgroup\n⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast\n⭐ mikeckennedy write-pythonic-code-demos\n⭐ nickhould tidy-data-python\n⭐ jupyterlab jupyterlab\n```\n\nYou could also do it with jin right inside of a markdown post using the\n[jinja_md](https://markata.dev/markata/plugins/jinja-md/) plugin.\n\n``` md\n{% raw %}\n{% for title, slug, date in markata.map('title, slug, date', filter='date.year==2016', sort='date') %}\n* [{{title}}]({{slug}}) - {{date}}\n{% endfor %}\n{% endraw %}\n```\n\n!!! Note\n    You do have to `jinja: true` in the frontmatter of the post.\n\n### Result\n\n{% for title, slug, date in markata.map('title, slug, date', filter='date.year==2016', sort='date') %}\n* [{{title}}]({{slug}}) - {{date}}\n{% endfor %}\n",
      "summary": "I was looking back at my analytics page today and wondered what were my posts about back at the beginning. My blog is managed by markata so I looked at a few...",
      "date_published": "2025-05-01T22:35:47Z",
      "date_modified": "2025-05-01T22:35:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-615/",
      "url": "https://go.waylonwalker.com/thought-615/",
      "title": "💭 pypi package ty",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/ty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"ty — An extremely fast Python type checker, written in Rust.\" loading=\"lazy\"/ data-glightbox=\"description: ty — An extremely fast Python type checker, written in Rust.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ety\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn extremely fast Python type checker, written in Rust.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI · pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAstral is working on some great things around python, they have created a high standard for python tooling built on rust that works really well, runs fast and covers everything in the space it resides in. ty appears to be their linter coming soon.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/ty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"ty — An extremely fast Python type checker, written in Rust.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ety\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn extremely fast Python type checker, written in Rust.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI \u0026middot; pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAstral is working on some great things around python, they have created a high standard for python tooling built on rust that works really well, runs fast and covers everything in the space it resides in. ty appears to be their linter coming soon.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/ty/",
      "date_published": "2025-05-01T20:44:27Z",
      "date_modified": "2025-05-01T20:44:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-614/",
      "url": "https://go.waylonwalker.com/thought-614/",
      "title": "💭 3D Printable Power Brick Bracket Designer",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bracket.engineer/?width=113.5\u0026amp;height=63\u0026amp;depth=98\u0026amp;bracketThickness=3\u0026amp;ribbingCount=9\u0026amp;ribbingThickness=2.5\u0026amp;holeDiameter=5\u0026amp;holeCount=1\u0026amp;earWidth=17\u0026amp;keyHole=on\u0026amp;color=%2344ff00\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/assets/og-BzQVqFKk.png\" alt=\"3D Printable Power Brick Bracket Designer — Generate custom 3D printable power brick brackets for your devices. Design and export your own mounting solutions.\" loading=\"lazy\"/ data-glightbox=\"description: 3D Printable Power Brick Bracket Designer — Generate custom 3D printable power brick brackets for your devices. Design and export your own mounting solutions.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e3D Printable Power Brick Bracket Designer\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGenerate custom 3D printable power brick brackets for your devices. Design and export your own mounting solutions.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBracket Engineer · bracket.engineer\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is madness that Wes Bos made this with manifold.js and no openscad!  Yes, I have these stupid brackets everywhere, yes, I hand model my own brackets.  No I don’t do it enough.  I don’t like that these model generators like openscad cannot make fillets and chamfers, but I appreciate the heck out of the speed and automation you can make iterations of things.\u003c/p\u003e\n\u003cp\u003eLink to the promo video.\n\u003ca href=\"https://bsky.app/profile/wesbos.com/post/3lo4h7unk6s2i\" 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\"\u003ehttps://bsky.app/profile/wesbos.com/post/3lo4h7unk6s2i\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bracket.engineer/?width=113.5\u0026amp;height=63\u0026amp;depth=98\u0026amp;bracketThickness=3\u0026amp;ribbingCount=9\u0026amp;ribbingThickness=2.5\u0026amp;holeDiameter=5\u0026amp;holeCount=1\u0026amp;earWidth=17\u0026amp;keyHole=on\u0026amp;color=%2344ff00\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/assets/og-BzQVqFKk.png\" alt=\"3D Printable Power Brick Bracket Designer — Generate custom 3D printable power brick brackets for your devices. Design and export your own mounting solutions.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e3D Printable Power Brick Bracket Designer\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGenerate custom 3D printable power brick brackets for your devices. Design and export your own mounting solutions.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBracket Engineer \u0026middot; bracket.engineer\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is madness that Wes Bos made this with manifold.js and no openscad!  Yes, I have these stupid brackets everywhere, yes, I hand model my own brackets.  No I don't do it enough.  I don't like that these model generators like openscad cannot make fillets and chamfers, but I appreciate the heck out of the speed and automation you can make iterations of things.\n\nLink to the promo video.\nhttps://bsky.app/profile/wesbos.com/post/3lo4h7unk6s2i\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bracket.engineer/?width=113.5\u0026height=63\u0026depth=98\u0026bracketThickness=3\u0026ribbingCount=9\u0026ribbingThickness=2.5\u0026holeDiameter=5\u0026holeCount=1\u0026earWidth=17\u0026keyHo...",
      "date_published": "2025-05-01T14:17:43Z",
      "date_modified": "2025-05-01T14:17:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wesbos-bracket-engineer/",
      "url": "https://go.waylonwalker.com/wesbos-bracket-engineer/",
      "title": "⭐ wesbos bracket.engineer",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/wesbos/bracket.engineer\" 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\"\u003ebracket.engineer\u003c/a\u003e by \u003ca href=\"https://github.com/wesbos\" 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\"\u003ewesbos\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eGenerate 3D printable power brick brackets.\u003c/p\u003e\n",
      "content_text": "\n[bracket.engineer](https://github.com/wesbos/bracket.engineer) by [wesbos](https://github.com/wesbos) is a game-changer in its space. Excited to see how it evolves.\n\nGenerate 3D printable power brick brackets.\n",
      "summary": "bracket.engineer by wesbos is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-05-01T14:02:55Z",
      "date_modified": "2025-05-01T14:02:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-613/",
      "url": "https://go.waylonwalker.com/thought-613/",
      "title": "💭 661: Working Vacations, Ripping Out JavaScript, and Non-US Clo...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://shoptalkshow.com/661/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://i0.wp.com/shoptalkshow.com/wp-content/uploads/2013/03/logo-itunes-1400.png?fit=1200%2C1200\u0026amp;ssl=1\" alt=\"661: Working Vacations, Ripping Out JavaScript, and Non-US Cloud Service Options — What are the non-US cloud services options, falling off the blogging train and trying to get back on, working on vacation, Chris recaps the Alaskan Folk Festival experience, how often do you go bac…\" loading=\"lazy\"/ data-glightbox=\"description: 661: Working Vacations, Ripping Out JavaScript, and Non-US Cloud Service Options — What are the non-US cloud services options, falling off the blogging train and trying to get back on, working on vacation, Chris recaps the Alaskan Folk Festival experience, how often do you go bac…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e661: Working Vacations, Ripping Out JavaScript, and Non-US Cloud Service Options\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhat are the non-US cloud services options, falling off the blogging train and trying to get back on, working on vacation, Chris recaps the Alaskan Folk Festival experience, how often do you go bac…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eShopTalk · shoptalkshow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eChris hit me where it feels about 10 minutes in.  He said he has not been writing on his site as much lately and how hard it is to get back in.  He mentions having a baby idea of a post, but then having the thought do you really want to come back from a long break with this!\u003c/p\u003e\n\u003cp\u003eMomentum is a b**** when you got it you cant stop, and when you don’t you can’t stop.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://shoptalkshow.com/661/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://i0.wp.com/shoptalkshow.com/wp-content/uploads/2013/03/logo-itunes-1400.png?fit=1200%2C1200\u0026amp;ssl=1\" alt=\"661: Working Vacations, Ripping Out JavaScript, and Non-US Cloud Service Options — What are the non-US cloud services options, falling off the blogging train and trying to get back on, working on vacation, Chris recaps the Alaskan Folk Festival experience, how often do you go bac…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e661: Working Vacations, Ripping Out JavaScript, and Non-US Cloud Service Options\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhat are the non-US cloud services options, falling off the blogging train and trying to get back on, working on vacation, Chris recaps the Alaskan Folk Festival experience, how often do you go bac…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eShopTalk \u0026middot; shoptalkshow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nChris hit me where it feels about 10 minutes in.  He said he has not been writing on his site as much lately and how hard it is to get back in.  He mentions having a baby idea of a post, but then having the thought do you really want to come back from a long break with this!\n\nMomentum is a b**** when you got it you cant stop, and when you don't you can't stop.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://shoptalkshow.com/661/",
      "date_published": "2025-05-01T14:00:47Z",
      "date_modified": "2025-05-01T14:00:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-612/",
      "url": "https://go.waylonwalker.com/thought-612/",
      "title": "💭 The Worst OS - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"8T5pyGiTPdE\" title=\"The Worst OS\" playlabel=\"Play: The Worst OS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHow is usability and it doing the thing I paid for it to do a selling point??  Any time I’ve touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"8T5pyGiTPdE\" title=\"The Worst OS\" playlabel=\"Play: The Worst OS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHow is usability and it doing the thing I paid for it to do a selling point??  Any time I've touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=8T5pyGiTPdE",
      "date_published": "2025-05-01T12:54:13Z",
      "date_modified": "2025-05-01T12:54:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-611/",
      "url": "https://go.waylonwalker.com/thought-611/",
      "title": "💭 The Worst OS - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"8T5pyGiTPdE\" title=\"The Worst OS\" playlabel=\"Play: The Worst OS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHow is usability and it doing the thing I paid for it to do a selling point??  Any time I’ve touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"8T5pyGiTPdE\" title=\"The Worst OS\" playlabel=\"Play: The Worst OS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHow is usability and it doing the thing I paid for it to do a selling point??  Any time I've touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=8T5pyGiTPdE",
      "date_published": "2025-05-01T12:54:12Z",
      "date_modified": "2025-05-01T12:54:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-610/",
      "url": "https://go.waylonwalker.com/thought-610/",
      "title": "💭 A quote from Mark Zuckerberg",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/May/1/mark-zuckerberg/#atom-everything\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Mark Zuckerberg\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou also mentioned the whole Chatbot Arena thing, which I think is interesting and points to the challenge around how you do benchmarking. How do you know what models are …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting how confidently he says we can easily go to the top.  really makes you wonder what we the normies are leaving on the table by using these general purpose models and what could be achieved with really tuned in models.  Could I make an automatic blog tagger more accurately, maybe smaller, maybe tuned so well it runs fine on cpu?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2025/May/1/mark-zuckerberg/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Mark Zuckerberg\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou also mentioned the whole Chatbot Arena thing, which I think is interesting and points to the challenge around how you do benchmarking. How do you know what models are …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting how confidently he says we can easily go to the top.  really makes you wonder what we the normies are leaving on the table by using these general purpose models and what could be achieved with really tuned in models.  Could I make an automatic blog tagger more accurately, maybe smaller, maybe tuned so well it runs fine on cpu? \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2025/May/1/mark-zuckerberg/#atom-everything",
      "date_published": "2025-05-01T12:50:52Z",
      "date_modified": "2025-05-01T12:50:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-609/",
      "url": "https://go.waylonwalker.com/thought-609/",
      "title": "💭 Chris Coyier",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/04/30/12292/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJ0eHQiOiIiLCJ0ZW1wbGF0ZSI6ImZ1bGxzY3JlZW4iLCJibG9nX2lkIjo3NDA3NDI0OH0.zracDfi8GeV59c7on0CEZkCHzSNytmK5iu1Pxt9ADYUMQ\" alt=\"— P. Martin Ortiz: Web apps can easily adapt to whatever device you’re on. A single responsive website can run on your desktop, phone, tablet, or even a VR headset. What’s even more, they can be upda…\" loading=\"lazy\"/ data-glightbox=\"description: — P. Martin Ortiz: Web apps can easily adapt to whatever device you’re on. A single responsive website can run on your desktop, phone, tablet, or even a VR headset. What’s even more, they can be upda…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e \u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eP. Martin Ortiz: Web apps can easily adapt to whatever device you’re on. A single responsive website can run on your desktop, phone, tablet, or even a VR headset. What’s even more, they can be ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier · chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe web is everywhere, its the one true write once and run anywhere platform.  Millions sunk into browser performance and things like the v8 engine allow us to run our shitty websites anywhere and it still runs good…. most of the time\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/04/30/12292/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJ0eHQiOiIiLCJ0ZW1wbGF0ZSI6ImZ1bGxzY3JlZW4iLCJibG9nX2lkIjo3NDA3NDI0OH0.zracDfi8GeV59c7on0CEZkCHzSNytmK5iu1Pxt9ADYUMQ\" alt=\"— P. Martin Ortiz: Web apps can easily adapt to whatever device you’re on. A single responsive website can run on your desktop, phone, tablet, or even a VR headset. What’s even more, they can be upda…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e \u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eP. Martin Ortiz: Web apps can easily adapt to whatever device you’re on. A single responsive website can run on your desktop, phone, tablet, or even a VR headset. What’s even more, they can be ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier \u0026middot; chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe web is everywhere, its the one true write once and run anywhere platform.  Millions sunk into browser performance and things like the v8 engine allow us to run our shitty websites anywhere and it still runs good.... most of the time\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://chriscoyier.net/2025/04/30/12292/",
      "date_published": "2025-05-01T12:48:04Z",
      "date_modified": "2025-05-01T12:48:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-608/",
      "url": "https://go.waylonwalker.com/thought-608/",
      "title": "💭 Helm - Postiz Docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.postiz.com/installation/kubernetes-helm\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://postiz.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DInstallation%26title%3DHelm%26description%3DInstall%2BPostiz%2Busing%2BKubernetes%2Band%2BHelm%26logoLight%3Dhttps%253A%252F%252Fmintcdn.com%252Fpostiz%252FSZ3zBABjhg7UQcI8%252Flogo%252Flight.png%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DSZ3zBABjhg7UQcI8%2526q%253D85%2526s%253Dab950a1a5aa687eb0de8156022f7c7c9%26logoDark%3Dhttps%253A%252F%252Fmintcdn.com%252Fpostiz%252FSZ3zBABjhg7UQcI8%252Flogo%252Fdark.png%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DSZ3zBABjhg7UQcI8%2526q%253D85%2526s%253D4134d88b8fc8339a26775f8e48e95f7e%26primaryColor%3D%25239900e6%26lightColor%3D%2523b266ff%26darkColor%3D%25237700b3%26backgroundLight%3D%2523ffffff%26backgroundDark%3D%25230c0b10\u0026amp;w=1200\u0026amp;q=100\" alt=\"Helm - Postiz Documentation — Install Postiz using Kubernetes and Helm\" loading=\"lazy\"/ data-glightbox=\"description: Helm - Postiz Documentation — Install Postiz using Kubernetes and Helm\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHelm - Postiz Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInstall Postiz using Kubernetes and Helm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePostiz Documentation · docs.postiz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI didn’t realize that postiz had a helm chart, I just hand rolled mine based on the compose file they provide.  I went from running the compose stack locally to running in my \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 with kubernetes.  I am using cnpg rather than a postgres container which I really like the workflow of as far as backup and restore.  The one hiccup I ran into was changing the domain from localhost to my homelab domain killed all of my integrations and they needed the redirect url updated.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.postiz.com/installation/kubernetes-helm\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://postiz.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DInstallation%26title%3DHelm%26description%3DInstall%2BPostiz%2Busing%2BKubernetes%2Band%2BHelm%26logoLight%3Dhttps%253A%252F%252Fmintcdn.com%252Fpostiz%252FSZ3zBABjhg7UQcI8%252Flogo%252Flight.png%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DSZ3zBABjhg7UQcI8%2526q%253D85%2526s%253Dab950a1a5aa687eb0de8156022f7c7c9%26logoDark%3Dhttps%253A%252F%252Fmintcdn.com%252Fpostiz%252FSZ3zBABjhg7UQcI8%252Flogo%252Fdark.png%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DSZ3zBABjhg7UQcI8%2526q%253D85%2526s%253D4134d88b8fc8339a26775f8e48e95f7e%26primaryColor%3D%25239900e6%26lightColor%3D%2523b266ff%26darkColor%3D%25237700b3%26backgroundLight%3D%2523ffffff%26backgroundDark%3D%25230c0b10\u0026amp;w=1200\u0026amp;q=100\" alt=\"Helm - Postiz Documentation — Install Postiz using Kubernetes and Helm\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHelm - Postiz Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInstall Postiz using Kubernetes and Helm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePostiz Documentation \u0026middot; docs.postiz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI didn't realize that postiz had a helm chart, I just hand rolled mine based on the compose file they provide.  I went from running the compose stack locally to running in my homelab with kubernetes.  I am using cnpg rather than a postgres container which I really like the workflow of as far as backup and restore.  The one hiccup I ran into was changing the domain from localhost to my homelab domain killed all of my integrations and they needed the redirect url updated.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.postiz.com/installation/kubernetes-helm",
      "date_published": "2025-04-30T21:44:17Z",
      "date_modified": "2025-04-30T21:44:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "self-host",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/block-goose/",
      "url": "https://go.waylonwalker.com/block-goose/",
      "title": "⭐ block goose",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/block/goose\" 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\"\u003egoose\u003c/a\u003e by \u003ca href=\"https://github.com/block\" 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\"\u003eblock\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003ean open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM\u003c/p\u003e\n",
      "content_text": "\nCheck out [goose](https://github.com/block/goose) by [block](https://github.com/block). It's a well-crafted project with great potential.\n\nan open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM\n",
      "summary": "Check out goose by block. It's a well-crafted project with great potential.",
      "date_published": "2025-04-28T01:37:03Z",
      "date_modified": "2025-04-28T01:37:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/manusa-kubernetes-mcp-server/",
      "url": "https://go.waylonwalker.com/manusa-kubernetes-mcp-server/",
      "title": "⭐ manusa kubernetes-mcp-server",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/manusa/kubernetes-mcp-server\" 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\"\u003ekubernetes-mcp-server\u003c/a\u003e by \u003ca href=\"https://github.com/manusa\" 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\"\u003emanusa\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eModel Context Protocol (MCP) server for Kubernetes and OpenShift\u003c/p\u003e\n",
      "content_text": "\nCheck out [kubernetes-mcp-server](https://github.com/manusa/kubernetes-mcp-server) by [manusa](https://github.com/manusa). It's a well-crafted project with great potential.\n\nModel Context Protocol (MCP) server for Kubernetes and OpenShift\n",
      "summary": "Check out kubernetes-mcp-server by manusa. It's a well-crafted project with great potential.",
      "date_published": "2025-04-28T01:36:45Z",
      "date_modified": "2025-04-28T01:36:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/containers-kubernetes-mcp-server/",
      "url": "https://go.waylonwalker.com/containers-kubernetes-mcp-server/",
      "title": "⭐ containers kubernetes-mcp-server",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/containers/kubernetes-mcp-server\" 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\"\u003ekubernetes-mcp-server\u003c/a\u003e by \u003ca href=\"https://github.com/containers\" 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\"\u003econtainers\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eModel Context Protocol (MCP) server for Kubernetes and OpenShift\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [kubernetes-mcp-server](https://github.com/containers/kubernetes-mcp-server) by [containers](https://github.com/containers).\n\nModel Context Protocol (MCP) server for Kubernetes and OpenShift\n",
      "summary": "Looking for inspiration? kubernetes-mcp-server by containers.",
      "date_published": "2025-04-28T01:36:45Z",
      "date_modified": "2025-04-28T01:36:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/punkpeye-awesome-mcp-servers/",
      "url": "https://go.waylonwalker.com/punkpeye-awesome-mcp-servers/",
      "title": "⭐ punkpeye awesome-mcp-servers",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/punkpeye\" 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\"\u003epunkpeye\u003c/a\u003e and their project \u003ca href=\"https://github.com/punkpeye/awesome-mcp-servers\" 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\"\u003eawesome-mcp-servers\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA collection of MCP servers.\u003c/p\u003e\n",
      "content_text": "\nCheck out [punkpeye](https://github.com/punkpeye) and their project [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers).\n\nA collection of MCP servers.\n",
      "summary": "Check out punkpeye and their project awesome-mcp-servers.",
      "date_published": "2025-04-28T01:36:29Z",
      "date_modified": "2025-04-28T01:36:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mozilla-ai-any-agent/",
      "url": "https://go.waylonwalker.com/mozilla-ai-any-agent/",
      "title": "⭐ mozilla-ai any-agent",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/mozilla-ai/any-agent\" 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\"\u003eany-agent\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/mozilla-ai\" 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\"\u003emozilla-ai\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA single interface to build and evaluate different agent frameworks\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [any-agent](https://github.com/mozilla-ai/any-agent), an amazing project by [mozilla-ai](https://github.com/mozilla-ai). It's worth exploring!\n\nA single interface to build and evaluate different agent frameworks\n",
      "summary": "I'm really excited about any-agent, an amazing project by mozilla-ai. It's worth exploring!",
      "date_published": "2025-04-28T01:36:25Z",
      "date_modified": "2025-04-28T01:36:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-598/",
      "url": "https://go.waylonwalker.com/thought-598/",
      "title": "💭 Louis Rossmann's Keynote Speech on Right to Repair - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2ol3rMem_Eg\" title=\"Louis Rossmann\u0026#39;s Keynote Speech on Right to Repair\" playlabel=\"Play: Louis Rossmann\u0026#39;s Keynote Speech on Right to Repair\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat talk from Lous Rossman!  TLDR you don’t own it, and stop pointing the finger calling everyone else an idiot for supporting the other brand, cause your’s probably also has different issues.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2ol3rMem_Eg\" title=\"Louis Rossmann\u0026#39;s Keynote Speech on Right to Repair\" playlabel=\"Play: Louis Rossmann\u0026#39;s Keynote Speech on Right to Repair\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat talk from Lous Rossman!  TLDR you don't own it, and stop pointing the finger calling everyone else an idiot for supporting the other brand, cause your's probably also has different issues.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=2ol3rMem_Eg",
      "date_published": "2025-04-27T19:35:21Z",
      "date_modified": "2025-04-27T19:35:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dtnewman-zev/",
      "url": "https://go.waylonwalker.com/dtnewman-zev/",
      "title": "⭐ dtnewman zev",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/dtnewman\" 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\"\u003edtnewman\u003c/a\u003e and their project \u003ca href=\"https://github.com/dtnewman/zev\" 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\"\u003ezev\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA simple CLI tool to help you remember terminal commands\u003c/p\u003e\n",
      "content_text": "\nCheck out [dtnewman](https://github.com/dtnewman) and their project [zev](https://github.com/dtnewman/zev).\n\nA simple CLI tool to help you remember terminal commands\n",
      "summary": "Check out dtnewman and their project zev.",
      "date_published": "2025-04-25T13:40:11Z",
      "date_modified": "2025-04-25T13:40:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/stakater-reloader/",
      "url": "https://go.waylonwalker.com/stakater-reloader/",
      "title": "⭐ stakater Reloader",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/stakater/Reloader\" 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\"\u003eReloader\u003c/a\u003e by \u003ca href=\"https://github.com/stakater\" 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\"\u003estakater\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated Deployment, StatefulSet, DaemonSet and DeploymentConfig – [✩Star] if you’re using it!\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [Reloader](https://github.com/stakater/Reloader) by [stakater](https://github.com/stakater).\n\nA Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated Deployment, StatefulSet, DaemonSet and DeploymentConfig – [✩Star] if you're using it!\n",
      "summary": "Looking for inspiration? Reloader by stakater.",
      "date_published": "2025-04-24T02:03:36Z",
      "date_modified": "2025-04-24T02:03:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ublue-os-bazzite-arch/",
      "url": "https://go.waylonwalker.com/ublue-os-bazzite-arch/",
      "title": "⭐ ublue-os bazzite-arch",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/ublue-os/bazzite-arch\" 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\"\u003ebazzite-arch\u003c/a\u003e from \u003ca href=\"https://github.com/ublue-os\" 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\"\u003eublue-os\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA ready-to-game Arch Linux based OCI designed for use exclusively in distrobox.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [bazzite-arch](https://github.com/ublue-os/bazzite-arch) from [ublue-os](https://github.com/ublue-os).\n\nA ready-to-game Arch Linux based OCI designed for use exclusively in distrobox.\n",
      "summary": "I'm impressed by bazzite-arch from ublue-os.",
      "date_published": "2025-04-22T12:59:37Z",
      "date_modified": "2025-04-22T12:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ublue-os-arch-distrobox/",
      "url": "https://go.waylonwalker.com/ublue-os-arch-distrobox/",
      "title": "⭐ ublue-os arch-distrobox",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ublue-os\" 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\"\u003eublue-os\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/ublue-os/arch-distrobox\" 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\"\u003earch-distrobox\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eAn Arch Linux OCI meant for use exclusively in Distrobox\u003c/p\u003e\n",
      "content_text": "\n[ublue-os](https://github.com/ublue-os) has done a fantastic job with [arch-distrobox](https://github.com/ublue-os/arch-distrobox). Highly recommend taking a look.\n\nAn Arch Linux OCI meant for use exclusively in Distrobox\n",
      "summary": "ublue-os has done a fantastic job with arch-distrobox. Highly recommend taking a look.",
      "date_published": "2025-04-22T12:59:35Z",
      "date_modified": "2025-04-22T12:59:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/reznormichael-hollow-knight-completion-check/",
      "url": "https://go.waylonwalker.com/reznormichael-hollow-knight-completion-check/",
      "title": "⭐ ReznoRMichael hollow-knight-completion-check",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ReznoRMichael\" 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\"\u003eReznoRMichael\u003c/a\u003e and their project \u003ca href=\"https://github.com/ReznoRMichael/hollow-knight-completion-check\" 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\"\u003ehollow-knight-completion-check\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eApp for reading and analyzing a Hollow Knight save file. Shows what remains to do for full 112% Game Completion, Achievements, Hunter’s Journal, Collectibles, True Completion %. Includes a self-designed Hint system.\u003c/p\u003e\n",
      "content_text": "\nCheck out [ReznoRMichael](https://github.com/ReznoRMichael) and their project [hollow-knight-completion-check](https://github.com/ReznoRMichael/hollow-knight-completion-check).\n\nApp for reading and analyzing a Hollow Knight save file. Shows what remains to do for full 112% Game Completion, Achievements, Hunter's Journal, Collectibles, True Completion %. Includes a self-designed Hint system.\n",
      "summary": "Check out ReznoRMichael and their project hollow-knight-completion-check.",
      "date_published": "2025-04-20T16:28:11Z",
      "date_modified": "2025-04-20T16:28:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-597/",
      "url": "https://go.waylonwalker.com/thought-597/",
      "title": "💭 True Non-Planar Slicing is Here - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"M51bMMVWbC8\" title=\"3D Print Anything Without Supports\" playlabel=\"Play: 3D Print Anything Without Supports\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a wild concept for a slicer, essentially he didn’t even make a slicer just a crazy  pre-process and post prossess to cura slicer,  deforming the part until it doesn’t have any overhangs, creating a normal planar slice, then undeforming the output from cura.  He also mentions that the rapid moved needed modified as well. I’m assuming this is because they are generally long distances and not short, without breaking these long lines up we would still end up wtih a straight line after deform.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"M51bMMVWbC8\" title=\"3D Print Anything Without Supports\" playlabel=\"Play: 3D Print Anything Without Supports\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a wild concept for a slicer, essentially he didn't even make a slicer just a crazy  pre-process and post prossess to cura slicer,  deforming the part until it doesn't have any overhangs, creating a normal planar slice, then undeforming the output from cura.  He also mentions that the rapid moved needed modified as well. I'm assuming this is because they are generally long distances and not short, without breaking these long lines up we would still end up wtih a straight line after deform.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=M51bMMVWbC8",
      "date_published": "2025-04-19T15:39:34Z",
      "date_modified": "2025-04-19T15:39:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-596/",
      "url": "https://go.waylonwalker.com/thought-596/",
      "title": "💭 Marp: Markdown Presentation Ecosystem",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://marp.app/#get-started\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://marp.app/assets/og-image.png\" alt=\"Marp: Markdown Presentation Ecosystem — Marp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing your story in a Markdown document.\" loading=\"lazy\"/ data-glightbox=\"description: Marp: Markdown Presentation Ecosystem — Marp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing your story in a Markdown document.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMarp: Markdown Presentation Ecosystem\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMarp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing your story in a Markdown document.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emarp.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIntersting markdown presentation tool, Looks very simple.  I really like split on \u003ccode\u003e---\u003c/code\u003e much better than by h1 or h2.  Their theme looks really nice in the screenshots.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://marp.app/#get-started\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://marp.app/assets/og-image.png\" alt=\"Marp: Markdown Presentation Ecosystem — Marp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing your story in a Markdown document.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMarp: Markdown Presentation Ecosystem\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMarp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing your story in a Markdown document.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emarp.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIntersting markdown presentation tool, Looks very simple.  I really like split on `---` much better than by h1 or h2.  Their theme looks really nice in the screenshots.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://marp.app/#get-started",
      "date_published": "2025-04-17T13:01:40Z",
      "date_modified": "2025-04-17T13:01:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "markdown",
        "presentation",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-595/",
      "url": "https://go.waylonwalker.com/thought-595/",
      "title": "💭 Build UIs that don't suck - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"-h9rH539x1k\" title=\"Build UIs that don\u0026#39;t suck\" playlabel=\"Play: Build UIs that don\u0026#39;t suck\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHow to make an entire clickable without presenting the entire content of the card as the link title.  These videos are great, I’ve ran into these types of problems so many times, and definitely did not know about things like isolate to keep the z-index scoped to one element.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eisolate - scope z-index inside this element so that it does not leak out.\u003c/li\u003e\n\u003cli\u003e[.relative [.absolute, inset-0, z-10]] - the inset zero is a modern shorthand for zeroing all sides, top-0, right-0, bottom-0, left-0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"-h9rH539x1k\" title=\"Build UIs that don\u0026#39;t suck\" playlabel=\"Play: Build UIs that don\u0026#39;t suck\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHow to make an entire clickable without presenting the entire content of the card as the link title.  These videos are great, I've ran into these types of problems so many times, and definitely did not know about things like isolate to keep the z-index scoped to one element.\n\n* isolate - scope z-index inside this element so that it does not leak out.\n* [.relative [.absolute, inset-0, z-10]] - the inset zero is a modern shorthand for zeroing all sides, top-0, right-0, bottom-0, left-0.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=-h9rH539x1k",
      "date_published": "2025-04-15T13:50:53Z",
      "date_modified": "2025-04-15T13:50:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tailwindcss",
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-594/",
      "url": "https://go.waylonwalker.com/thought-594/",
      "title": "💭 Let's Talk Open Source - Prime Reacts - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"SQ0mBnJmd6I\" title=\"Let\u0026#39;s Talk Open Source - Prime Reacts\" playlabel=\"Play: Let\u0026#39;s Talk Open Source - Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is an absolute banger of a review by prime and Dylan Beetle.  I love the similar takes with different perspectives, would really like to see them podcast together, but this one way style interview does really well to cover a lot of issues in open source, rug pulls, version pinning, thankless maintainers, what its like to open source from a large company.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"SQ0mBnJmd6I\" title=\"Let\u0026#39;s Talk Open Source - Prime Reacts\" playlabel=\"Play: Let\u0026#39;s Talk Open Source - Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is an absolute banger of a review by prime and Dylan Beetle.  I love the similar takes with different perspectives, would really like to see them podcast together, but this one way style interview does really well to cover a lot of issues in open source, rug pulls, version pinning, thankless maintainers, what its like to open source from a large company.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=SQ0mBnJmd6I",
      "date_published": "2025-04-15T13:21:53Z",
      "date_modified": "2025-04-15T13:21:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "open-source",
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-593/",
      "url": "https://go.waylonwalker.com/thought-593/",
      "title": "💭 Self-Hosted 29: Perils of Self-Hosting",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://selfhosted.show/29?t=637\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://media24.fireside.fm/file/fireside-images-2024/podcasts/images/7/7296e34a-2697-479a-adfb-ad32329dd0b0/cover_medium.jpg?v=0\" alt=\"Perils of Self-Hosting — We speak to Kevin and Patricia from Traefik, discuss Alex\u0026#39;s recent ZFS snafu and we wonder if the new Chromecasts can match up to the Nvidia Shield.\" loading=\"lazy\"/ data-glightbox=\"description: Perils of Self-Hosting — We speak to Kevin and Patricia from Traefik, discuss Alex\u0026#39;s recent ZFS snafu and we wonder if the new Chromecasts can match up to the Nvidia Shield.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePerils of Self-Hosting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe speak to Kevin and Patricia from Traefik, discuss Alex\u0026#39;s recent ZFS snafu and we wonder if the new Chromecasts can match up to the Nvidia Shield.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSelf-Hosted · selfhosted.show\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting takes on Diun here. I agree that I like to be in control of updates and pinning not to latest.  both seemed like they weren’t going to run it because they can look up the latest version.  Maybe I need to be less aggressive on keeping things up to date and its a me problem.  I just got diun setup and hooked into ntfy, and I kinda like the automated checklist of new images that I can review and update.\u003c/p\u003e\n\u003cp\u003eTo be a bit more clear, having control over changes coming in from others,  even if I dont care to see the changelog, it is nice to roll out an update, have it in your \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e history, watch it deploy and work like before, if not roll back and read the changelog.  For internal applications I’m down for automated releases like argo image updater give you, this thing has already gone through review, launch the damn thing at least to a dev space.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://selfhosted.show/29?t=637\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media24.fireside.fm/file/fireside-images-2024/podcasts/images/7/7296e34a-2697-479a-adfb-ad32329dd0b0/cover_medium.jpg?v=0\" alt=\"Perils of Self-Hosting — We speak to Kevin and Patricia from Traefik, discuss Alex\u0026#39;s recent ZFS snafu and we wonder if the new Chromecasts can match up to the Nvidia Shield.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePerils of Self-Hosting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe speak to Kevin and Patricia from Traefik, discuss Alex\u0026#39;s recent ZFS snafu and we wonder if the new Chromecasts can match up to the Nvidia Shield.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSelf-Hosted \u0026middot; selfhosted.show\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting takes on Diun here. I agree that I like to be in control of updates and pinning not to latest.  both seemed like they weren't going to run it because they can look up the latest version.  Maybe I need to be less aggressive on keeping things up to date and its a me problem.  I just got diun setup and hooked into ntfy, and I kinda like the automated checklist of new images that I can review and update.\n\nTo be a bit more clear, having control over changes coming in from others,  even if I dont care to see the changelog, it is nice to roll out an update, have it in your git history, watch it deploy and work like before, if not roll back and read the changelog.  For internal applications I'm down for automated releases like argo image updater give you, this thing has already gone through review, launch the damn thing at least to a dev space.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://selfhosted.show/29?t=637",
      "date_published": "2025-04-15T13:18:51Z",
      "date_modified": "2025-04-15T13:18:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "self-host",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-592/",
      "url": "https://go.waylonwalker.com/thought-592/",
      "title": "💭 Spring 2025: Self-Hosted Update – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/04/13/self-hosted-update-spring-2025/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2025-04-13-self-hosted-update-spring-2025.png\" alt=\"Spring 2025: Self-Hosted Update — The one where things plod along\" loading=\"lazy\"/ data-glightbox=\"description: Spring 2025: Self-Hosted Update — The one where things plod along\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSpring 2025: Self-Hosted Update\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where things plod along\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDavids blogs always have so many links that send me down new rabbit holes.  Interesting that his experience with smart home is turning away, I’ve been somewhat interested for awhile, but never fully pulled the trigger on buying things.\u003c/p\u003e\n\u003cp\u003eI really hope tailscale enshitification does not take off, but really for me, I barely use it even as a homelabber.  Idk why, but every other homelabber praises it so much and I just dont find myself using it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2025/04/13/self-hosted-update-spring-2025/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2025-04-13-self-hosted-update-spring-2025.png\" alt=\"Spring 2025: Self-Hosted Update — The one where things plod along\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSpring 2025: Self-Hosted Update\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where things plod along\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDavids blogs always have so many links that send me down new rabbit holes.  Interesting that his experience with smart home is turning away, I've been somewhat interested for awhile, but never fully pulled the trigger on buying things.\n\nI really hope tailscale enshitification does not take off, but really for me, I barely use it even as a homelabber.  Idk why, but every other homelabber praises it so much and I just dont find myself using it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2025/04/13/self-hosted-update-spring-2025/",
      "date_published": "2025-04-13T13:59:32Z",
      "date_modified": "2025-04-13T13:59:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-591/",
      "url": "https://go.waylonwalker.com/thought-591/",
      "title": "💭 Characters - Xe Iaso",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://xeiaso.net/characters/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/xeiaso.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/xeiaso.net.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCharacters\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eXe Iaso\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003exeiaso.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003exeiaso, has the coolest characters on her blog.  Definitely something I’d like to replicate.  I really appreciate how each one has its own sprite sheet, and they have conversations with each other.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/77dd4cb5-4fdb-4d09-8b9b-d9cdd72b2490.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/77dd4cb5-4fdb-4d09-8b9b-d9cdd72b2490.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://xeiaso.net/characters/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCharacters\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eXe Iaso\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003exeiaso.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nxeiaso, has the coolest characters on her blog.  Definitely something I'd like to replicate.  I really appreciate how each one has its own sprite sheet, and they have conversations with each other.\n\n![image](https://dropper.wayl.one/api/file/77dd4cb5-4fdb-4d09-8b9b-d9cdd72b2490.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://xeiaso.net/characters/",
      "date_published": "2025-04-12T20:02:35Z",
      "date_modified": "2025-04-12T20:02:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-590/",
      "url": "https://go.waylonwalker.com/thought-590/",
      "title": "💭 Comparing Crazy Suspension Setups on a Bumpy Road! [Trailmaker...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zolrLsjs1c4\" title=\"Comparing Crazy Suspension Setups on a Bumpy Road! [Trailmakers]\" playlabel=\"Play: Comparing Crazy Suspension Setups on a Bumpy Road! [Trailmakers]\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI want to go build these now, these are suspension setups I had no idea you could do in trailmakers.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zolrLsjs1c4\" title=\"Comparing Crazy Suspension Setups on a Bumpy Road! [Trailmakers]\" playlabel=\"Play: Comparing Crazy Suspension Setups on a Bumpy Road! [Trailmakers]\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI want to go build these now, these are suspension setups I had no idea you could do in trailmakers.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=zolrLsjs1c4",
      "date_published": "2025-04-12T01:34:34Z",
      "date_modified": "2025-04-12T01:34:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "trailmakers",
        "game",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-589/",
      "url": "https://go.waylonwalker.com/thought-589/",
      "title": "💭 adrianlopezroche/fdupes: FDUPES is a program for identifying o...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/adrianlopezroche/fdupes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/53ba8a68d6f1bf0104cf1465f92445825e83218ea57aa6a80d60c33dbd384ad8/adrianlopezroche/fdupes\" alt=\"GitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories. — FDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories. — FDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ekeeping this in my back pocket for now.  I just moved a few TB’s of data 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 and I am expecting a lot of duplication to show up.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/adrianlopezroche/fdupes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/53ba8a68d6f1bf0104cf1465f92445825e83218ea57aa6a80d60c33dbd384ad8/adrianlopezroche/fdupes\" alt=\"GitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories. — FDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nkeeping this in my back pocket for now.  I just moved a few TB's of data in the homelab and I am expecting a lot of duplication to show up.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/adrianlopezroche/fdupes",
      "date_published": "2025-04-09T12:56:53Z",
      "date_modified": "2025-04-09T12:56:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/adrianlopezroche-fdupes/",
      "url": "https://go.waylonwalker.com/adrianlopezroche-fdupes/",
      "title": "⭐ adrianlopezroche fdupes",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/adrianlopezroche/fdupes\" 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\"\u003efdupes\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/adrianlopezroche\" 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\"\u003eadrianlopezroche\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eFDUPES is a program for identifying or deleting duplicate files residing within specified directories.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [fdupes](https://github.com/adrianlopezroche/fdupes), an amazing project by [adrianlopezroche](https://github.com/adrianlopezroche). It's worth exploring!\n\nFDUPES is a program for identifying or deleting duplicate files residing within specified directories.\n",
      "summary": "I'm really excited about fdupes, an amazing project by adrianlopezroche. It's worth exploring!",
      "date_published": "2025-04-09T12:55:41Z",
      "date_modified": "2025-04-09T12:55:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-588/",
      "url": "https://go.waylonwalker.com/thought-588/",
      "title": "💭 Diun",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://crazymax.dev/diun/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://crazymax.dev/diun/assets/meta/card.png\" alt=\"Diun — Receive notifications when a Docker image is updated on a Docker registry\" loading=\"lazy\"/ data-glightbox=\"description: Diun — Receive notifications when a Docker image is updated on a Docker registry\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDiun\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReceive notifications when a Docker image is updated on a Docker registry\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecrazymax.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDiun, looks like a very interesting tool to monitor for image updates, it does not make any change, it only makes notifications.  This feels like an easy start to getting image updates started with low effort, keep \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e ops, but requires manual updates.  I see this as a tool that would be a great start and pair well with automated image updaters to ensure they are working as expected.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://crazymax.dev/diun/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://crazymax.dev/diun/assets/meta/card.png\" alt=\"Diun — Receive notifications when a Docker image is updated on a Docker registry\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDiun\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReceive notifications when a Docker image is updated on a Docker registry\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecrazymax.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDiun, looks like a very interesting tool to monitor for image updates, it does not make any change, it only makes notifications.  This feels like an easy start to getting image updates started with low effort, keep git ops, but requires manual updates.  I see this as a tool that would be a great start and pair well with automated image updaters to ensure they are working as expected.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://crazymax.dev/diun/",
      "date_published": "2025-04-07T13:33:20Z",
      "date_modified": "2025-04-07T13:33:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "containers",
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-587/",
      "url": "https://go.waylonwalker.com/thought-587/",
      "title": "💭 Keel",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://keel.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKeel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubernetes Operator to automate Helm, DaemonSet, StatefulSet \u0026amp; Deployment updates\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekeel.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eKeel looks interesting, I might give it a try as a simple image updater. I’m unsure if it fits my gitops patterns though.  I like to keep everything defined in \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e, I don’t like drift outside of that so Keel might not be the thing I want.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://keel.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKeel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubernetes Operator to automate Helm, DaemonSet, StatefulSet \u0026amp; Deployment updates\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekeel.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nKeel looks interesting, I might give it a try as a simple image updater. I'm unsure if it fits my gitops patterns though.  I like to keep everything defined in git, I don't like drift outside of that so Keel might not be the thing I want.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://keel.sh/",
      "date_published": "2025-04-07T13:30:49Z",
      "date_modified": "2025-04-07T13:30:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-586/",
      "url": "https://go.waylonwalker.com/thought-586/",
      "title": "💭 World's easiest Live dashboard with htmx - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.youtube.com/watch\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.youtube.com/img/desktop/yt_1200.png\" alt=\"YouTube — Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\" loading=\"lazy\"/ data-glightbox=\"description: YouTube — Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYouTube\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEnjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eyoutube.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn he makes this easy.  I did not know about \u003ccode\u003ehx-select\u003c/code\u003e.  yes there is waste in requesting the entire thing every 5s, but damn that was easy to get life reload.  I’ve only done very specific backend endpoints, built pages up from partials, made endpoints for partials.  keeping this one in my back pocket.\u003c/p\u003e\n\u003cp\u003eI’m just kind of amazed that he could do this all in \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 without touching the backend or js, typically things like this require one or the other.  Yes js is running, but no other js library I’m aware of lets you do this.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.youtube.com/watch\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.youtube.com/img/desktop/yt_1200.png\" alt=\"YouTube — Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYouTube\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEnjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eyoutube.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn he makes this easy.  I did not know about `hx-select`.  yes there is waste in requesting the entire thing every 5s, but damn that was easy to get life reload.  I've only done very specific backend endpoints, built pages up from partials, made endpoints for partials.  keeping this one in my back pocket.\n\nI'm just kind of amazed that he could do this all in html without touching the backend or js, typically things like this require one or the other.  Yes js is running, but no other js library I'm aware of lets you do this.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch",
      "date_published": "2025-03-29T15:04:45Z",
      "date_modified": "2025-03-29T15:04:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "htmx",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ramilito-kubectl-nvim/",
      "url": "https://go.waylonwalker.com/ramilito-kubectl-nvim/",
      "title": "⭐ Ramilito kubectl.nvim",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/Ramilito/kubectl.nvim\" 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\"\u003ekubectl.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/Ramilito\" 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\"\u003eRamilito\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003e⎈ Streamline your Kubernetes management within Neovim—control and monitor your cluster seamlessly, all without leaving your coding environment.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [kubectl.nvim](https://github.com/Ramilito/kubectl.nvim) by [Ramilito](https://github.com/Ramilito), and it's truly impressive.\n\n⎈ Streamline your Kubernetes management within Neovim—control and monitor your cluster seamlessly, all without leaving your coding environment.\n",
      "summary": "I recently discovered kubectl.nvim by Ramilito, and it's truly impressive.",
      "date_published": "2025-03-25T19:16:43Z",
      "date_modified": "2025-03-25T19:16:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-585/",
      "url": "https://go.waylonwalker.com/thought-585/",
      "title": "💭 Resetting a lost admin password — Nextcloud latest Administrat...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html\" alt=\"https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html\"/ data-glightbox=\"description: https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is a handy line to reset your admin password in nextcloud.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html](/static/https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html)\n\nThis is a handy line to reset your admin password in nextcloud.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.nextcloud.com/server/latest/admin_user/reset_password.html",
      "date_published": "2025-03-24T00:26:45Z",
      "date_modified": "2025-03-24T00:26:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-584/",
      "url": "https://go.waylonwalker.com/thought-584/",
      "title": "💭 Redis configuration | Docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://redis.io/docs/latest/operate/oss_and_stack/management/config/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/redis.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/redis.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedis configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOverview of redis.conf, the Redis configuration file\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDocs · redis.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eredis has all of their default self documented configs hosted here.  You can pull the default redis.conf for any of the major releases.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://redis.io/docs/latest/operate/oss_and_stack/management/config/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedis configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOverview of redis.conf, the Redis configuration file\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDocs \u0026middot; redis.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nredis has all of their default self documented configs hosted here.  You can pull the default redis.conf for any of the major releases.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://redis.io/docs/latest/operate/oss_stack/management/config/",
      "date_published": "2025-03-20T20:14:57Z",
      "date_modified": "2025-03-20T20:14:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/xpipe-io-xpipe-webtop/",
      "url": "https://go.waylonwalker.com/xpipe-io-xpipe-webtop/",
      "title": "⭐ xpipe-io xpipe-webtop",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/xpipe-io/xpipe-webtop\" 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\"\u003expipe-webtop\u003c/a\u003e, created by \u003ca href=\"https://github.com/xpipe-io\" 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\"\u003expipe-io\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA containerized web-based desktop environment for XPipe\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [xpipe-webtop](https://github.com/xpipe-io/xpipe-webtop), created by [xpipe-io](https://github.com/xpipe-io).\n\nA containerized web-based desktop environment for XPipe\n",
      "summary": "If you're into interesting projects, don't miss out on xpipe-webtop, created by xpipe-io.",
      "date_published": "2025-03-20T14:05:37Z",
      "date_modified": "2025-03-20T14:05:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/xpipe-io-xpipe/",
      "url": "https://go.waylonwalker.com/xpipe-io-xpipe/",
      "title": "⭐ xpipe-io xpipe",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/xpipe-io/xpipe\" 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\"\u003expipe\u003c/a\u003e by \u003ca href=\"https://github.com/xpipe-io\" 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\"\u003expipe-io\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eAccess your entire server infrastructure from your local desktop\u003c/p\u003e\n",
      "content_text": "\n[xpipe](https://github.com/xpipe-io/xpipe) by [xpipe-io](https://github.com/xpipe-io) is a game-changer in its space. Excited to see how it evolves.\n\nAccess your entire server infrastructure from your local desktop\n",
      "summary": "xpipe by xpipe-io is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-03-17T23:00:55Z",
      "date_modified": "2025-03-17T23:00:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/use-pbpaste-for-clean-shell-history/",
      "url": "https://go.waylonwalker.com/use-pbpaste-for-clean-shell-history/",
      "title": "Use pbpaste for clean shell history",
      "content_html": "\u003cp\u003eUsing \u003ccode\u003epbpaste\u003c/code\u003e for command substitution keeps sensitive or long URLs out of\nyour shell history. Instead of typing \u003ccode\u003egit clone https://github.com/user/repo-with-long-name.git\u003c/code\u003e, copy the URL to clipboard and\nrun \u003ccode\u003egit clone \u0026#34;$(pbpaste)\u0026#34;\u003c/code\u003e. This prevents the URL from appearing in\n\u003ccode\u003e~/.bash_history\u003c/code\u003e or \u003ccode\u003e~/.zsh_history\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eTo get pbpaste working on both Xorg and Wayland, add this to your shell config:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"k\"\u003e$(\u003c/span\u003e\u003cspan class=\"nb\"\u003ecommand\u003c/span\u003e -v wl-copy\u003cspan class=\"k\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003epbcopy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;wl-copy\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    pbpaste\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e wl-paste\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"k\"\u003e$(\u003c/span\u003e\u003cspan class=\"nb\"\u003ecommand\u003c/span\u003e -v xclip\u003cspan class=\"k\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003epbcopy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;xclip -selection clipboard\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    pbpaste\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e xclip -selection clipboard -o\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe function approach (instead of alias) enables command substitution, while\nthe quotes around \u003ccode\u003e$(pbpaste)\u003c/code\u003e handle spaces and special characters safely.\u003c/p\u003e\n\u003cp\u003eNow you can use it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003epbpaste\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eMore importantly secrets can stay out of your history.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eGITHUB_TOKEN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003epbpaste\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eAWS_ACCESS_KEY_ID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003epbpaste\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eAWS_SECRET_ACCESS_KEY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003epbpaste\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eDATABASE_URL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003epbpaste\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nUsing `pbpaste` for command substitution keeps sensitive or long URLs out of\nyour shell history. Instead of typing `git clone\nhttps://github.com/user/repo-with-long-name.git`, copy the URL to clipboard and\nrun `git clone \"$(pbpaste)\"`. This prevents the URL from appearing in\n`~/.bash_history` or `~/.zsh_history`.\n\nTo get pbpaste working on both Xorg and Wayland, add this to your shell config:\n\n```bash\nif [[ $(command -v wl-copy) ]]; then\n    alias pbcopy='wl-copy'\n    pbpaste() { wl-paste; }\nelif [[ $(command -v xclip) ]]; then\n    alias pbcopy='xclip -selection clipboard'\n    pbpaste() { xclip -selection clipboard -o; }\nfi\n```\n\nThe function approach (instead of alias) enables command substitution, while\nthe quotes around `$(pbpaste)` handle spaces and special characters safely.\n\nNow you can use it.\n\n``` bash\ngit clone \"$(pbpaste)\"\n```\n\nMore importantly secrets can stay out of your history.\n\n``` bash\nexport GITHUB_TOKEN=\"$(pbpaste)\"\nexport AWS_ACCESS_KEY_ID=\"$(pbpaste)\"\nexport AWS_SECRET_ACCESS_KEY=\"$(pbpaste)\"\nexport DATABASE_URL=\"$(pbpaste)\"\n```\n",
      "summary": "Using for command substitution keeps sensitive or long URLs out of your shell history. Instead of typing , copy the URL to clipboard and run . This prevents...",
      "date_published": "2025-03-17T12:00:00Z",
      "date_modified": "2025-03-17T12:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-583/",
      "url": "https://go.waylonwalker.com/thought-583/",
      "title": "💭 hotel_bookings.csv",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.kaggle.com/datasets/ahmedsafwatgb20/hotel-bookingscsv?resource=download\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://storage.googleapis.com/kaggle-datasets-images/new-version-temp-images/default-backgrounds-55.png-8181871/dataset-card.png\" alt=\"hotel_bookings.csv — Discover what actually works in AI. Join millions of builders, researchers, and labs evaluating agents, models, and frontier technology through crowdsourced benchmarks, competitions, and hackathons.\" loading=\"lazy\"/ data-glightbox=\"description: hotel_bookings.csv — Discover what actually works in AI. Join millions of builders, researchers, and labs evaluating agents, models, and frontier technology through crowdsourced benchmarks, competitions, and hackathons.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehotel_bookings.csv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDiscover what actually works in AI. Join millions of builders, researchers, and labs evaluating agents, models, and frontier technology through crowdsourced benchmarks, competitions, and hackathons.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekaggle.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003enice dataset to use for example / test projects.  I’m using it to play with duckdb currently.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.kaggle.com/datasets/ahmedsafwatgb20/hotel-bookingscsv?resource=download\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://storage.googleapis.com/kaggle-datasets-images/new-version-temp-images/default-backgrounds-55.png-8181871/dataset-card.png\" alt=\"hotel_bookings.csv — Discover what actually works in AI. Join millions of builders, researchers, and labs evaluating agents, models, and frontier technology through crowdsourced benchmarks, competitions, and hackathons.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehotel_bookings.csv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDiscover what actually works in AI. Join millions of builders, researchers, and labs evaluating agents, models, and frontier technology through crowdsourced benchmarks, competitions, and hackathons.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekaggle.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nnice dataset to use for example / test projects.  I'm using it to play with duckdb currently.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.kaggle.com/datasets/ahmedsafwatgb20/hotel-bookingscsv?resource=download",
      "date_published": "2025-03-15T22:32:44Z",
      "date_modified": "2025-03-15T22:32:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "data",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-582/",
      "url": "https://go.waylonwalker.com/thought-582/",
      "title": "💭 The State of Secrets Sprawl 2025",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.gitguardian.com/the-state-of-secrets-sprawl-2025/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://storage.ghost.io/c/42/5d/425d266f-cf99-406e-9436-597a19bed011/content/images/2025/03/Stateof25@2x.png\" alt=\"The State of Secrets Sprawl 2025 — GitGuardian\u0026#39;s 2025 report reveals 70% of leaked secrets remain active two years later. Discover the alarming state of secrets sprawl \u0026amp; protect your organization.\" loading=\"lazy\"/ data-glightbox=\"description: The State of Secrets Sprawl 2025 — GitGuardian\u0026#39;s 2025 report reveals 70% of leaked secrets remain active two years later. Discover the alarming state of secrets sprawl \u0026amp; protect your organization.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe State of Secrets Sprawl 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGitGuardian\u0026#39;s 2025 report reveals 70% of leaked secrets remain active two years later. Discover the alarming state of secrets sprawl \u0026amp; protect your organization.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitGuardian Blog - Take Control of Your Secrets Security · blog.gitguardian.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGood report, make notes later\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.gitguardian.com/the-state-of-secrets-sprawl-2025/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://storage.ghost.io/c/42/5d/425d266f-cf99-406e-9436-597a19bed011/content/images/2025/03/Stateof25@2x.png\" alt=\"The State of Secrets Sprawl 2025 — GitGuardian\u0026#39;s 2025 report reveals 70% of leaked secrets remain active two years later. Discover the alarming state of secrets sprawl \u0026amp; protect your organization.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe State of Secrets Sprawl 2025\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGitGuardian\u0026#39;s 2025 report reveals 70% of leaked secrets remain active two years later. Discover the alarming state of secrets sprawl \u0026amp; protect your organization.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitGuardian Blog - Take Control of Your Secrets Security \u0026middot; blog.gitguardian.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGood report, make notes later\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.gitguardian.com/the-state-of-secrets-sprawl-2025/",
      "date_published": "2025-03-14T18:16:07Z",
      "date_modified": "2025-03-14T18:16:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-581/",
      "url": "https://go.waylonwalker.com/thought-581/",
      "title": "💭 Mill-Max Hotswap Sockets  – Keebio",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://keeb.io/products/mill-max-hotswap-sockets?variant=32377167511646\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://keeb.io/cdn/shop/products/image_88f7613a-6692-4f4d-bc3c-00220e175516.jpg?v=1612558347\" alt=\"Mill-Max Hotswap Sockets — Mill-Max sockets for adding hotswap support to regular PCBs. Sold in packs of 60 (good for 30 switches). Info about the different types 7305-0: Gold-plated sockets (7305-0-15-15-47-27-10-0) Shorter leg that can be more difficult to solder, but has a shorter lip above the PCB that\u0026#39;s more flush 0305-2: Tin-plated sockets\" loading=\"lazy\"/ data-glightbox=\"description: Mill-Max Hotswap Sockets — Mill-Max sockets for adding hotswap support to regular PCBs. Sold in packs of 60 (good for 30 switches). Info about the different types 7305-0: Gold-plated sockets (7305-0-15-15-47-27-10-0) Shorter leg that can be more difficult to solder, but has a shorter lip above the PCB that\u0026#39;s more flush 0305-2: Tin-plated sockets\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMill-Max Hotswap Sockets\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMill-Max sockets for adding hotswap support to regular PCBs. Sold in packs of 60 (good for 30 switches). Info about the different types 7305-0: Gold-plated sockets (7305-0-15-15-47-27-10-0) Shorter...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKeebio · keeb.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003elooking into trying these Mill-Max pins on a handwired 3d printed build to see if I can get away from specialty hot swap sockets.  Damn they aren’t exactly cheap, I really want the nice short ones but they start at $20 per 60ct and you need two per key, that adds up quick.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://keeb.io/products/mill-max-hotswap-sockets?variant=32377167511646\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://keeb.io/cdn/shop/products/image_88f7613a-6692-4f4d-bc3c-00220e175516.jpg?v=1612558347\" alt=\"Mill-Max Hotswap Sockets — Mill-Max sockets for adding hotswap support to regular PCBs. Sold in packs of 60 (good for 30 switches). Info about the different types 7305-0: Gold-plated sockets (7305-0-15-15-47-27-10-0) Shorter leg that can be more difficult to solder, but has a shorter lip above the PCB that\u0026#39;s more flush 0305-2: Tin-plated sockets\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMill-Max Hotswap Sockets\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMill-Max sockets for adding hotswap support to regular PCBs. Sold in packs of 60 (good for 30 switches). Info about the different types 7305-0: Gold-plated sockets (7305-0-15-15-47-27-10-0) Shorter...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKeebio \u0026middot; keeb.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nlooking into trying these Mill-Max pins on a handwired 3d printed build to see if I can get away from specialty hot swap sockets.  Damn they aren't exactly cheap, I really want the nice short ones but they start at $20 per 60ct and you need two per key, that adds up quick.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://keeb.io/products/mill-max-hotswap-sockets?variant=32377167511646",
      "date_published": "2025-03-14T01:02:15Z",
      "date_modified": "2025-03-14T01:02:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-580/",
      "url": "https://go.waylonwalker.com/thought-580/",
      "title": "💭 r.jina.ai",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://r.jina.ai/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/r.jina.ai.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/r.jina.ai.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003er.jina.ai\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ejina reader is a pretty sweet tool to convert a site to ai compatible text.  There are other web to markdown types of tools, but the convenience of just adding r.jina.ai to the front of any page makes it so easy to grab for one page of docs.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://r.jina.ai/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003er.jina.ai\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\njina reader is a pretty sweet tool to convert a site to ai compatible text.  There are other web to markdown types of tools, but the convenience of just adding r.jina.ai to the front of any page makes it so easy to grab for one page of docs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://r.jina.ai/",
      "date_published": "2025-03-13T17:12:44Z",
      "date_modified": "2025-03-13T17:12:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-579/",
      "url": "https://go.waylonwalker.com/thought-579/",
      "title": "💭 Why did Framework build a desktop? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zI6ZQls54Ms\" title=\"Why did Framework build a desktop?\" playlabel=\"Play: Why did Framework build a desktop?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003ethe racked up 4 framework mainboards sound wild.  connected with usb4 and 5gig ethernet.  they said they can run big models quantized down from 600Gb to within the 512GB limit they have.  This seems wild to bring this level of capability to such a low price point.  It will be really cool to start to see demos come out.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zI6ZQls54Ms\" title=\"Why did Framework build a desktop?\" playlabel=\"Play: Why did Framework build a desktop?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nthe racked up 4 framework mainboards sound wild.  connected with usb4 and 5gig ethernet.  they said they can run big models quantized down from 600Gb to within the 512GB limit they have.  This seems wild to bring this level of capability to such a low price point.  It will be really cool to start to see demos come out.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=zI6ZQls54Ms",
      "date_published": "2025-03-12T13:01:44Z",
      "date_modified": "2025-03-12T13:01:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/y2z-monolith/",
      "url": "https://go.waylonwalker.com/y2z-monolith/",
      "title": "⭐ Y2Z monolith",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/Y2Z/monolith\" 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\"\u003emonolith\u003c/a\u003e by \u003ca href=\"https://github.com/Y2Z\" 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\"\u003eY2Z\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003e⬛️ CLI tool and library for saving complete web pages as a single \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 file\u003c/p\u003e\n",
      "content_text": "\nJust starred [monolith](https://github.com/Y2Z/monolith) by [Y2Z](https://github.com/Y2Z). It's an exciting project with a lot to offer.\n\n⬛️ CLI tool and library for saving complete web pages as a single HTML file\n",
      "summary": "Just starred monolith by Y2Z. It's an exciting project with a lot to offer.",
      "date_published": "2025-03-11T14:18:31Z",
      "date_modified": "2025-03-11T14:18:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/doomlab7-homelab-compose/",
      "url": "https://go.waylonwalker.com/doomlab7-homelab-compose/",
      "title": "⭐ Doomlab7 homelab-compose",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Doomlab7/homelab-compose\" 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\"\u003ehomelab-compose\u003c/a\u003e, created by \u003ca href=\"https://github.com/Doomlab7\" 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\"\u003eDoomlab7\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA repository for the applications I run via docker-compose in my \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\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [homelab-compose](https://github.com/Doomlab7/homelab-compose), created by [Doomlab7](https://github.com/Doomlab7).\n\nA repository for the applications I run via docker-compose in my homelab\n",
      "summary": "If you're into interesting projects, don't miss out on homelab-compose, created by Doomlab7.",
      "date_published": "2025-03-06T14:56:33Z",
      "date_modified": "2025-03-06T14:56:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/deepseek-ai-smallpond/",
      "url": "https://go.waylonwalker.com/deepseek-ai-smallpond/",
      "title": "⭐ deepseek-ai smallpond",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/deepseek-ai/smallpond\" 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\"\u003esmallpond\u003c/a\u003e by \u003ca href=\"https://github.com/deepseek-ai\" 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\"\u003edeepseek-ai\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA lightweight data processing framework built on DuckDB and 3FS.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [smallpond](https://github.com/deepseek-ai/smallpond) by [deepseek-ai](https://github.com/deepseek-ai), and it's truly impressive.\n\nA lightweight data processing framework built on DuckDB and 3FS.\n",
      "summary": "I recently discovered smallpond by deepseek-ai, and it's truly impressive.",
      "date_published": "2025-03-04T20:17:58Z",
      "date_modified": "2025-03-04T20:17:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-578/",
      "url": "https://go.waylonwalker.com/thought-578/",
      "title": "💭 PyApp",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ofek.dev/pyapp/latest/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/ofek.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/ofek.dev.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePyApp\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eofek.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI think I’m getting really close to having a good workflow setup for using pyapp.  Such an amazing project to allow developers to create applications in python without passing on the hassle of python and managing installs to the user.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ofek.dev/pyapp/latest/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePyApp\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eofek.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI think I'm getting really close to having a good workflow setup for using pyapp.  Such an amazing project to allow developers to create applications in python without passing on the hassle of python and managing installs to the user.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ofek.dev/pyapp/latest/",
      "date_published": "2025-03-03T01:52:54Z",
      "date_modified": "2025-03-03T01:52:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nolar-kopf/",
      "url": "https://go.waylonwalker.com/nolar-kopf/",
      "title": "⭐ nolar kopf",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/nolar/kopf\" 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\"\u003ekopf\u003c/a\u003e by \u003ca href=\"https://github.com/nolar\" 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\"\u003enolar\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Python framework to write Kubernetes operators in just a few lines of code\u003c/p\u003e\n",
      "content_text": "\nThe work on [kopf](https://github.com/nolar/kopf) by [nolar](https://github.com/nolar).\n\nA Python framework to write Kubernetes operators in just a few lines of code\n",
      "summary": "The work on kopf by nolar.",
      "date_published": "2025-03-02T20:32:30Z",
      "date_modified": "2025-03-02T20:32:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-577/",
      "url": "https://go.waylonwalker.com/thought-577/",
      "title": "💭 CSS Battle - Re-create an Image with CSS in the Fewest Charact...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"B32NKRKJ_Cc\" title=\"CSS Battle - Re-create an Image with CSS in the Fewest Characters | Experts Compete in CSS Code Golf\" playlabel=\"Play: CSS Battle - Re-create an Image with CSS in the Fewest Characters | Experts Compete in CSS Code Golf\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWatching Wes fiddle through this with what a sane person would write in a normal day application and not applying the tricks for this kind of battle is how I feel when trying to do leetcode.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"B32NKRKJ_Cc\" title=\"CSS Battle - Re-create an Image with CSS in the Fewest Characters | Experts Compete in CSS Code Golf\" playlabel=\"Play: CSS Battle - Re-create an Image with CSS in the Fewest Characters | Experts Compete in CSS Code Golf\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nWatching Wes fiddle through this with what a sane person would write in a normal day application and not applying the tricks for this kind of battle is how I feel when trying to do leetcode.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=B32NKRKJ_Cc",
      "date_published": "2025-03-01T16:22:07Z",
      "date_modified": "2025-03-01T16:22:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/prefecthq-marvin/",
      "url": "https://go.waylonwalker.com/prefecthq-marvin/",
      "title": "⭐ PrefectHQ marvin",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/PrefectHQ\" 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\"\u003ePrefectHQ\u003c/a\u003e and their project \u003ca href=\"https://github.com/PrefectHQ/marvin\" 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\"\u003emarvin\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e✨ AI agents that spark joy\u003c/p\u003e\n",
      "content_text": "\nCheck out [PrefectHQ](https://github.com/PrefectHQ) and their project [marvin](https://github.com/PrefectHQ/marvin).\n\n✨ AI agents that spark joy\n",
      "summary": "Check out PrefectHQ and their project marvin.",
      "date_published": "2025-02-28T14:37:43Z",
      "date_modified": "2025-02-28T14:37:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-576/",
      "url": "https://go.waylonwalker.com/thought-576/",
      "title": "💭 Ergonomic Laptop — Evan and Katelyn",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.evanandkatelyn.com/blog/ergotop\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://static1.squarespace.com/static/65b8ea1c81afac1a1ecbd00d/67b798a55231271162503eac/67b798a55231271162503eae/1750099379498/vlcsnap-2025-02-10-11h23m28s424.png?format=1500w\" alt=\"Ergonomic Laptop — Evan and Katelyn — Back pain ends here.\" loading=\"lazy\"/ data-glightbox=\"description: Ergonomic Laptop — Evan and Katelyn — Back pain ends here.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eErgonomic Laptop — Evan and Katelyn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBack pain ends here.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eEvan and Katelyn · evanandkatelyn.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is such a cool idea, I tend to not use laptops at all because they are so uncomfortable I just wait till I’m back at my desk.  This solves two main issues I have with laptops, the posture to use them is shit, the keyboards that come on them is not what I want to use.  I’ve solved the latter with my own custom keyboard.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.evanandkatelyn.com/blog/ergotop\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://static1.squarespace.com/static/65b8ea1c81afac1a1ecbd00d/67b798a55231271162503eac/67b798a55231271162503eae/1750099379498/vlcsnap-2025-02-10-11h23m28s424.png?format=1500w\" alt=\"Ergonomic Laptop — Evan and Katelyn — Back pain ends here.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eErgonomic Laptop — Evan and Katelyn\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBack pain ends here.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eEvan and Katelyn \u0026middot; evanandkatelyn.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is such a cool idea, I tend to not use laptops at all because they are so uncomfortable I just wait till I'm back at my desk.  This solves two main issues I have with laptops, the posture to use them is shit, the keyboards that come on them is not what I want to use.  I've solved the latter with my own custom keyboard.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.evanandkatelyn.com/blog/ergotop",
      "date_published": "2025-02-28T14:01:14Z",
      "date_modified": "2025-02-28T14:01:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rancher-system-upgrade-controller/",
      "url": "https://go.waylonwalker.com/rancher-system-upgrade-controller/",
      "title": "⭐ rancher system-upgrade-controller",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/rancher/system-upgrade-controller\" 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\"\u003esystem-upgrade-controller\u003c/a\u003e by \u003ca href=\"https://github.com/rancher\" 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\"\u003erancher\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eIn your Kubernetes, upgrading your nodes\u003c/p\u003e\n",
      "content_text": "\nJust starred [system-upgrade-controller](https://github.com/rancher/system-upgrade-controller) by [rancher](https://github.com/rancher). It's an exciting project with a lot to offer.\n\nIn your Kubernetes, upgrading your nodes\n",
      "summary": "Just starred system-upgrade-controller by rancher. It's an exciting project with a lot to offer.",
      "date_published": "2025-02-26T13:10:31Z",
      "date_modified": "2025-02-26T13:10:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pythonarcade-arcade/",
      "url": "https://go.waylonwalker.com/pythonarcade-arcade/",
      "title": "⭐ pythonarcade arcade",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/pythonarcade/arcade\" 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\"\u003earcade\u003c/a\u003e by \u003ca href=\"https://github.com/pythonarcade\" 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\"\u003epythonarcade\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eEasy to use Python library for creating 2D arcade games.\u003c/p\u003e\n",
      "content_text": "\nJust starred [arcade](https://github.com/pythonarcade/arcade) by [pythonarcade](https://github.com/pythonarcade). It's an exciting project with a lot to offer.\n\nEasy to use Python library for creating 2D arcade games.\n",
      "summary": "Just starred arcade by pythonarcade. It's an exciting project with a lot to offer.",
      "date_published": "2025-02-25T14:03:02Z",
      "date_modified": "2025-02-25T14:03:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-575/",
      "url": "https://go.waylonwalker.com/thought-575/",
      "title": "💭 OpenTools | The open MCP server registry",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://opentools.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opentools.com/preview-card.png\" alt=\"OpenTools | The API for LLM tool use — One API to use any LLM with every MCP tool\" loading=\"lazy\"/ data-glightbox=\"description: OpenTools | The API for LLM tool use — One API to use any LLM with every MCP tool\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOpenTools | The API for LLM tool use\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOne API to use any LLM with every MCP tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eOpenTools · opentools.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOpenTools is an index for mcp servers to work with new agentic workflows like roo code and windsurf.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://opentools.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opentools.com/preview-card.png\" alt=\"OpenTools | The API for LLM tool use — One API to use any LLM with every MCP tool\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOpenTools | The API for LLM tool use\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOne API to use any LLM with every MCP tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eOpenTools \u0026middot; opentools.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOpenTools is an index for mcp servers to work with new agentic workflows like roo code and windsurf.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://opentools.com/",
      "date_published": "2025-02-23T22:31:33Z",
      "date_modified": "2025-02-23T22:31:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-574/",
      "url": "https://go.waylonwalker.com/thought-574/",
      "title": "💭 I Made My Own JBOD Enclosure For CHEAP - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"QGkqwdM0L6g\" title=\"I Made My Own JBOD Enclosure For CHEAP\" playlabel=\"Play: I Made My Own JBOD Enclosure For CHEAP\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI really like this idea for a \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 jbod. Hardware Haven builds out \u003cstrong\u003eJ\u003c/strong\u003eust a \u003cstrong\u003eB\u003c/strong\u003eunch \u003cstrong\u003eO\u003c/strong\u003ef \u003cstrong\u003eD\u003c/strong\u003eisks using some pretty affordable hardware and has up to 16 disks added to his homelab with the os having full access to use with zfs.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"QGkqwdM0L6g\" title=\"I Made My Own JBOD Enclosure For CHEAP\" playlabel=\"Play: I Made My Own JBOD Enclosure For CHEAP\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI really like this idea for a homelab jbod. Hardware Haven builds out **J**ust a **B**unch **O**f **D**isks using some pretty affordable hardware and has up to 16 disks added to his homelab with the os having full access to use with zfs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=QGkqwdM0L6g\u0026t=781s",
      "date_published": "2025-02-23T22:30:42Z",
      "date_modified": "2025-02-23T22:30:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-573/",
      "url": "https://go.waylonwalker.com/thought-573/",
      "title": "💭 XCMKB: ZMK/Bluetooth Boards",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://xcmkb.com/pages/zmk-bluetooth-boards\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://xcmkb.com/cdn/shop/files/FONT_LOGO_9ae2f2fd-2df9-4523-a73a-b3e1cc37a52d.jpg?v=1720420689\" alt=\"XCMKB: ZMK/Bluetooth Boards — XCMKB: Key Remap Dear beginner, there is no real time key remap like Vial, but thanks to nickcoutsos for his work on Keymap Editor, a browser app allows you to load ZMK keymap code and manage it with a graphical presentation. Click Demo Keyboard if you dont have a split board with you, but wish to see how it works.\" loading=\"lazy\"/ data-glightbox=\"description: XCMKB: ZMK/Bluetooth Boards — XCMKB: Key Remap Dear beginner, there is no real time key remap like Vial, but thanks to nickcoutsos for his work on Keymap Editor, a browser app allows you to load ZMK keymap code and manage it with a graphical presentation. Click Demo Keyboard if you dont have a split board with you, but wish to see how it works.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eXCMKB: ZMK/Bluetooth Boards\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eXCMKB: Key Remap Dear beginner, there is no real time key remap like Vial, but thanks to nickcoutsos for his work on Keymap Editor, a browser app allows you to load ZMK keymap code and manage it wi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eXCMKB · xcmkb.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNice overview to getting started in zmk\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://xcmkb.com/pages/zmk-bluetooth-boards\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://xcmkb.com/cdn/shop/files/FONT_LOGO_9ae2f2fd-2df9-4523-a73a-b3e1cc37a52d.jpg?v=1720420689\" alt=\"XCMKB: ZMK/Bluetooth Boards — XCMKB: Key Remap Dear beginner, there is no real time key remap like Vial, but thanks to nickcoutsos for his work on Keymap Editor, a browser app allows you to load ZMK keymap code and manage it with a graphical presentation. Click Demo Keyboard if you dont have a split board with you, but wish to see how it works.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eXCMKB: ZMK/Bluetooth Boards\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eXCMKB: Key Remap Dear beginner, there is no real time key remap like Vial, but thanks to nickcoutsos for his work on Keymap Editor, a browser app allows you to load ZMK keymap code and manage it wi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eXCMKB \u0026middot; xcmkb.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNice overview to getting started in zmk\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://xcmkb.com/pages/zmk-bluetooth-boards",
      "date_published": "2025-02-21T14:23:18Z",
      "date_modified": "2025-02-21T14:23:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailscale-github-action/",
      "url": "https://go.waylonwalker.com/tailscale-github-action/",
      "title": "⭐ tailscale github-action",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/tailscale\" 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\"\u003etailscale\u003c/a\u003e and their project \u003ca href=\"https://github.com/tailscale/github-action\" 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\"\u003egithub-action\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA GitHub Action to connect your workflow to your Tailscale network.\u003c/p\u003e\n",
      "content_text": "\nCheck out [tailscale](https://github.com/tailscale) and their project [github-action](https://github.com/tailscale/github-action).\n\nA GitHub Action to connect your workflow to your Tailscale network.\n",
      "summary": "Check out tailscale and their project github-action.",
      "date_published": "2025-02-21T14:14:22Z",
      "date_modified": "2025-02-21T14:14:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kubenetworks-kubevpn/",
      "url": "https://go.waylonwalker.com/kubenetworks-kubevpn/",
      "title": "⭐ kubenetworks kubevpn",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/kubenetworks/kubevpn\" 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\"\u003ekubevpn\u003c/a\u003e by \u003ca href=\"https://github.com/kubenetworks\" 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\"\u003ekubenetworks\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eKubeVPN offers a Cloud Native Dev Environment that connects to kubernetes cluster network.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [kubevpn](https://github.com/kubenetworks/kubevpn) by [kubenetworks](https://github.com/kubenetworks), and it's truly impressive.\n\nKubeVPN offers a Cloud Native Dev Environment that connects to kubernetes cluster network.\n",
      "summary": "I recently discovered kubevpn by kubenetworks, and it's truly impressive.",
      "date_published": "2025-02-21T14:14:01Z",
      "date_modified": "2025-02-21T14:14:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pre-commit-exclude/",
      "url": "https://go.waylonwalker.com/pre-commit-exclude/",
      "title": "pre-commit exclude",
      "content_html": "\u003cp\u003eI run tailwind for my personal blog, whenever I update it, pre-commit goes in\nand fixes end of file.  I’m sick of these things fighting each other, since it\nis a generated app it is going to et ignored from pre-commit from now on.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eexclude\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e^static/app.*\\.css$\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003erepos\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://github.com/pre-commit/pre-commit-hooks\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erev\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev2.4.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ehooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003etrailing-whitespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eend-of-file-fixer\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck-yaml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck-added-large-files\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\nI run tailwind for my personal blog, whenever I update it, pre-commit goes in\nand fixes end of file.  I'm sick of these things fighting each other, since it\nis a generated app it is going to et ignored from pre-commit from now on.\n\n``` yaml\nexclude: ^static/app.*\\.css$\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v2.4.0\n    hooks:\n      - id: trailing-whitespace\n      - id: end-of-file-fixer\n      - id: check-yaml\n      - id: check-added-large-files\n```\n",
      "summary": "I run tailwind for my personal blog, whenever I update it, pre-commit goes in and fixes end of file. I'm sick of these things fighting each other, since it...",
      "date_published": "2025-02-20T08:11:35Z",
      "date_modified": "2025-02-20T08:11:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-572/",
      "url": "https://go.waylonwalker.com/thought-572/",
      "title": "💭 Mantis Clamp by zuberio | Download free STL model | Printables...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/48505-mantis-clamp/files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://media.printables.com/media/prints/48505/images/8664062_127e488d-62e1-4339-ae21-3cb85906810b_de093769-7ae6-4856-b254-5dd8358289bc/thumbs/cover/1200x630/jpg/pxl_20250113_223252448.jpg\" alt=\"Mantis Clamp by zuberio | Download free STL model | Printables.com\" loading=\"lazy\"/ data-glightbox=\"description: Mantis Clamp by zuberio | Download free STL model | Printables.com\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMantis Clamp by zuberio | Download free STL model | Printables.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePrintables.com · printables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eZuberios Mantic clamp, would ya look at it.  This thing looks like a handy tool for soldering. Excited to give it a try.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/101b97c0-99c6-40f5-bc2c-9d0bef3babb0.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/101b97c0-99c6-40f5-bc2c-9d0bef3babb0.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/48505-mantis-clamp/files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media.printables.com/media/prints/48505/images/8664062_127e488d-62e1-4339-ae21-3cb85906810b_de093769-7ae6-4856-b254-5dd8358289bc/thumbs/cover/1200x630/jpg/pxl_20250113_223252448.jpg\" alt=\"Mantis Clamp by zuberio | Download free STL model | Printables.com\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMantis Clamp by zuberio | Download free STL model | Printables.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePrintables.com \u0026middot; printables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nZuberios Mantic clamp, would ya look at it.  This thing looks like a handy tool for soldering. Excited to give it a try.\n\n![image](https://dropper.wayl.one/api/file/101b97c0-99c6-40f5-bc2c-9d0bef3babb0.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.printables.com/model/48505-mantis-clamp/files",
      "date_published": "2025-02-18T22:24:06Z",
      "date_modified": "2025-02-18T22:24:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-571/",
      "url": "https://go.waylonwalker.com/thought-571/",
      "title": "💭 The 3D Printed Mantis Clamp! #3dprinting #shorts #diy - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"a8uzENYZ72k\" title=\"The 3D Printed Mantis Clamp! \u0026lt;a href=\" tags=\"\" 3dprinting=\"\" \"=\"\" class=\"hashtag-tag\" data-tag=\"3dprinting\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\"\u003e#3dprinting #shorts #diy\u0026#34; playlabel=\u0026#34;Play: The 3D Printed Mantis Clamp! \u003ca href=\"/tags/3dprinting/\" class=\"hashtag-tag\" data-tag=\"3dprinting\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\"\u003e#3dprinting\u003c/a\u003e #shorts #diy\u0026#34;\u0026gt;\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn this looks good, I’ve been casually keeping my eye out for something like this for quite awhile, I think this will come in handy for keeb builds.  Printing one out as I post this, damn I love 3d-printing.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/ddbde7a1-8b8a-4096-92e2-1e602b1603a2.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ddbde7a1-8b8a-4096-92e2-1e602b1603a2.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"a8uzENYZ72k\" title=\"The 3D Printed Mantis Clamp! \u003ca href=\"/tags/3dprinting/\" class=\"hashtag-tag\" data-tag=\"3dprinting\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#3dprinting\u003c/a\u003e #shorts #diy\" playlabel=\"Play: The 3D Printed Mantis Clamp! \u003ca href=\"/tags/3dprinting/\" class=\"hashtag-tag\" data-tag=\"3dprinting\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#3dprinting\u003c/a\u003e #shorts #diy\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn this looks good, I've been casually keeping my eye out for something like this for quite awhile, I think this will come in handy for keeb builds.  Printing one out as I post this, damn I love 3d-printing.\n\n![image](https://dropper.wayl.one/api/file/ddbde7a1-8b8a-4096-92e2-1e602b1603a2.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/a8uzENYZ72k",
      "date_published": "2025-02-18T22:22:54Z",
      "date_modified": "2025-02-18T22:22:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-570/",
      "url": "https://go.waylonwalker.com/thought-570/",
      "title": "💭 There are many Style Guides but this is Mine—zachleat.com",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.zachleat.com/web/style-guide/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://screenshot.11ty.app/https%3A%2F%2Fwww.zachleat.com%2Fweb%2Fstyle-guide%2F%3Fcache%3D_20251031/opengraph/\" alt=\"There are many Style Guides but this is Mine—zachleat.com — A post by Zach Leatherman (zachleat)\" loading=\"lazy\"/ data-glightbox=\"description: There are many Style Guides but this is Mine—zachleat.com — A post by Zach Leatherman (zachleat)\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThere are many Style Guides but this is Mine—zachleat.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA post by Zach Leatherman (zachleat)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eZach Leatherman · zachleat.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eZach’s site looks sick colors are all on point, the fonts are so good.  I really like the idea of a style-guide.  I think I might be renaming my \u003ca href=\"/sample/\" class=\"wikilink\" data-title=\"Sample\" data-description=\"There is a glossary item in vibe coding here and clippy no simpy.\" data-date=\"2021-01-25\" data-preview=\"There is a glossary item in vibe coding here and clippy no simpy.\"\u003eSample\u003c/a\u003e post to style-guide now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.zachleat.com/web/style-guide/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://screenshot.11ty.app/https%3A%2F%2Fwww.zachleat.com%2Fweb%2Fstyle-guide%2F%3Fcache%3D_20251031/opengraph/\" alt=\"There are many Style Guides but this is Mine—zachleat.com — A post by Zach Leatherman (zachleat)\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThere are many Style Guides but this is Mine—zachleat.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA post by Zach Leatherman (zachleat)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eZach Leatherman \u0026middot; zachleat.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nZach's site looks sick colors are all on point, the fonts are so good.  I really like the idea of a style-guide.  I think I might be renaming my \u003ca href=\"/sample/\" class=\"wikilink\" data-title=\"Sample\" data-description=\"There is a glossary item in vibe coding here and clippy no simpy.\" data-date=\"2021-01-25\"\u003eSample\u003c/a\u003e post to style-guide now.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.zachleat.com/web/style-guide/",
      "date_published": "2025-02-18T01:56:24Z",
      "date_modified": "2025-02-18T01:56:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-569/",
      "url": "https://go.waylonwalker.com/thought-569/",
      "title": "💭 python-build-standalone/.github/workflows/release.yml at main ...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml\" alt=\"https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml\"/ data-glightbox=\"description: https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eAstral uses just in CI, kinda cool to stumble into this setup in the wild.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erun: just release-run \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"p\"\u003e{ secrets.GITHUB_TOKEN \u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"p\"\u003e{ github.event.inputs.sha \u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"p\"\u003e{ github.event.inputs.tag \u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd her is the accompanying justfile.  you can see how it accepts arguments, and starts calling out to other just recipes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003erelease-run token commit tag\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e#!/bin/bash\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eset\u003c/span\u003e -eo pipefail\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  rm -rf dist\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  just release-download-distributions \u003cspan class=\"o\"\u003e{{\u003c/span\u003etoken\u003cspan class=\"o\"\u003e}}\u003c/span\u003e \u003cspan class=\"o\"\u003e{{\u003c/span\u003ecommit\u003cspan class=\"o\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003els dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz  \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk -F- \u003cspan class=\"s1\"\u003e\u0026#39;{print $8}\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk -F. \u003cspan class=\"s1\"\u003e\u0026#39;{print $1}\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  just release-upload-distributions \u003cspan class=\"o\"\u003e{{\u003c/span\u003etoken\u003cspan class=\"o\"\u003e}}\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edatetime\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e \u003cspan class=\"o\"\u003e{{\u003c/span\u003etag\u003cspan class=\"o\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  just release-set-latest-release \u003cspan class=\"o\"\u003e{{\u003c/span\u003etag\u003cspan class=\"o\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml](/static/https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml)\n\nAstral uses just in CI, kinda cool to stumble into this setup in the wild.\n\n``` bash\nrun: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }}\n```\nAnd her is the accompanying justfile.  you can see how it accepts arguments, and starts calling out to other just recipes.\n\n``` justfile\nrelease-run token commit tag:\n  #!/bin/bash\n  set -eo pipefail\n\n  rm -rf dist\n  just release-download-distributions {{token}} {{commit}}\n  datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz  | awk -F- '{print $8}' | awk -F. '{print $1}')\n  just release-upload-distributions {{token}} ${datetime} {{tag}}\n  just release-set-latest-release {{tag}}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/release.yml",
      "date_published": "2025-02-17T23:21:05Z",
      "date_modified": "2025-02-17T23:21:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "just",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-568/",
      "url": "https://go.waylonwalker.com/thought-568/",
      "title": "💭 fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/waylonwalker.com/commit/93ca7da6dd37100d2fb2cd989c2ddb31692c3bf9\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/ae9b2c9a3a50de71e6058359f2fac9dc8ba91b6039ac557cc1c385d720c137be/WaylonWalker/waylonwalker.com/commit/93ca7da6dd37100d2fb2cd989c2ddb31692c3bf9\" alt=\"fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da — Latest version of waylonwalker.com - dev.waylonwalker.com - fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\" loading=\"lazy\"/ data-glightbox=\"description: fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da — Latest version of waylonwalker.com - dev.waylonwalker.com - fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest version of waylonwalker.com - dev.waylonwalker.com - fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003efixing more ahrefs issues on the road to fixing all major issues within my control I found a ton of urls pointed to an url with a double slash, turns out I wasn’t properly referencing slug with post.slug.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/d821eb80-aeaa-4f96-becd-7609b798663c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/d821eb80-aeaa-4f96-becd-7609b798663c.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/waylonwalker.com/commit/93ca7da6dd37100d2fb2cd989c2ddb31692c3bf9\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/ae9b2c9a3a50de71e6058359f2fac9dc8ba91b6039ac557cc1c385d720c137be/WaylonWalker/waylonwalker.com/commit/93ca7da6dd37100d2fb2cd989c2ddb31692c3bf9\" alt=\"fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da — Latest version of waylonwalker.com - dev.waylonwalker.com - fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest version of waylonwalker.com - dev.waylonwalker.com - fix double slash in url · WaylonWalker/waylonwalker.com@93ca7da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nfixing more ahrefs issues on the road to fixing all major issues within my control I found a ton of urls pointed to an url with a double slash, turns out I wasn't properly referencing slug with post.slug.\n\n![image](https://dropper.wayl.one/api/file/d821eb80-aeaa-4f96-becd-7609b798663c.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/waylonwalker.com/commit/93ca7da6dd37100d2fb2cd989c2ddb31692c3bf9",
      "date_published": "2025-02-17T22:32:04Z",
      "date_modified": "2025-02-17T22:32:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-567/",
      "url": "https://go.waylonwalker.com/thought-567/",
      "title": "💭 fix json schema · WaylonWalker/waylonwalker.com@deebd40",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/waylonwalker.com/commit/deebd400e638bfaa41db953530597983ae0df82a\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/adc37dbf80305b6974e7593a6646169095b20c0c0f7ff71d70c46b1d03c66635/WaylonWalker/waylonwalker.com/commit/deebd400e638bfaa41db953530597983ae0df82a\" alt=\"fix json schema · WaylonWalker/waylonwalker.com@deebd40 — Latest version of waylonwalker.com - dev.waylonwalker.com - fix json schema · WaylonWalker/waylonwalker.com@deebd40\" loading=\"lazy\"/ data-glightbox=\"description: fix json schema · WaylonWalker/waylonwalker.com@deebd40 — Latest version of waylonwalker.com - dev.waylonwalker.com - fix json schema · WaylonWalker/waylonwalker.com@deebd40\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efix json schema · WaylonWalker/waylonwalker.com@deebd40\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest version of waylonwalker.com - dev.waylonwalker.com - fix json schema · WaylonWalker/waylonwalker.com@deebd40\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI found that I had \u003cem\u003eStructured data has schema.org validation error\u003c/em\u003e on essentially every single page on my blog, turns out I had made some changes and have never tried to validate it.  Damn json and its hatred towards trailing commas.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/889378f5-6444-4a38-a7e4-c305fe93e1d7.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/889378f5-6444-4a38-a7e4-c305fe93e1d7.webp\" alt=\"889378f5-6444-4a38-a7e4-c305fe93e1d7.webp\"/ data-glightbox=\"description: 889378f5-6444-4a38-a7e4-c305fe93e1d7.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/ca373ce6-9a4a-4e5b-8a0e-0b2959915ab5.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ca373ce6-9a4a-4e5b-8a0e-0b2959915ab5.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/waylonwalker.com/commit/deebd400e638bfaa41db953530597983ae0df82a\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/adc37dbf80305b6974e7593a6646169095b20c0c0f7ff71d70c46b1d03c66635/WaylonWalker/waylonwalker.com/commit/deebd400e638bfaa41db953530597983ae0df82a\" alt=\"fix json schema · WaylonWalker/waylonwalker.com@deebd40 — Latest version of waylonwalker.com - dev.waylonwalker.com - fix json schema · WaylonWalker/waylonwalker.com@deebd40\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efix json schema · WaylonWalker/waylonwalker.com@deebd40\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest version of waylonwalker.com - dev.waylonwalker.com - fix json schema · WaylonWalker/waylonwalker.com@deebd40\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI found that I had _Structured data has schema.org validation error_ on essentially every single page on my blog, turns out I had made some changes and have never tried to validate it.  Damn json and its hatred towards trailing commas.\n\n\n![889378f5-6444-4a38-a7e4-c305fe93e1d7.webp](https://dropper.wayl.one/api/file/889378f5-6444-4a38-a7e4-c305fe93e1d7.webp)\n\n\n![image](https://dropper.wayl.one/api/file/ca373ce6-9a4a-4e5b-8a0e-0b2959915ab5.webp)\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/waylonwalker.com/commit/deebd400e638bfaa41db953530597983ae0df82a",
      "date_published": "2025-02-17T22:26:01Z",
      "date_modified": "2025-02-17T22:26:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-566/",
      "url": "https://go.waylonwalker.com/thought-566/",
      "title": "💭 Weblogging: Part 1 – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2024/12/09/weblogging-1/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2024-12-09-weblogging-1.png\" alt=\"Weblogging: Part 1 — The one where I blog about blogging (part 1)\" loading=\"lazy\"/ data-glightbox=\"description: Weblogging: Part 1 — The one where I blog about blogging (part 1)\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWeblogging: Part 1\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I blog about blogging (part 1)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eLong live RSS!  Rss is not dead David, you are right there.  I really agree with David that learning a topic well enough to form thoughts and write about it really help learning.  You don’t need to be an expert, but forming your own thoughts, putting ideas in words takes a lot more than surface level knowledge.  When you try to write or speak about something you quickly realize where your holes in understanding are.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBlogging helps me learn. When I commit knowledge to writing it reinforces what I know and shines a spotlight on what I don’t. Most topics require additional research. Even then, I occasionally get things wrong, or miss different ways of thinking, and I welcome corrections. I’ll often update and enrich my posts based on feedback. Without my blog I’d miss other points of view.\u003c/p\u003e\n\u003cp\u003eAs they say, the best way to get an answer on the internet is not to pose a question, but to assert the wrong solution! Most feedback I get is constructive. Sometimes it’s blunt but I try not to read into unspoken sentiment. Some people are more direct. If the end result is positive learning, I can take a hit or two.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2024/12/09/weblogging-1/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2024-12-09-weblogging-1.png\" alt=\"Weblogging: Part 1 — The one where I blog about blogging (part 1)\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWeblogging: Part 1\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I blog about blogging (part 1)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLong live RSS!  Rss is not dead David, you are right there.  I really agree with David that learning a topic well enough to form thoughts and write about it really help learning.  You don't need to be an expert, but forming your own thoughts, putting ideas in words takes a lot more than surface level knowledge.  When you try to write or speak about something you quickly realize where your holes in understanding are.\n\n\u003e Blogging helps me learn. When I commit knowledge to writing it reinforces what I know and shines a spotlight on what I don’t. Most topics require additional research. Even then, I occasionally get things wrong, or miss different ways of thinking, and I welcome corrections. I’ll often update and enrich my posts based on feedback. Without my blog I’d miss other points of view.\n\u003e \n\u003e As they say, the best way to get an answer on the internet is not to pose a question, but to assert the wrong solution! Most feedback I get is constructive. Sometimes it’s blunt but I try not to read into unspoken sentiment. Some people are more direct. If the end result is positive learning, I can take a hit or two.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2024/12/09/weblogging-1/",
      "date_published": "2025-02-17T21:01:00Z",
      "date_modified": "2025-02-17T21:01:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-565/",
      "url": "https://go.waylonwalker.com/thought-565/",
      "title": "💭 fix: Open Graph URL not matching canonical · WaylonWalker/wayl...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/waylonwalker.com/commit/0fd994b0101f7260051ec914ea6987e1c70603bd\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/eadd9b7a04f6414f59da1c650ec20ab1bf5f5bc2d75b7ec71f784e28d963bc99/WaylonWalker/waylonwalker.com/commit/0fd994b0101f7260051ec914ea6987e1c70603bd\" alt=\"fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b — Latest version of waylonwalker.com - dev.waylonwalker.com - fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\" loading=\"lazy\"/ data-glightbox=\"description: fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b — Latest version of waylonwalker.com - dev.waylonwalker.com - fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest version of waylonwalker.com - dev.waylonwalker.com - fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIn fixing a bunch of meta tags, I introduced \u003cem\u003eOpen Graph URL not matching canonical\u003c/em\u003e on every page by having trailing / on canonical and not on the \u003ccode\u003eog:url\u003c/code\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/1adedfb8-5fbd-4622-adda-2f3984baeb03.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/1adedfb8-5fbd-4622-adda-2f3984baeb03.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis commit will fix the error.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/waylonwalker.com/commit/0fd994b0101f7260051ec914ea6987e1c70603bd\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/eadd9b7a04f6414f59da1c650ec20ab1bf5f5bc2d75b7ec71f784e28d963bc99/WaylonWalker/waylonwalker.com/commit/0fd994b0101f7260051ec914ea6987e1c70603bd\" alt=\"fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b — Latest version of waylonwalker.com - dev.waylonwalker.com - fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest version of waylonwalker.com - dev.waylonwalker.com - fix: Open Graph URL not matching canonical · WaylonWalker/waylonwalker.com@0fd994b\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIn fixing a bunch of meta tags, I introduced _Open Graph URL not matching canonical_ on every page by having trailing / on canonical and not on the `og:url`.\n\n![image](https://dropper.wayl.one/api/file/1adedfb8-5fbd-4622-adda-2f3984baeb03.webp)\n\nThis commit will fix the error.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/waylonwalker.com/commit/0fd994b0101f7260051ec914ea6987e1c70603bd",
      "date_published": "2025-02-17T20:53:22Z",
      "date_modified": "2025-02-17T20:53:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-564/",
      "url": "https://go.waylonwalker.com/thought-564/",
      "title": "💭 Cotton Coder – David Bushell – Web Dev (UK)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2024/01/24/cotton-coder/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://dbushell.com/images/articles/2024-01-24-cotton-coder.png\" alt=\"Cotton Coder — The one where I launch a new blog\" loading=\"lazy\"/ data-glightbox=\"description: Cotton Coder — The one where I launch a new blog\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCotton Coder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I launch a new blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com · dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI like Davids idea for cotton coder here, reminds me a lot of \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, which turns out to be mroe commonly called a linkblog.  I can relate to David heavily on gathering too many side projects and soem collecting more digital dust than you would really like them to.  I use thoughts for quick publishing, very similar to David’s \u003ca href=\"https://dbushell.com/notes/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dbushell.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dbushell.com.ico\" class=\"has-avatar  has-avatar-before\"\u003enotes\u003c/a\u003e.  I have tags and titles, but the titles are a reflection of the post I’m taking a note on.  They are short and sweet, I put just enough thought into them without overthinking them.  They live as a separate server hosted website, but the data gets pulled into my blog at build time, so they end up in the same place eventually.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dbushell.com/2024/01/24/cotton-coder/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://dbushell.com/images/articles/2024-01-24-cotton-coder.png\" alt=\"Cotton Coder — The one where I launch a new blog\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCotton Coder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe one where I launch a new blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edbushell.com \u0026middot; dbushell.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI like Davids idea for cotton coder here, reminds me a lot of \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, which turns out to be mroe commonly called a linkblog.  I can relate to David heavily on gathering too many side projects and soem collecting more digital dust than you would really like them to.  I use thoughts for quick publishing, very similar to David's [notes](https://dbushell.com/notes/).  I have tags and titles, but the titles are a reflection of the post I'm taking a note on.  They are short and sweet, I put just enough thought into them without overthinking them.  They live as a separate server hosted website, but the data gets pulled into my blog at build time, so they end up in the same place eventually.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dbushell.com/2024/01/24/cotton-coder/",
      "date_published": "2025-02-17T03:05:12Z",
      "date_modified": "2025-02-17T03:05:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-563/",
      "url": "https://go.waylonwalker.com/thought-563/",
      "title": "💭 valkey-io/valkey: A flexible distributed key-value datastore t...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/valkey-io/valkey\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/1a04205baa56b9a9233ba9c9f085c93e858fd12494e552bd9a9ab1cea481d19e/valkey-io/valkey\" alt=\"GitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other realtime workloads. — A flexible distributed key-value database that is optimized for caching and other realtime workloads. - valkey-io/valkey\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other realtime workloads. — A flexible distributed key-value database that is optimized for caching and other realtime workloads. - valkey-io/valkey\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other realtime workloads.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA flexible distributed key-value database that is optimized for caching and other realtime workloads. - valkey-io/valkey\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003evalkey appears to be the largest open source fork of redis that was forked just before their transition to the new source available licenses.\u003c/p\u003e\n\u003cp\u003eOne notable thing missing from the readme is how to run with docker, which I saw in the valkey-py docs.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run -p 6379:6379 -it valkey/valkey:latest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can install the python library with\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m venv .venv\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e. ./.venv/bin/activate\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install \u003cspan class=\"s2\"\u003e\u0026#34;valkey[libvalkey]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/valkey-io/valkey\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/1a04205baa56b9a9233ba9c9f085c93e858fd12494e552bd9a9ab1cea481d19e/valkey-io/valkey\" alt=\"GitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other realtime workloads. — A flexible distributed key-value database that is optimized for caching and other realtime workloads. - valkey-io/valkey\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other realtime workloads.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA flexible distributed key-value database that is optimized for caching and other realtime workloads. - valkey-io/valkey\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nvalkey appears to be the largest open source fork of redis that was forked just before their transition to the new source available licenses.\n\nOne notable thing missing from the readme is how to run with docker, which I saw in the valkey-py docs.\n\n``` bash\ndocker run -p 6379:6379 -it valkey/valkey:latest\n```\n\nYou can install the python library with\n\n``` bash\npython -m venv .venv\n. ./.venv/bin/activate\npip install \"valkey[libvalkey]\"\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/valkey-io/valkey",
      "date_published": "2025-02-17T02:27:34Z",
      "date_modified": "2025-02-17T02:27:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/valkey-io-valkey-py/",
      "url": "https://go.waylonwalker.com/valkey-io-valkey-py/",
      "title": "⭐ valkey-io valkey-py",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/valkey-io/valkey-py\" 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\"\u003evalkey-py\u003c/a\u003e, created by \u003ca href=\"https://github.com/valkey-io\" 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\"\u003evalkey-io\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eValkey Python client based on a fork of redis-py\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [valkey-py](https://github.com/valkey-io/valkey-py), created by [valkey-io](https://github.com/valkey-io).\n\nValkey Python client based on a fork of redis-py\n",
      "summary": "If you're into interesting projects, don't miss out on valkey-py, created by valkey-io.",
      "date_published": "2025-02-17T02:24:49Z",
      "date_modified": "2025-02-17T02:24:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/valkey-io-valkey/",
      "url": "https://go.waylonwalker.com/valkey-io-valkey/",
      "title": "⭐ valkey-io valkey",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/valkey-io/valkey\" 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\"\u003evalkey\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/valkey-io\" 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\"\u003evalkey-io\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA flexible distributed key-value datastore that is optimized for caching and other realtime workloads.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [valkey](https://github.com/valkey-io/valkey), an amazing project by [valkey-io](https://github.com/valkey-io). It's worth exploring!\n\nA flexible distributed key-value datastore that is optimized for caching and other realtime workloads.\n",
      "summary": "I'm really excited about valkey, an amazing project by valkey-io. It's worth exploring!",
      "date_published": "2025-02-17T02:22:53Z",
      "date_modified": "2025-02-17T02:22:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-562/",
      "url": "https://go.waylonwalker.com/thought-562/",
      "title": "💭 valkey · PyPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/valkey/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"valkey — Python client for Valkey forked from redis-py\" loading=\"lazy\"/ data-glightbox=\"description: valkey — Python client for Valkey forked from redis-py\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003evalkey\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePython client for Valkey forked from redis-py\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI · pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epython bindings for valkey, forked from redis.\u003c/p\u003e\n\u003cp\u003eone notable difference I see from redis is that you can install with libvalkey to autmatically get faster parsing support.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFor faster performance, install valkey with libvalkey support, this provides a compiled response parser, and for most cases requires zero code changes. By default, if libvalkey \u0026gt;= 2.3.2 is available, valkey-py will attempt to use it for response parsing.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install \u003cspan class=\"s2\"\u003e\u0026#34;valkey[libvalkey]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/valkey/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"valkey — Python client for Valkey forked from redis-py\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003evalkey\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePython client for Valkey forked from redis-py\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI \u0026middot; pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npython bindings for valkey, forked from redis.\n\none notable difference I see from redis is that you can install with libvalkey to autmatically get faster parsing support.\n\n\u003e For faster performance, install valkey with libvalkey support, this provides a compiled response parser, and for most cases requires zero code changes. By default, if libvalkey \u003e= 2.3.2 is available, valkey-py will attempt to use it for response parsing.\n\n``` bash\npip install \"valkey[libvalkey]\"\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/valkey/",
      "date_published": "2025-02-17T02:22:12Z",
      "date_modified": "2025-02-17T02:22:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-561/",
      "url": "https://go.waylonwalker.com/thought-561/",
      "title": "💭 Fragmentions - linking to any text",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.kevinmarks.com/fragmentions.html#%22eventually%20every%20URL%20ends%20up%20as%20a%20porn%20site%22\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.kevinmarks.com.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.kevinmarks.com.jpg\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFragmentions - linking to any text\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekevinmarks.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI can’t believe I’ve never see this Tim Berners-Lee quote, but I can’t unsee it and will be required to reference it from now on.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eeventually every URL ends up as a porn site\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI had a friend let his blog domain expire, within a short period it was scooped up and was hosting porn.  I don’t know why, but my best guess is that they were holding it ransom with the most embarrassing content to have your personal site replaced with.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.kevinmarks.com/fragmentions.html#%22eventually%20every%20URL%20ends%20up%20as%20a%20porn%20site%22\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFragmentions - linking to any text\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekevinmarks.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI can't believe I've never see this Tim Berners-Lee quote, but I can't unsee it and will be required to reference it from now on.\n\n\u003e eventually every URL ends up as a porn site\n\nI had a friend let his blog domain expire, within a short period it was scooped up and was hosting porn.  I don't know why, but my best guess is that they were holding it ransom with the most embarrassing content to have your personal site replaced with.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.kevinmarks.com/fragmentions.html#%22eventually%20every%20URL%20ends%20up%20as%20a%20porn%20site%22",
      "date_published": "2025-02-15T15:39:33Z",
      "date_modified": "2025-02-15T15:39:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "indieweb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-560/",
      "url": "https://go.waylonwalker.com/thought-560/",
      "title": "💭 hype cp | Hypermedia Copy \u0026 Paste",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hypecp.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hypecp.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hypecp.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehype cp | Hypermedia Copy \u0026amp; Paste\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehypecp.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a super cool reference for \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e snippets.  I really like how he has a couple of errors on the page as examples with examples that fix these common errors.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hypecp.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehype cp | Hypermedia Copy \u0026amp; Paste\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehypecp.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a super cool reference for htmx snippets.  I really like how he has a couple of errors on the page as examples with examples that fix these common errors.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hypecp.com/",
      "date_published": "2025-02-15T15:31:52Z",
      "date_modified": "2025-02-15T15:31:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/newlines-in-css-before/",
      "url": "https://go.waylonwalker.com/newlines-in-css-before/",
      "title": "newlines in css before",
      "content_html": "\u003cp\u003eI’m building in a [[ fragmentions ]] implementation into my blog, I wanted to\nadd some text before the fragment to indidate that it was the highlighted\nfragment that someone may have intended to share with you.\u003c/p\u003e\n\u003cp\u003eTo get a newline in a \u003ccode\u003e:before\u003c/code\u003e I need to use \u003ccode\u003e\\A\u003c/code\u003e and \u003ccode\u003ewhite-space: pre-line\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nd\"\u003etarget\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003ebefore\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"nt\"\u003efragmention\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003ebefore\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Highlighted Fragment:\\A\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ewhite-space\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003epre-line\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003efont-bold\u003c/span\u003e \u003cspan class=\"err\"\u003etext-yellow-600\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere is what it looks like on my not yet live implementation of fragmentions.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/fb693b92-3744-45a5-9220-bd914162f435.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/fb693b92-3744-45a5-9220-bd914162f435.png\" alt=\"screenshot-2025-02-15T15-43-06-372Z.png\"/ data-glightbox=\"description: screenshot-2025-02-15T15-43-06-372Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI'm building in a [[ fragmentions ]] implementation into my blog, I wanted to\nadd some text before the fragment to indidate that it was the highlighted\nfragment that someone may have intended to share with you.\n\nTo get a newline in a `:before` I need to use `\\A` and `white-space: pre-line`.\n\n``` css\nbody :target::before,\nbody [fragmention]::before {\n    content: \"Highlighted Fragment:\\A\";\n    white-space: pre-line;\n    @apply font-bold text-yellow-600;\n}\n```\n\nHere is what it looks like on my not yet live implementation of fragmentions.\n\n![screenshot-2025-02-15T15-43-06-372Z.png](https://dropper.waylonwalker.com/api/file/fb693b92-3744-45a5-9220-bd914162f435.png)\n",
      "summary": "I'm building in a fragmentions implementation into my blog, I wanted to add some text before the fragment to indidate that it was the highlighted fragment...",
      "date_published": "2025-02-15T09:28:48Z",
      "date_modified": "2025-02-15T09:28:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bigskysoftware-fixi/",
      "url": "https://go.waylonwalker.com/bigskysoftware-fixi/",
      "title": "⭐ bigskysoftware fixi",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/bigskysoftware/fixi\" 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\"\u003efixi\u003c/a\u003e by \u003ca href=\"https://github.com/bigskysoftware\" 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\"\u003ebigskysoftware\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [fixi](https://github.com/bigskysoftware/fixi) by [bigskysoftware](https://github.com/bigskysoftware), and it's truly impressive.\n\nNo description available.\n",
      "summary": "I recently discovered fixi by bigskysoftware, and it's truly impressive.",
      "date_published": "2025-02-15T00:21:48Z",
      "date_modified": "2025-02-15T00:21:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-559/",
      "url": "https://go.waylonwalker.com/thought-559/",
      "title": "💭 Chris Coyier",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2024/03/03/11148/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJpbWciOiJodHRwczpcL1wvY2hyaXNjb3lpZXIubmV0XC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wM1wvcGV4ZWxzLXBob3RvLTUzMTg0NC0xMDI0eDY4Mi5qcGVnIiwidHh0IjoiaSBkaWRuJ3Qgc2F5IHRoZSBzb2NpYWwgbWVkaWEgaW1hZ2Ugd291bGRuJ3QgaGF2ZSBhIHRpdGxlIiwidGVtcGxhdGUiOiJmdWxsc2NyZWVuIiwiYmxvZ19pZCI6NzQwNzQyNDh9.K_WGOGYYuB2MeV23x0ID9j-vWYGGnqJ5WyhhpwdZuBQMQ\" alt=\"— I’m going to leave the title off this post and see what happens. Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook…\" loading=\"lazy\"/ data-glightbox=\"description: — I’m going to leave the title off this post and see what happens. Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e \u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’m going to leave the title off this post and see what happens. Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier · chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting thoughts here on blog post titles, do we need them?  They are so ingrained into everything.\u003c/p\u003e\n\u003cp\u003eIt makes me think about markata.dev.  I don’t require you to add any meta data to your post, you don’t need a title at all, but you do have to name a markdown file, and this does end up being your title if you don’t set one.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTitles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook, Threads, LinkedIn, Bluesky, etc.) don’t have titles. Especially for short posts, the title just isn’t necessary. Just say the thing.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eInteresting observation what rss readers do without one.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMy own favorite[rss reader], Feedbin, shows the author of the post as the title if it’s missing. Eh, not great not horrible.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eHilariously he puts a title on the \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eOG\u003c/a\u003e image for the post.  I was interested in seeing what would happen in signal, it appears to be showing the author name as well.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/ea78bda4-d2ea-41bd-9a60-27d9b09d4825.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ea78bda4-d2ea-41bd-9a60-27d9b09d4825.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eConfirmed the page has no title\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/4a68af50-9880-4e1c-8fca-91313a154630.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/4a68af50-9880-4e1c-8fca-91313a154630.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eor does it?\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/66a63ca2-c705-4460-8b8a-d1633fc42f21.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/66a63ca2-c705-4460-8b8a-d1633fc42f21.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIt makes me wonder where Signal gets this title is it from the title block or the site_name meta data\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2024/03/03/11148/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJpbWciOiJodHRwczpcL1wvY2hyaXNjb3lpZXIubmV0XC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI0XC8wM1wvcGV4ZWxzLXBob3RvLTUzMTg0NC0xMDI0eDY4Mi5qcGVnIiwidHh0IjoiaSBkaWRuJ3Qgc2F5IHRoZSBzb2NpYWwgbWVkaWEgaW1hZ2Ugd291bGRuJ3QgaGF2ZSBhIHRpdGxlIiwidGVtcGxhdGUiOiJmdWxsc2NyZWVuIiwiYmxvZ19pZCI6NzQwNzQyNDh9.K_WGOGYYuB2MeV23x0ID9j-vWYGGnqJ5WyhhpwdZuBQMQ\" alt=\"— I’m going to leave the title off this post and see what happens. Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e \u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’m going to leave the title off this post and see what happens. Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier \u0026middot; chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting thoughts here on blog post titles, do we need them?  They are so ingrained into everything.\n\nIt makes me think about markata.dev.  I don't require you to add any meta data to your post, you don't need a title at all, but you do have to name a markdown file, and this does end up being your title if you don't set one.\n\n\u003e Titles are a lot of pressure! I think there is a reason that the big text-based social networking sites (Mastodon, X, Facebook, Threads, LinkedIn, Bluesky, etc.) don’t have titles. Especially for short posts, the title just isn’t necessary. Just say the thing.\n\nInteresting observation what rss readers do without one.\n\n\u003eMy own favorite[rss reader], Feedbin, shows the author of the post as the title if it’s missing. Eh, not great not horrible.\n\nHilariously he puts a title on the OG image for the post.  I was interested in seeing what would happen in signal, it appears to be showing the author name as well.\n\n![image](https://dropper.wayl.one/api/file/ea78bda4-d2ea-41bd-9a60-27d9b09d4825.webp)\n\nConfirmed the page has no title \n\n![image](https://dropper.wayl.one/api/file/4a68af50-9880-4e1c-8fca-91313a154630.webp)\n\nor does it?\n\n![image](https://dropper.wayl.one/api/file/66a63ca2-c705-4460-8b8a-d1633fc42f21.webp)\n\nIt makes me wonder where Signal gets this title is it from the title block or the site_name meta data\n\n\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://chriscoyier.net/2024/03/03/11148/",
      "date_published": "2025-02-14T19:40:19Z",
      "date_modified": "2025-02-14T19:40:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-558/",
      "url": "https://go.waylonwalker.com/thought-558/",
      "title": "💭 AI workloads on Talos Linux - Sidero Labs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.siderolabs.com/blog/ai-workloads-on-talos-linux/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.siderolabs.com/site-assets/uploads/2025/02/ai-workloads-banner.webp\" alt=\"AI workloads on Talos Linux - Sidero Labs — Companies are exploring how to run GPU accelerated workloads on Kubernetes. It doesn’t matter if you have a business use case for AI or not, knowing how it works is important.\" loading=\"lazy\"/ data-glightbox=\"description: AI workloads on Talos Linux - Sidero Labs — Companies are exploring how to run GPU accelerated workloads on Kubernetes. It doesn’t matter if you have a business use case for AI or not, knowing how it works is important.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAI workloads on Talos Linux - Sidero Labs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCompanies are exploring how to run GPU accelerated workloads on Kubernetes. It doesn’t matter if you have a business use case for AI or not, knowing how it works is important.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esiderolabs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ecool article for setting up talos linux with an nvidia gpu.  What a wild world it we are living in where these devices that started out being only for hardcore gamers are becoming commonplace in servers and slowly entering the \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 space.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.siderolabs.com/blog/ai-workloads-on-talos-linux/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.siderolabs.com/site-assets/uploads/2025/02/ai-workloads-banner.webp\" alt=\"AI workloads on Talos Linux - Sidero Labs — Companies are exploring how to run GPU accelerated workloads on Kubernetes. It doesn’t matter if you have a business use case for AI or not, knowing how it works is important.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAI workloads on Talos Linux - Sidero Labs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCompanies are exploring how to run GPU accelerated workloads on Kubernetes. It doesn’t matter if you have a business use case for AI or not, knowing how it works is important.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esiderolabs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ncool article for setting up talos linux with an nvidia gpu.  What a wild world it we are living in where these devices that started out being only for hardcore gamers are becoming commonplace in servers and slowly entering the homelab space.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.siderolabs.com/blog/ai-workloads-on-talos-linux/",
      "date_published": "2025-02-14T19:27:54Z",
      "date_modified": "2025-02-14T19:27:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-557/",
      "url": "https://go.waylonwalker.com/thought-557/",
      "title": "💭 Proompted Kiddies Learning The Hard Way - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"eNIBie_uYMI\" title=\"Proompted Kiddies Learning The Hard Way\" playlabel=\"Play: Proompted Kiddies Learning The Hard Way\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn prime makes an interesting point near then end of this video.  He’s seen a bunch of people able to just throw down charts and shit at their company and end up being “the coding guy” cause they proompted something once.  In a way I can relate, I got into software in a similar way, but at a time that it took a lot more hard work, understanding , and copy past from the right stack overflow.   Based on some of the people around me at the time I can only imagine how some people must feel like they got pushed into it without wanting it, and now are building something they don’t know anything about with no care about it or care to build any expertise.  Is the future proompted charts from enterprise chatgpt or do we only continue growing more need for software from here.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/d43265cd-7fe1-4cb4-a22e-d82a37a2e368.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/d43265cd-7fe1-4cb4-a22e-d82a37a2e368.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"eNIBie_uYMI\" title=\"Proompted Kiddies Learning The Hard Way\" playlabel=\"Play: Proompted Kiddies Learning The Hard Way\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn prime makes an interesting point near then end of this video.  He's seen a bunch of people able to just throw down charts and shit at their company and end up being \"the coding guy\" cause they proompted something once.  In a way I can relate, I got into software in a similar way, but at a time that it took a lot more hard work, understanding , and copy past from the right stack overflow.   Based on some of the people around me at the time I can only imagine how some people must feel like they got pushed into it without wanting it, and now are building something they don't know anything about with no care about it or care to build any expertise.  Is the future proompted charts from enterprise chatgpt or do we only continue growing more need for software from here.\n\n\n![image](https://dropper.wayl.one/api/file/d43265cd-7fe1-4cb4-a22e-d82a37a2e368.webp)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=eNIBie_uYMI",
      "date_published": "2025-02-14T19:15:41Z",
      "date_modified": "2025-02-14T19:15:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "dev",
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/duckdb-pg_duckdb/",
      "url": "https://go.waylonwalker.com/duckdb-pg_duckdb/",
      "title": "⭐ duckdb pg_duckdb",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/duckdb\" 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\"\u003educkdb’s\u003c/a\u003e project \u003ca href=\"https://github.com/duckdb/pg_duckdb\" 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\"\u003epg_duckdb\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDuckDB-powered Postgres for high performance apps \u0026amp; analytics.\u003c/p\u003e\n",
      "content_text": "\nI like [duckdb's](https://github.com/duckdb) project [pg_duckdb](https://github.com/duckdb/pg_duckdb).\n\nDuckDB-powered Postgres for high performance apps \u0026 analytics.\n",
      "summary": "I like duckdb's project pg_duckdb.",
      "date_published": "2025-02-14T13:56:38Z",
      "date_modified": "2025-02-14T13:56:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/medialab-xan/",
      "url": "https://go.waylonwalker.com/medialab-xan/",
      "title": "⭐ medialab xan",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/medialab/xan\" 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\"\u003exan\u003c/a\u003e by \u003ca href=\"https://github.com/medialab\" 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\"\u003emedialab\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eThe CSV magician\u003c/p\u003e\n",
      "content_text": "\nJust starred [xan](https://github.com/medialab/xan) by [medialab](https://github.com/medialab). It's an exciting project with a lot to offer.\n\nThe CSV magician\n",
      "summary": "Just starred xan by medialab. It's an exciting project with a lot to offer.",
      "date_published": "2025-02-14T13:56:21Z",
      "date_modified": "2025-02-14T13:56:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/johnwarne-upvote-rss/",
      "url": "https://go.waylonwalker.com/johnwarne-upvote-rss/",
      "title": "⭐ johnwarne upvote-rss",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/johnwarne/upvote-rss\" 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\"\u003eupvote-rss\u003c/a\u003e from \u003ca href=\"https://github.com/johnwarne\" 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\"\u003ejohnwarne\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eGenerate rich RSS feeds from Reddit, Hacker News, and Lemmy\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [upvote-rss](https://github.com/johnwarne/upvote-rss) from [johnwarne](https://github.com/johnwarne).\n\nGenerate rich RSS feeds from Reddit, Hacker News, and Lemmy\n",
      "summary": "I'm impressed by upvote-rss from johnwarne.",
      "date_published": "2025-02-14T13:54:30Z",
      "date_modified": "2025-02-14T13:54:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/caniszczyk-rugpulls-dev/",
      "url": "https://go.waylonwalker.com/caniszczyk-rugpulls-dev/",
      "title": "⭐ caniszczyk rugpulls.dev",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/caniszczyk/rugpulls.dev\" 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\"\u003erugpulls.dev\u003c/a\u003e by \u003ca href=\"https://github.com/caniszczyk\" 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\"\u003ecaniszczyk\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [rugpulls.dev](https://github.com/caniszczyk/rugpulls.dev) by [caniszczyk](https://github.com/caniszczyk).\n\nNo description available.\n",
      "summary": "Looking for inspiration? rugpulls.dev by caniszczyk.",
      "date_published": "2025-02-13T17:15:44Z",
      "date_modified": "2025-02-13T17:15:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fosrl-pangolin/",
      "url": "https://go.waylonwalker.com/fosrl-pangolin/",
      "title": "⭐ fosrl pangolin",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/fosrl/pangolin\" 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\"\u003epangolin\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/fosrl\" 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\"\u003efosrl\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eTunneled Mesh Reverse Proxy Server with Identity and Access Control and Dashboard UI\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [pangolin](https://github.com/fosrl/pangolin), an amazing project by [fosrl](https://github.com/fosrl). It's worth exploring!\n\nTunneled Mesh Reverse Proxy Server with Identity and Access Control and Dashboard UI\n",
      "summary": "I'm really excited about pangolin, an amazing project by fosrl. It's worth exploring!",
      "date_published": "2025-02-13T17:14:43Z",
      "date_modified": "2025-02-13T17:14:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/prazzon-flexbox-labs/",
      "url": "https://go.waylonwalker.com/prazzon-flexbox-labs/",
      "title": "⭐ prazzon Flexbox-Labs",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/prazzon/Flexbox-Labs\" 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\"\u003eFlexbox-Labs\u003c/a\u003e by \u003ca href=\"https://github.com/prazzon\" 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\"\u003eprazzon\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA web app for creating flexible layouts with the power of CSS Flexbox.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [Flexbox-Labs](https://github.com/prazzon/Flexbox-Labs) by [prazzon](https://github.com/prazzon).\n\nA web app for creating flexible layouts with the power of CSS Flexbox.\n",
      "summary": "Looking for inspiration? Flexbox-Labs by prazzon.",
      "date_published": "2025-02-13T17:12:58Z",
      "date_modified": "2025-02-13T17:12:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vagos-llm-sort/",
      "url": "https://go.waylonwalker.com/vagos-llm-sort/",
      "title": "⭐ vagos llm-sort",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/vagos/llm-sort\" 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\"\u003ellm-sort\u003c/a\u003e by \u003ca href=\"https://github.com/vagos\" 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\"\u003evagos\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eSort input lines semantically with llm\u003c/p\u003e\n",
      "content_text": "\nCheck out [llm-sort](https://github.com/vagos/llm-sort) by [vagos](https://github.com/vagos). It's a well-crafted project with great potential.\n\nSort input lines semantically with llm\n",
      "summary": "Check out llm-sort by vagos. It's a well-crafted project with great potential.",
      "date_published": "2025-02-13T17:10:55Z",
      "date_modified": "2025-02-13T17:10:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/testing-nvim-installs/",
      "url": "https://go.waylonwalker.com/testing-nvim-installs/",
      "title": "testing nvim installs",
      "content_html": "\u003cp\u003eTesting fresh nvim installs can be a pain, and hard to di without borking your\nknown good install.  I’ve been using \u003ccode\u003eNVIM_APPNAME\u003c/code\u003e to run a test nvim in a\nsandbox that wont bork my main install.  This usually runs for me in under a\nminute, can be down under 15s if I remove some of the TreeSitter installs at\nthe end.  This beats a full docker build of my full devtainer to test out nvim\npackaging woes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm ~/.cache/wwtest -rf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm ~/.local/share/wwtest -rf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm ~/.config/wwtest -rf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp -r nvim/.config/nvim/ ~/.config/wwtest\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewwtest nvim --headless \u003cspan class=\"s2\"\u003e\u0026#34;+Lazy sync\u0026#34;\u003c/span\u003e +qa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewwtest nvim --headless \u003cspan class=\"s2\"\u003e\u0026#34;+TSUpdateSync\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;+sleep 5000m\u0026#34;\u003c/span\u003e +qa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewwtest nvim --headless \u003cspan class=\"s2\"\u003e\u0026#34;+MasonUpdate\u0026#34;\u003c/span\u003e +qa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewwtest nvim --headless \u003cspan class=\"s2\"\u003e\u0026#34;+TSInstallSync! c cpp go lua python rust tsx javascript typescript vimdoc vim bash yaml toml vue just\u0026#34;\u003c/span\u003e +qa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewwtest nvim --headless \u003cspan class=\"s2\"\u003e\u0026#34;+MasonInstall lua-language-server rustywind ruff ruff-lsp html-lsp typescript-language-server beautysh fixjson isort markdownlint stylua yamlfmt python-lsp-server\u0026#34;\u003c/span\u003e +qa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewwtest nvim\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI’ve started to use this as a \u003ccode\u003ejust\u003c/code\u003e recipe to run before deploying a new\nversion of my dotfiles. So far its pairing nicely with \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\u003c/p\u003e\n",
      "content_text": "\nTesting fresh nvim installs can be a pain, and hard to di without borking your\nknown good install.  I've been using `NVIM_APPNAME` to run a test nvim in a\nsandbox that wont bork my main install.  This usually runs for me in under a\nminute, can be down under 15s if I remove some of the TreeSitter installs at\nthe end.  This beats a full docker build of my full devtainer to test out nvim\npackaging woes.\n\n``` bash\nrm ~/.cache/wwtest -rf\nrm ~/.local/share/wwtest -rf\nrm ~/.config/wwtest -rf\ncp -r nvim/.config/nvim/ ~/.config/wwtest\nNVIM_APPNAME=wwtest nvim --headless \"+Lazy sync\" +qa\nNVIM_APPNAME=wwtest nvim --headless \"+TSUpdateSync\" \"+sleep 5000m\" +qa\nNVIM_APPNAME=wwtest nvim --headless \"+MasonUpdate\" +qa\nNVIM_APPNAME=wwtest nvim --headless \"+TSInstallSync! c cpp go lua python rust tsx javascript typescript vimdoc vim bash yaml toml vue just\" +qa\nNVIM_APPNAME=wwtest nvim --headless \"+MasonInstall lua-language-server rustywind ruff ruff-lsp html-lsp typescript-language-server beautysh fixjson isort markdownlint stylua yamlfmt python-lsp-server\" +qa\nNVIM_APPNAME=wwtest nvim\n```\n\nI've started to use this as a `just` recipe to run before deploying a new\nversion of my dotfiles. So far its pairing nicely with \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\n",
      "summary": "Testing fresh nvim installs can be a pain, and hard to di without borking your known good install. I've been using to run a test nvim in a sandbox that wont...",
      "date_published": "2025-02-12T21:02:03Z",
      "date_modified": "2025-02-12T21:02:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "just",
        "nvim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-date/",
      "url": "https://go.waylonwalker.com/vim-date/",
      "title": "vim date",
      "content_html": "\u003cp\u003eWhen I want to put a date in a document like a blog post from vim I use !!date\nfrom insert mode.  Note that entering \u003ccode\u003e!!\u003c/code\u003e from normal mode puts you in command\nmode with \u003ccode\u003e:.!\u003c/code\u003e filled out.  This runs a shell command, i.e. \u003ccode\u003edate\u003c/code\u003e for this\nexample.\u003c/p\u003e\n\u003cp\u003eIt outputs the following\u003c/p\u003e\n\u003cp\u003eFri Jan 31 08:46:11 PM CST 2025\u003c/p\u003e\n\u003cp\u003eYou can also pass in a date such as tommorrow by pasdding in the -d \u003ccode\u003edate -d tomorrow\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIt outputs the following\u003c/p\u003e\n\u003cp\u003eSat Feb  1 08:53:20 PM CST 2025\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ecodeium just taught me this one with autocomplete\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003eput\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"nx\"\u003estrftime\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;%Y-%m-%d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis outputs the following\u003c/p\u003e\n\u003cp\u003e2025-01-31\u003c/p\u003e\n\u003cp\u003eWhat I like about the \u003ccode\u003e:put =strftime(\u003c/code\u003e method is that you can add a format,\nbut that is a lot more for me to remember than \u003ccode\u003e!!date\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"a-few-weeks-later\"\u003eA few weeks later \u003ca href=\"#a-few-weeks-later\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’m going through a bunch of blog posts and dont want my date formats to change\nto the Wed Feb format so I broke down and made these keybindings.  I think I’m\nstill going to be using \u003ccode\u003e.!date\u003c/code\u003e a lot, but these keybindings will be nice for\nediting blog post frontmatter.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;leader\u0026gt;dd\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;cmd\u0026gt;put =strftime(\u0026#39;%Y-%m-%d\u0026#39;)\u0026lt;cr\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003enoremap\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esilent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e \u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;leader\u0026gt;dt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;cmd\u0026gt;put =strftime(\u0026#39;%Y-%m-%d %H:%M:%S\u0026#39;)\u0026lt;cr\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003enoremap\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esilent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e \u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003e\u003cleader\u003edd 2025-02-12\u003c/leader\u003e\u003c/li\u003e\n\u003cli\u003e\u003cleader\u003edt 2025-02-12 12:53:47\u003c/leader\u003e\u003c/li\u003e\n\u003cli\u003e:.!date    Wed Feb 12 12:53:47 PM CST 2025\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\n\nWhen I want to put a date in a document like a blog post from vim I use !!date\nfrom insert mode.  Note that entering `!!` from normal mode puts you in command\nmode with `:.!` filled out.  This runs a shell command, i.e. `date` for this\nexample.\n\nIt outputs the following\n\nFri Jan 31 08:46:11 PM CST 2025\n\nYou can also pass in a date such as tommorrow by pasdding in the -d `date -d tomorrow`.\n\nIt outputs the following\n\nSat Feb  1 08:53:20 PM CST 2025\n\n\u003e codeium just taught me this one with autocomplete\n\n``` vim\n:put =strftime('%Y-%m-%d')\n```\n\nThis outputs the following\n\n2025-01-31\n\nWhat I like about the `:put =strftime(` method is that you can add a format,\nbut that is a lot more for me to remember than `!!date`\n\n## A few weeks later\n\nI'm going through a bunch of blog posts and dont want my date formats to change\nto the Wed Feb format so I broke down and made these keybindings.  I think I'm\nstill going to be using `.!date` a lot, but these keybindings will be nice for\nediting blog post frontmatter.\n\n``` lua\nset(\"n\", \"\u003cleader\u003edd\", \"\u003ccmd\u003eput =strftime('%Y-%m-%d')\u003ccr\u003e\", { noremap = true, silent = true })\nset(\"n\", \"\u003cleader\u003edt\", \"\u003ccmd\u003eput =strftime('%Y-%m-%d %H:%M:%S')\u003ccr\u003e\", { noremap = true, silent = true })\n```\n\n* \u003cleader\u003edd 2025-02-12\n* \u003cleader\u003edt 2025-02-12 12:53:47\n* :.!date    Wed Feb 12 12:53:47 PM CST 2025\n",
      "summary": "When I want to put a date in a document like a blog post from vim I use !!date from insert mode. Note that entering from normal mode puts you in command mode...",
      "date_published": "2025-02-12T12:51:00Z",
      "date_modified": "2025-02-12T12:51:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "nvim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/digitalharbor7-engineering-status-pages/",
      "url": "https://go.waylonwalker.com/digitalharbor7-engineering-status-pages/",
      "title": "⭐ DigitalHarbor7 engineering-status-pages",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/DigitalHarbor7\" 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\"\u003eDigitalHarbor7’s\u003c/a\u003e project \u003ca href=\"https://github.com/DigitalHarbor7/engineering-status-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\"\u003eengineering-status-pages\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eStatic sites for engineering project status updates\u003c/p\u003e\n",
      "content_text": "\nI like [DigitalHarbor7's](https://github.com/DigitalHarbor7) project [engineering-status-pages](https://github.com/DigitalHarbor7/engineering-status-pages).\n\nStatic sites for engineering project status updates\n",
      "summary": "I like DigitalHarbor7's project engineering-status-pages.",
      "date_published": "2025-02-12T03:19:59Z",
      "date_modified": "2025-02-12T03:19:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/aptitude-why/",
      "url": "https://go.waylonwalker.com/aptitude-why/",
      "title": "aptitude why",
      "content_html": "\u003cp\u003eToday I ran into an interesting question, why am I being asked to configure\ntzdata while installing npm.  Turns out that the \u003ccode\u003eaptitude\u003c/code\u003e cli has a why\ncommand that very handily nails down why you have something installed on a\ndebian based system.\u003c/p\u003e\n\u003ch2 id=\"install-aptitude\"\u003eInstall aptitude \u003ca href=\"#install-aptitude\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt install aptitude\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"why-tzdata\"\u003eWhy tzdata \u003ca href=\"#why-tzdata\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we can query why we need tzdata and see the full chain with the root\npackage being \u003ccode\u003enpm\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot@47685221fb82:/# aptitude why tzdata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei   npm        Depends  node-gyp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A node-gyp   Depends  gyp \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u0026gt;\u003cspan class=\"o\"\u003e=\u003c/span\u003e 0.1+20200513gitcaa6002\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A gyp        Depends  python3:any\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A python3    Provides python3:any\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A python3    Depends  python3.12 \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u0026gt;\u003cspan class=\"o\"\u003e=\u003c/span\u003e 3.12.3-0~\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A python3.12 Depends  tzdata\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I ran into an interesting question, why am I being asked to configure\ntzdata while installing npm.  Turns out that the `aptitude` cli has a why\ncommand that very handily nails down why you have something installed on a\ndebian based system.\n\n## Install aptitude\n\n``` bash\napt install aptitude\n```\n\n## Why tzdata\n\nNow we can query why we need tzdata and see the full chain with the root\npackage being `npm`.\n\n``` bash\nroot@47685221fb82:/# aptitude why tzdata\ni   npm        Depends  node-gyp\ni A node-gyp   Depends  gyp (\u003e= 0.1+20200513gitcaa6002)\ni A gyp        Depends  python3:any\ni A python3    Provides python3:any\ni A python3    Depends  python3.12 (\u003e= 3.12.3-0~)\ni A python3.12 Depends  tzdata\n```\n",
      "summary": "Today I ran into an interesting question, why am I being asked to configure tzdata while installing npm. Turns out that the cli has a why command that very...",
      "date_published": "2025-02-11T13:55:04Z",
      "date_modified": "2025-02-11T13:55:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/configure-tz/",
      "url": "https://go.waylonwalker.com/configure-tz/",
      "title": "configure timezone",
      "content_html": "\u003cp\u003eToday I ran into this interactive prompt on ubuntu while installing node and\nnpm, and I do not want to manually configure this interactively every time I\nrun an install, moreso in docker I do not have the interactive terminal to do\nso.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eConfiguring tzdata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e------------------\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePlease \u003cspan class=\"k\"\u003eselect\u003c/span\u003e the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the \u003cspan class=\"nb\"\u003etime\u003c/span\u003e zones in which they are located.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  1. Africa  2. America  3. Antarctica  4. Arctic  5. Asia  6. Atlantic  7. Australia  8. Europe  9. Indian  10. Pacific  11. Etc  12. Legacy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGeographic area:\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"why-tzdata\"\u003eWhy tzdata \u003ca href=\"#why-tzdata\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eChecking aptitude why tzdata it shows that the chain goes back through npm.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot@47685221fb82:/# aptitude why tzdata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei   npm        Depends  node-gyp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A node-gyp   Depends  gyp \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u0026gt;\u003cspan class=\"o\"\u003e=\u003c/span\u003e 0.1+20200513gitcaa6002\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A gyp        Depends  python3:any\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A python3    Provides python3:any\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A python3    Depends  python3.12 \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u0026gt;\u003cspan class=\"o\"\u003e=\u003c/span\u003e 3.12.3-0~\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ei A python3.12 Depends  tzdata\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"the-solution-configure-tzdata\"\u003eThe solution, configure tzdata \u003ca href=\"#the-solution-configure-tzdata\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eTZ\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;America/Chicago\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eDEBIAN_FRONTEND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003enoninteractive\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt install tzdata -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eln -fs /usr/share/zoneinfo/\u003cspan class=\"nv\"\u003e$TZ\u003c/span\u003e /etc/localtime\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edpkg-reconfigure -f noninteractive tzdata\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition tip\"\u003e\n\u003cp class=\"admonition-title\"\u003eDEBIAN_FRONTEND=noninteractive\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThis is required, because apt installing tzdata will trigger the\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003einteractive prompt.  You will manually configure it in the next two steps.\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\nToday I ran into this interactive prompt on ubuntu while installing node and\nnpm, and I do not want to manually configure this interactively every time I\nrun an install, moreso in docker I do not have the interactive terminal to do\nso.\n\n``` bash\nConfiguring tzdata\n------------------\n\nPlease select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located.\n\n  1. Africa  2. America  3. Antarctica  4. Arctic  5. Asia  6. Atlantic  7. Australia  8. Europe  9. Indian  10. Pacific  11. Etc  12. Legacy\nGeographic area:\n```\n\n## Why tzdata\n\nChecking aptitude why tzdata it shows that the chain goes back through npm.\n\n``` bash\nroot@47685221fb82:/# aptitude why tzdata\ni   npm        Depends  node-gyp\ni A node-gyp   Depends  gyp (\u003e= 0.1+20200513gitcaa6002)\ni A gyp        Depends  python3:any\ni A python3    Provides python3:any\ni A python3    Depends  python3.12 (\u003e= 3.12.3-0~)\ni A python3.12 Depends  tzdata\n```\n\n## The solution, configure tzdata\n\n``` bash\nexport TZ=\"America/Chicago\"\nexport DEBIAN_FRONTEND=noninteractive\napt update\napt install tzdata -y\nln -fs /usr/share/zoneinfo/$TZ /etc/localtime\ndpkg-reconfigure -f noninteractive tzdata\n```\n\n!!! TIP DEBIAN_FRONTEND=noninteractive\n    This is required, because apt installing tzdata will trigger the\n    interactive prompt.  You will manually configure it in the next two steps.\n",
      "summary": "Today I ran into this interactive prompt on ubuntu while installing node and npm, and I do not want to manually configure this interactively every time I run...",
      "date_published": "2025-02-10T13:35:24Z",
      "date_modified": "2025-02-10T13:35:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-556/",
      "url": "https://go.waylonwalker.com/thought-556/",
      "title": "💭 Colors - Core concepts - Tailwind CSS",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailwindcss.com/docs/colors\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://tailwindcss.com/api/og?path=/docs/colors\" alt=\"Colors - Core concepts — Using and customizing the color palette in Tailwind CSS projects.\" loading=\"lazy\"/ data-glightbox=\"description: Colors - Core concepts — Using and customizing the color palette in Tailwind CSS projects.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eColors - Core concepts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsing and customizing the color palette in Tailwind CSS projects.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etailwindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTailwind has the best color system, very well done.  Even if you don’t use it, it serves as a great color picker.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailwindcss.com/docs/colors\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://tailwindcss.com/api/og?path=/docs/colors\" alt=\"Colors - Core concepts — Using and customizing the color palette in Tailwind CSS projects.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eColors - Core concepts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsing and customizing the color palette in Tailwind CSS projects.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etailwindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTailwind has the best color system, very well done.  Even if you don't use it, it serves as a great color picker.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tailwindcss.com/docs/colors",
      "date_published": "2025-02-09T21:32:57Z",
      "date_modified": "2025-02-09T21:32:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-555/",
      "url": "https://go.waylonwalker.com/thought-555/",
      "title": "💭 Don't Starve Together Forever world",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wyattbubbylee.com/dst-forever-world/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewyattbubbylee.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSo proud of Wyatt for writing in his own blog!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wyattbubbylee.com/dst-forever-world/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewyattbubbylee.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSo proud of Wyatt for writing in his own blog!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://wyattbubbylee.com/dst-forever-world/",
      "date_published": "2025-02-09T21:31:38Z",
      "date_modified": "2025-02-09T21:31:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-554/",
      "url": "https://go.waylonwalker.com/thought-554/",
      "title": "💭 Developer Productivity, v2 with ThePrimeagen | Preview - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"03KsS09YS4E\" title=\"Developer Productivity, v2 with ThePrimeagen | Preview\" playlabel=\"Play: Developer Productivity, v2 with ThePrimeagen | Preview\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBig fan of Primes setup.  I was not far off of his setup before he really came on the scene, but I’ve picked up a ton of nuggets from him and how he operates.  I took his first developer productivity course on Front End Masters as it came out.\u003c/p\u003e\n\u003cp\u003eIt is interesting to see him roll back his ansible scripts for bash scripts here.  I converted my setup to ansible after watching his first, but have also since rolled back to bash scripts for quite similar reasons.  Ansible is great for remote tasks that need to be done on a fleet of machines, but like he says here overkill for this purpose and ends up something that you need to read the docs for every change to your dotfiles.\u003c/p\u003e\n\u003cp\u003eUnlike prime I’ve really leaned harder on installing everything in a docker image and developing out of a docker image.  I’ve long built docker images of my dotfiles with the idea that its nice to be able to just use them on other machines, but it rarely happened.\u003c/p\u003e\n\u003cp\u003eIn the past year I’ve moved bazzite, an immutable distro.  It comes with podman and distrobox, so I install very little on it, a few flatpaks from the store for brave and signal, but most of what I really use day to day comes from my devtainer.  It’s nice that I really have one install target for all of my scripts so they become quite stable.  I don’t need to worry about arch vs ubuntu vs fedora, no matter where I am its the same base image.\u003c/p\u003e\n\u003cp\u003eI’ve also really started to lean on kubernetes, it is so useful to just be able to start a pod in k8s using the same exact develop setup as I would have locally.  Nothing needs installed, I can just bring my dev setup to the cluster where the network and data I might need to debug is.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"03KsS09YS4E\" title=\"Developer Productivity, v2 with ThePrimeagen | Preview\" playlabel=\"Play: Developer Productivity, v2 with ThePrimeagen | Preview\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nBig fan of Primes setup.  I was not far off of his setup before he really came on the scene, but I've picked up a ton of nuggets from him and how he operates.  I took his first developer productivity course on Front End Masters as it came out.  \n\nIt is interesting to see him roll back his ansible scripts for bash scripts here.  I converted my setup to ansible after watching his first, but have also since rolled back to bash scripts for quite similar reasons.  Ansible is great for remote tasks that need to be done on a fleet of machines, but like he says here overkill for this purpose and ends up something that you need to read the docs for every change to your dotfiles.\n\nUnlike prime I've really leaned harder on installing everything in a docker image and developing out of a docker image.  I've long built docker images of my dotfiles with the idea that its nice to be able to just use them on other machines, but it rarely happened.  \n\nIn the past year I've moved bazzite, an immutable distro.  It comes with podman and distrobox, so I install very little on it, a few flatpaks from the store for brave and signal, but most of what I really use day to day comes from my devtainer.  It's nice that I really have one install target for all of my scripts so they become quite stable.  I don't need to worry about arch vs ubuntu vs fedora, no matter where I am its the same base image.\n\nI've also really started to lean on kubernetes, it is so useful to just be able to start a pod in k8s using the same exact develop setup as I would have locally.  Nothing needs installed, I can just bring my dev setup to the cluster where the network and data I might need to debug is.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=03KsS09YS4E",
      "date_published": "2025-02-08T15:29:52Z",
      "date_modified": "2025-02-08T15:29:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bc/",
      "url": "https://go.waylonwalker.com/bc/",
      "title": "bc",
      "content_html": "\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=03KsS09YS4E\u0026amp;t=610s\" 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\"\u003ehttps://www.youtube.com/watch?v=03KsS09YS4E\u0026amp;t=610s\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eToday I learned about the basic calculator, bc.  At the very end of this video\nprime uses it to add numbers in vim.\u003c/p\u003e\n\u003ch2 id=\"repl\"\u003eREPL \u003ca href=\"#repl\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can start a calculator repl at the command line, by running bc.\u003c/p\u003e\n\u003ch2 id=\"vim\"\u003eVim \u003ca href=\"#vim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince bc supports standard unix pipes you can easily pipe data from vim into bc\nand back out using \u003ccode\u003e!!bc\u003c/code\u003e.  All you need is a string of math on the line you\nwant to calculate, go to normal mode and run \u003ccode\u003e!!bc\u003c/code\u003e to get the answer.\u003c/p\u003e\n\u003cp\u003eTraditionally I will open my system calculator or ipython to do something like\nthis.\u003c/p\u003e\n\u003cp\u003eTo keep the equation and the result in the same line you can send the equation\nto stderr and the result to stdout using tee.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e:.!tee \u0026gt;\u003cspan class=\"o\"\u003e(\u003c/span\u003ecat \u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e2\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\u003chttps://www.youtube.com/watch?v=03KsS09YS4E\u0026t=610s\u003e\n\nToday I learned about the basic calculator, bc.  At the very end of this video\nprime uses it to add numbers in vim.\n\n## REPL\n\nYou can start a calculator repl at the command line, by running bc.\n\n## Vim\n\nSince bc supports standard unix pipes you can easily pipe data from vim into bc\nand back out using `!!bc`.  All you need is a string of math on the line you\nwant to calculate, go to normal mode and run `!!bc` to get the answer.\n\nTraditionally I will open my system calculator or ipython to do something like\nthis.\n\nTo keep the equation and the result in the same line you can send the equation\nto stderr and the result to stdout using tee.\n\n``` bash\n:.!tee \u003e(cat \u003e\u00262) | bc\n```\n",
      "date_published": "2025-02-08T09:30:08Z",
      "date_modified": "2025-02-08T09:30:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/carpedm20-emoji/",
      "url": "https://go.waylonwalker.com/carpedm20-emoji/",
      "title": "⭐ carpedm20 emoji",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/carpedm20/emoji\" 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\"\u003eemoji\u003c/a\u003e by \u003ca href=\"https://github.com/carpedm20\" 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\"\u003ecarpedm20\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eemoji terminal output for Python\u003c/p\u003e\n",
      "content_text": "\n[emoji](https://github.com/carpedm20/emoji) by [carpedm20](https://github.com/carpedm20) is a game-changer in its space. Excited to see how it evolves.\n\nemoji terminal output for Python\n",
      "summary": "emoji by carpedm20 is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-02-07T22:08:01Z",
      "date_modified": "2025-02-07T22:08:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/uktrade-sqlite-s3vfs/",
      "url": "https://go.waylonwalker.com/uktrade-sqlite-s3vfs/",
      "title": "⭐ uktrade sqlite-s3vfs",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/uktrade/sqlite-s3vfs\" 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\"\u003esqlite-s3vfs\u003c/a\u003e by \u003ca href=\"https://github.com/uktrade\" 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\"\u003euktrade\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePython writable virtual filesystem for SQLite on S3\u003c/p\u003e\n",
      "content_text": "\nThe work on [sqlite-s3vfs](https://github.com/uktrade/sqlite-s3vfs) by [uktrade](https://github.com/uktrade).\n\nPython writable virtual filesystem for SQLite on S3\n",
      "summary": "The work on sqlite-s3vfs by uktrade.",
      "date_published": "2025-02-07T17:09:49Z",
      "date_modified": "2025-02-07T17:09:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-553/",
      "url": "https://go.waylonwalker.com/thought-553/",
      "title": "💭 Jhey ʕ·ᴥ·　ʔ: \"breakin' down classics CSS background-image + ba...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/jhey.dev/post/3lgoev36hps2h\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://video.bsky.app/watch/did%3Aplc%3Amqptcphqrjhr5nziy33f3kco/bafkreiahiep3273fxhefbijmfixshdlksetwczgtxx2xlxqzti7gik3uuy/thumbnail.jpg\" alt=\"Jhey ʕ·ᴥ·　ʔ (@jhey.dev) — breakin\u0026#39; down classics\n\u0026lt;p\u0026gt;CSS background-image + background-blend-mode + custom properties = holo-like effects with parallax ✨\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Jhey ʕ·ᴥ·　ʔ (@jhey.dev) — breakin\u0026#39; down classics\n\u0026lt;p\u0026gt;CSS background-image + background-blend-mode + custom properties = holo-like effects with parallax ✨\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eJhey ʕ·ᴥ·　ʔ (@jhey.dev)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003ebreakin\u0026#39; down classics\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eCSS background-image + background-blend-mode + custom properties = holo-like effects with parallax ✨\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eJhey has the coolest webdev demos!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/jhey.dev/post/3lgoev36hps2h\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://video.bsky.app/watch/did%3Aplc%3Amqptcphqrjhr5nziy33f3kco/bafkreiahiep3273fxhefbijmfixshdlksetwczgtxx2xlxqzti7gik3uuy/thumbnail.jpg\" alt=\"Jhey ʕ·ᴥ·　ʔ (@jhey.dev) — breakin\u0026#39; down classics\n\nCSS background-image + background-blend-mode + custom properties = holo-like effects with parallax ✨\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJhey ʕ·ᴥ·　ʔ (@jhey.dev)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ebreakin\u0026#39; down classics\n\nCSS background-image + background-blend-mode + custom properties = holo-like effects with parallax ✨\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJhey has the coolest webdev demos!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/jhey.dev/post/3lgoev36hps2h",
      "date_published": "2025-02-07T01:59:07Z",
      "date_modified": "2025-02-07T01:59:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-552/",
      "url": "https://go.waylonwalker.com/thought-552/",
      "title": "💭 Fix VERSION_OR_CIPHER_MISMATCH · Cloudflare SSL/TLS docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developers.cloudflare.com/ssl/troubleshooting/version-cipher-mismatch/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developers.cloudflare.com/core-services-preview.png\" alt=\"ERR_SSL_VERSION_OR_CIPHER_MISMATCH — Learn how to troubleshoot ERR_SSL_VERSION_OR_CIPHER_MISMATCH when using Cloudflare SSL/TLS.\" loading=\"lazy\"/ data-glightbox=\"description: ERR_SSL_VERSION_OR_CIPHER_MISMATCH — Learn how to troubleshoot ERR_SSL_VERSION_OR_CIPHER_MISMATCH when using Cloudflare SSL/TLS.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eERR_SSL_VERSION_OR_CIPHER_MISMATCH\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLearn how to troubleshoot ERR_SSL_VERSION_OR_CIPHER_MISMATCH when using Cloudflare SSL/TLS.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCloudflare Docs · developers.cloudflare.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned that cloudflare free tier  universal certs do not support multilevel subdomains.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBy default, Cloudflare Universal SSL certificates only cover your apex domain and one level of subdomain.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/7d1fe806-a3d0-47e3-8eb1-08c1a0965728.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/7d1fe806-a3d0-47e3-8eb1-08c1a0965728.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developers.cloudflare.com/ssl/troubleshooting/version-cipher-mismatch/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developers.cloudflare.com/core-services-preview.png\" alt=\"ERR_SSL_VERSION_OR_CIPHER_MISMATCH — Learn how to troubleshoot ERR_SSL_VERSION_OR_CIPHER_MISMATCH when using Cloudflare SSL/TLS.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eERR_SSL_VERSION_OR_CIPHER_MISMATCH\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLearn how to troubleshoot ERR_SSL_VERSION_OR_CIPHER_MISMATCH when using Cloudflare SSL/TLS.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCloudflare Docs \u0026middot; developers.cloudflare.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned that cloudflare free tier  universal certs do not support multilevel subdomains.\n\n\n\u003e By default, Cloudflare Universal SSL certificates only cover your apex domain and one level of subdomain.\n\n![image](https://dropper.wayl.one/api/file/7d1fe806-a3d0-47e3-8eb1-08c1a0965728.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developers.cloudflare.com/ssl/troubleshooting/version-cipher-mismatch/",
      "date_published": "2025-02-05T20:43:52Z",
      "date_modified": "2025-02-05T20:43:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-551/",
      "url": "https://go.waylonwalker.com/thought-551/",
      "title": "💭 Migration guide for config loaders — kedro 0.19.11 documentation",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://docs.kedro.org/en/stable/configuration/config_loader_migration.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://docs.kedro.org/en/stable/configuration/config_loader_migration.html\" alt=\"https://docs.kedro.org/en/stable/configuration/config_loader_migration.html\"/ data-glightbox=\"description: https://docs.kedro.org/en/stable/configuration/config_loader_migration.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eMigrating from kedro 0.18.4 to the latest version involves handling the deprecated OmegaConf loader.  Switching over does not look as bad as I originally thought.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003einstalling kedro 0.18.5+\u003c/li\u003e\n\u003cli\u003eset the CONFIG_LOADER_CLASS in settings.py\u003c/li\u003e\n\u003cli\u003eswap out import statements\u003c/li\u003e\n\u003cli\u003econfig must be yaml or json\u003c/li\u003e\n\u003cli\u003egetting values from config must be done with bracket \u003ccode\u003e__getattr__\u003c/code\u003e style not with \u003ccode\u003e.get\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eany Exceptions caught from Templated config loader will need to be swapped to OmegaConfig exceptions, similar to #3\u003c/li\u003e\n\u003cli\u003etemplated values must lead with an \u003ccode\u003e_\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGlobals are handled different\u003c/li\u003e\n\u003cli\u003eOmegaConfig does not support jinja2 sytax, but rather a \u003ccode\u003e${variable}\u003c/code\u003e syntax\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://docs.kedro.org/en/stable/configuration/config_loader_migration.html](/static/https://docs.kedro.org/en/stable/configuration/config_loader_migration.html)\n\nMigrating from kedro 0.18.4 to the latest version involves handling the deprecated OmegaConf loader.  Switching over does not look as bad as I originally thought.\n\n\n1. installing kedro 0.18.5+\n2. set the CONFIG_LOADER_CLASS in settings.py\n3. swap out import statements\n4. config must be yaml or json\n5. getting values from config must be done with bracket `__getattr__` style not with `.get`\n6. any Exceptions caught from Templated config loader will need to be swapped to OmegaConfig exceptions, similar to #3\n7. templated values must lead with an `_`\n8. Globals are handled different\n9. OmegaConfig does not support jinja2 sytax, but rather a `${variable}` syntax\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.kedro.org/en/stable/configuration/config_migration.html",
      "date_published": "2025-02-05T18:16:44Z",
      "date_modified": "2025-02-05T18:16:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kedro",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-550/",
      "url": "https://go.waylonwalker.com/thought-550/",
      "title": "💭 Search: 5 results found for \"box white\" – Kailh switch",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://www.kailh.net/search?q=box+white\u0026amp;_pos=2\u0026amp;_psq=white\u0026amp;_ss=e\u0026amp;_v=1.0\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://www.kailh.net/search?q=box+white\u0026amp;_pos=2\u0026amp;_psq=white\u0026amp;_ss=e\u0026amp;_v=1.0\" alt=\"https://www.kailh.net/search?q=box+white\u0026amp;_pos=2\u0026amp;_psq=white\u0026amp;_ss=e\u0026amp;_v=1.0\"/ data-glightbox=\"description: https://www.kailh.net/search?q=box+white\u0026amp;_pos=2\u0026amp;_psq=white\u0026amp;_ss=e\u0026amp;_v=1.0\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003ePrime mentioned on stream that Whites were his favorite switch.  I tend to like lighter switches and want to give it a try.  I really like my Durock lupine’s at 55g, the box whites are 45g, that feels like it would take quite a bit more control, floating over the keys.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://www.kailh.net/search?q=box+white\u0026amp;_pos=2\u0026amp;_psq=white\u0026amp;_ss=e\u0026amp;_v=1.0](/static/https://www.kailh.net/search?q=box+white\u0026amp;_pos=2\u0026amp;_psq=white\u0026amp;_ss=e\u0026amp;_v=1.0)\n\nPrime mentioned on stream that Whites were his favorite switch.  I tend to like lighter switches and want to give it a try.  I really like my Durock lupine's at 55g, the box whites are 45g, that feels like it would take quite a bit more control, floating over the keys.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.kailh.net/search?q=box+white\u0026_psq=white\u0026_v=1.0",
      "date_published": "2025-02-03T15:24:40Z",
      "date_modified": "2025-02-03T15:24:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cloudnative-pg-cloudnative-pg/",
      "url": "https://go.waylonwalker.com/cloudnative-pg-cloudnative-pg/",
      "title": "⭐ cloudnative-pg cloudnative-pg",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/cloudnative-pg\" 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\"\u003ecloudnative-pg\u003c/a\u003e and their project \u003ca href=\"https://github.com/cloudnative-pg/cloudnative-pg\" 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\"\u003ecloudnative-pg\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCloudNativePG is a comprehensive platform designed to seamlessly manage PostgreSQL databases within Kubernetes environments, covering the entire operational lifecycle from initial deployment to ongoing maintenance\u003c/p\u003e\n",
      "content_text": "\nCheck out [cloudnative-pg](https://github.com/cloudnative-pg) and their project [cloudnative-pg](https://github.com/cloudnative-pg/cloudnative-pg).\n\nCloudNativePG is a comprehensive platform designed to seamlessly manage PostgreSQL databases within Kubernetes environments, covering the entire operational lifecycle from initial deployment to ongoing maintenance\n",
      "summary": "Check out cloudnative-pg and their project cloudnative-pg.",
      "date_published": "2025-02-02T18:40:11Z",
      "date_modified": "2025-02-02T18:40:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/open-webui-open-webui/",
      "url": "https://go.waylonwalker.com/open-webui-open-webui/",
      "title": "⭐ open-webui open-webui",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/open-webui/open-webui\" 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\"\u003eopen-webui\u003c/a\u003e by \u003ca href=\"https://github.com/open-webui\" 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\"\u003eopen-webui\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eUser-friendly AI Interface (Supports Ollama, OpenAI API, …)\u003c/p\u003e\n",
      "content_text": "\nJust starred [open-webui](https://github.com/open-webui/open-webui) by [open-webui](https://github.com/open-webui). It's an exciting project with a lot to offer.\n\nUser-friendly AI Interface (Supports Ollama, OpenAI API, ...)\n",
      "summary": "Just starred open-webui by open-webui. It's an exciting project with a lot to offer.",
      "date_published": "2025-02-02T15:38:37Z",
      "date_modified": "2025-02-02T15:38:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fcsonline-tmux-thumbs/",
      "url": "https://go.waylonwalker.com/fcsonline-tmux-thumbs/",
      "title": "⭐ fcsonline tmux-thumbs",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/fcsonline\" 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\"\u003efcsonline’s\u003c/a\u003e project \u003ca href=\"https://github.com/fcsonline/tmux-thumbs\" 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\"\u003etmux-thumbs\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA lightning fast version of tmux-fingers written in Rust, copy/pasting tmux like vimium/vimperator\u003c/p\u003e\n",
      "content_text": "\nI like [fcsonline's](https://github.com/fcsonline) project [tmux-thumbs](https://github.com/fcsonline/tmux-thumbs).\n\nA lightning fast version of tmux-fingers written in Rust, copy/pasting tmux like vimium/vimperator\n",
      "summary": "I like fcsonline's project tmux-thumbs.",
      "date_published": "2025-02-02T15:36:30Z",
      "date_modified": "2025-02-02T15:36:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailwind-aspect/",
      "url": "https://go.waylonwalker.com/tailwind-aspect/",
      "title": "tailwind aspect",
      "content_html": "\u003cp\u003eI’ve been back to putting some images on my blog lately and thinking about\nmaking them a bit thinner through the use of aspect ratio for simplicity.  I’m\nleaning pretty heavy on tailwindcss these days due to some weird quirks of\nmarkdown-it-attrs I cannot have slashes in classes from markdown so I made a\n\u003ccode\u003e.cinematic\u003c/code\u003e class to achieve this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ecinematic\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003easpect-[2.39/1]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eExample\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" alt=\"screenshot-2025-01-31T14-50-00-094Z.png\" class=\"cinematic glightbox\"/ data-glightbox=\"description: screenshot-2025-01-31T14-50-00-094Z.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI've been back to putting some images on my blog lately and thinking about\nmaking them a bit thinner through the use of aspect ratio for simplicity.  I'm\nleaning pretty heavy on tailwindcss these days due to some weird quirks of\nmarkdown-it-attrs I cannot have slashes in classes from markdown so I made a\n`.cinematic` class to achieve this.\n\n``` css\n.cinematic {\n  @apply aspect-[2.39/1];\n}\n```\n\nExample\n\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png){.cinematic}\n",
      "summary": "I've been back to putting some images on my blog lately and thinking about making them a bit thinner through the use of aspect ratio for simplicity. I'm...",
      "date_published": "2025-02-02T14:35:02Z",
      "date_modified": "2025-02-02T14:35:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "tailwindcss"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-549/",
      "url": "https://go.waylonwalker.com/thought-549/",
      "title": "💭 A Cinematic Aspect Ratio Guide for Every Filmmaker | No Film S...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nofilmschool.com/cinematic-aspect-ratio\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://nofilmschool.com/media-library/image.png?id=34069461\u0026amp;width=1200\u0026amp;height=600\u0026amp;coordinates=0%2C78%2C0%2C78\" alt=\"An Aspect Ratio Guide for Every Filmmaker — How can the aspect ratio of your film or TV show contribute to your story?\" loading=\"lazy\"/ data-glightbox=\"description: An Aspect Ratio Guide for Every Filmmaker — How can the aspect ratio of your film or TV show contribute to your story?\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAn Aspect Ratio Guide for Every Filmmaker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow can the aspect ratio of your film or TV show contribute to your story?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNo Film School · nofilmschool.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA good reference of common screen ratios.  I just realized that 16:9 is also 1.78:1.  I’ve been putting some images on my blog again, and thinking about using some 2.39:1 ratio on them.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nofilmschool.com/cinematic-aspect-ratio\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://nofilmschool.com/media-library/image.png?id=34069461\u0026amp;width=1200\u0026amp;height=600\u0026amp;coordinates=0%2C78%2C0%2C78\" alt=\"An Aspect Ratio Guide for Every Filmmaker — How can the aspect ratio of your film or TV show contribute to your story?\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAn Aspect Ratio Guide for Every Filmmaker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow can the aspect ratio of your film or TV show contribute to your story?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNo Film School \u0026middot; nofilmschool.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA good reference of common screen ratios.  I just realized that 16:9 is also 1.78:1.  I've been putting some images on my blog again, and thinking about using some 2.39:1 ratio on them.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://nofilmschool.com/cinematic-aspect-ratio",
      "date_published": "2025-02-01T20:33:01Z",
      "date_modified": "2025-02-01T20:33:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-548/",
      "url": "https://go.waylonwalker.com/thought-548/",
      "title": "💭 I Think I Love Deepseek R1 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"GNHuJE_GARc\" title=\"I Think I Love Deepseek R1\" playlabel=\"Play: I Think I Love Deepseek R1\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThere is a glimmer of hope out there that normal people can scrap together enough gpu to really run the latest models themselves.  The ui really appears to be having huge leaps forward such that doing things like rag is no longer such a research project that it was just a few years ago.  So excited to see Prime go through this \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 exercise.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"GNHuJE_GARc\" title=\"I Think I Love Deepseek R1\" playlabel=\"Play: I Think I Love Deepseek R1\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThere is a glimmer of hope out there that normal people can scrap together enough gpu to really run the latest models themselves.  The ui really appears to be having huge leaps forward such that doing things like rag is no longer such a research project that it was just a few years ago.  So excited to see Prime go through this homelab exercise.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=GNHuJE_GARc",
      "date_published": "2025-02-01T16:29:43Z",
      "date_modified": "2025-02-01T16:29:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markdown-it-attrs-with-slashes-dont-work/",
      "url": "https://go.waylonwalker.com/markdown-it-attrs-with-slashes-dont-work/",
      "title": "markdown it attrs with slashes dont work",
      "content_html": "\u003cp\u003eAttrs does not like ‘/’ characters in its classes, so to use some tailwind\nclasses with custom values we must make new classes in our tailwind input css.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ecinematic\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003easpect-[2.39/1]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eGiven the following markdown with attrs added to the image and to the paragraph\nblock.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003escreenshot-2025-01-31T14-50-00-094Z.png\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\u003c/span\u003e){.aspect-[2.39/1]}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003escreenshot-2025-01-31T14-50-00-094Z.png\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\u003c/span\u003e){.cinematic}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{.cinematic}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003escreenshot-2025-01-31T14-50-00-094Z.png\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe get the following output with only the middle one working correctly.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" alt=\"screenshot-2025-01-31T14-50-00-094Z.png\"/ data-glightbox=\"description: screenshot-2025-01-31T14-50-00-094Z.png\"\u003e\u003c/a\u003e{.aspect-[2.39/1]}\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" alt=\"screenshot-2025-01-31T14-50-00-094Z.png\" class=\"cinematic glightbox\"/ data-glightbox=\"description: screenshot-2025-01-31T14-50-00-094Z.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp class=\"cinematic\"\u003e\u003ca href=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png\" alt=\"screenshot-2025-01-31T14-50-00-094Z.png\"/ data-glightbox=\"description: screenshot-2025-01-31T14-50-00-094Z.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThe inline version of `.cinematic` works, but `.aspect-[2.39/1]` does not,\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eit turns into text after the image.  The block version with the class\nbefore the image applies to the paragraph, not the image.\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\nAttrs does not like '/' characters in its classes, so to use some tailwind\nclasses with custom values we must make new classes in our tailwind input css.\n\n``` css\n.cinematic {\n  @apply aspect-[2.39/1];\n}\n```\n\nGiven the following markdown with attrs added to the image and to the paragraph\nblock.\n\n``` markdown\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png){.aspect-[2.39/1]}\n\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png){.cinematic}\n\n{.cinematic}\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png)\n```\n\nWe get the following output with only the middle one working correctly.\n\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png){.aspect-[2.39/1]}\n\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png){.cinematic}\n\n{.cinematic}\n![screenshot-2025-01-31T14-50-00-094Z.png](https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png)\n\n!!! Note\n    The inline version of `.cinematic` works, but `.aspect-[2.39/1]` does not,\n    it turns into text after the image.  The block version with the class\n    before the image applies to the paragraph, not the image.\n",
      "summary": "Attrs does not like '/' characters in its classes, so to use some tailwind classes with custom values we must make new classes in our tailwind input css.",
      "date_published": "2025-02-01T11:21:10Z",
      "date_modified": "2025-02-01T11:21:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "blog"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-547/",
      "url": "https://go.waylonwalker.com/thought-547/",
      "title": "💭 RSS is dead - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"epQr2kF-1bU\" title=\"RSS is dead\" playlabel=\"Play: RSS is dead\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eOh, this kills me to hear it.  RSS is the \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eOG\u003c/a\u003e way to subscribe and share content out to others.  It gives you control of what you subscribe to and reminds you when new content lands on your favorite sites.  It is a huge component of web 1.0 and I feel is the most decentralized social media can ever hope to be.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"epQr2kF-1bU\" title=\"RSS is dead\" playlabel=\"Play: RSS is dead\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nOh, this kills me to hear it.  RSS is the OG way to subscribe and share content out to others.  It gives you control of what you subscribe to and reminds you when new content lands on your favorite sites.  It is a huge component of web 1.0 and I feel is the most decentralized social media can ever hope to be.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/epQr2kF-1bU",
      "date_published": "2025-02-01T02:57:59Z",
      "date_modified": "2025-02-01T02:57:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "rss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asottile-all-repos/",
      "url": "https://go.waylonwalker.com/asottile-all-repos/",
      "title": "⭐ asottile all-repos",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/asottile\" 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\"\u003easottile\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/asottile/all-repos\" 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\"\u003eall-repos\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eClone all your repositories and apply sweeping changes.\u003c/p\u003e\n",
      "content_text": "\n[asottile](https://github.com/asottile) has done a fantastic job with [all-repos](https://github.com/asottile/all-repos). Highly recommend taking a look.\n\nClone all your repositories and apply sweeping changes.\n",
      "summary": "asottile has done a fantastic job with all-repos. Highly recommend taking a look.",
      "date_published": "2025-01-31T17:12:20Z",
      "date_modified": "2025-01-31T17:12:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/turbot-tailpipe/",
      "url": "https://go.waylonwalker.com/turbot-tailpipe/",
      "title": "⭐ turbot tailpipe",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/turbot/tailpipe\" 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\"\u003etailpipe\u003c/a\u003e, created by \u003ca href=\"https://github.com/turbot\" 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\"\u003eturbot\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eselect * from logs; Tailpipe is an open source SIEM for instant log insights, powered by DuckDB. Analyze millions of events in seconds, right from your terminal.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [tailpipe](https://github.com/turbot/tailpipe), created by [turbot](https://github.com/turbot).\n\nselect * from logs; Tailpipe is an open source SIEM for instant log insights, powered by DuckDB. Analyze millions of events in seconds, right from your terminal.\n",
      "summary": "If you're into interesting projects, don't miss out on tailpipe, created by turbot.",
      "date_published": "2025-01-31T17:05:00Z",
      "date_modified": "2025-01-31T17:05:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/muni-town-roomy/",
      "url": "https://go.waylonwalker.com/muni-town-roomy/",
      "title": "⭐ muni-town roomy",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/muni-town/roomy\" 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\"\u003eroomy\u003c/a\u003e by \u003ca href=\"https://github.com/muni-town\" 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\"\u003emuni-town\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eATproto-connected p2p group comms\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [roomy](https://github.com/muni-town/roomy) by [muni-town](https://github.com/muni-town), and it's truly impressive.\n\nATproto-connected p2p group comms\n",
      "summary": "I recently discovered roomy by muni-town, and it's truly impressive.",
      "date_published": "2025-01-31T17:02:22Z",
      "date_modified": "2025-01-31T17:02:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-546/",
      "url": "https://go.waylonwalker.com/thought-546/",
      "title": "💭 Behold, the Steam Brick | Rock Paper Shotgun",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.rockpapershotgun.com/behold-the-steam-brick\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://assetsio.gnwcdn.com/steam-brick.jpg?width=1200\u0026amp;height=630\u0026amp;fit=crop\u0026amp;enable=upscale\u0026amp;auto=webp\" alt=\"Behold, the Steam Brick — A modder has transformed the Steam Deck in a screen-less, controller-less Steam Brick.\" loading=\"lazy\"/ data-glightbox=\"description: Behold, the Steam Brick — A modder has transformed the Steam Deck in a screen-less, controller-less Steam Brick.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBehold, the Steam Brick\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA modder has transformed the Steam Deck in a screen-less, controller-less Steam Brick.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eRock Paper Shotgun · rockpapershotgun.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI fully believe in our right to repair, ewaste reduction, and bringing a second life to still good hardware that is not up for it’s originally intended purpose.  This is a sick console like experience you can strap to the back of a tv, throw in your back to take on a trip, or leave stuffed in your vehicle to game in the backseat.  Sucks that it cant do 4k, but I’ve used mine on large screens, and it does quite well for a lot of games, maybe not AAA, but the cartoony multplayer games I play with my kids do quite well.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/f3114f19-21cd-4ee6-84a8-06b83346d052.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/f3114f19-21cd-4ee6-84a8-06b83346d052.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.rockpapershotgun.com/behold-the-steam-brick\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://assetsio.gnwcdn.com/steam-brick.jpg?width=1200\u0026amp;height=630\u0026amp;fit=crop\u0026amp;enable=upscale\u0026amp;auto=webp\" alt=\"Behold, the Steam Brick — A modder has transformed the Steam Deck in a screen-less, controller-less Steam Brick.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBehold, the Steam Brick\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA modder has transformed the Steam Deck in a screen-less, controller-less Steam Brick.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eRock Paper Shotgun \u0026middot; rockpapershotgun.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI fully believe in our right to repair, ewaste reduction, and bringing a second life to still good hardware that is not up for it's originally intended purpose.  This is a sick console like experience you can strap to the back of a tv, throw in your back to take on a trip, or leave stuffed in your vehicle to game in the backseat.  Sucks that it cant do 4k, but I've used mine on large screens, and it does quite well for a lot of games, maybe not AAA, but the cartoony multplayer games I play with my kids do quite well.\n\n![image](https://dropper.wayl.one/api/file/f3114f19-21cd-4ee6-84a8-06b83346d052.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.rockpapershotgun.com/behold-the-steam-brick",
      "date_published": "2025-01-31T13:27:21Z",
      "date_modified": "2025-01-31T13:27:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "steamdeck",
        "pc",
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-545/",
      "url": "https://go.waylonwalker.com/thought-545/",
      "title": "💭 OpenAI Is Actually Terrible - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2D9ON1ZQhnA\" title=\"OpenAI Is Actually Terrible\" playlabel=\"Play: OpenAI Is Actually Terrible\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn these deepseek memes go hard. Wild to see openai get played by their own game.\u003c/p\u003e\n\u003cp\u003eIt’s crazy that the normie news that I have seen on deepseek shows that the Chinese made what the Americans did at a fraction of the price, without taking notice that they are building on the shoulders of openai.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2D9ON1ZQhnA\" title=\"OpenAI Is Actually Terrible\" playlabel=\"Play: OpenAI Is Actually Terrible\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn these deepseek memes go hard. Wild to see openai get played by their own game.\n\nIt's crazy that the normie news that I have seen on deepseek shows that the Chinese made what the Americans did at a fraction of the price, without taking notice that they are building on the shoulders of openai.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=2D9ON1ZQhnA\u0026t=359s",
      "date_published": "2025-01-31T03:46:29Z",
      "date_modified": "2025-01-31T03:46:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-544/",
      "url": "https://go.waylonwalker.com/thought-544/",
      "title": "💭 AI Is Making You An Illiterate Programmer - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"cQNyYx2fZXw\" title=\"AI Is Making You An Illiterate Programmer\" playlabel=\"Play: AI Is Making You An Illiterate Programmer\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e👏👏👏 This one is really good. I’m right there with him on most of this.  I am very hesitant on subscription models, and all the ai tools feel like they are getting ready to be the next round of death by a thousand cuts, this time with pretty limited free tier and relatively high prices to run.  I’m sure we will see companies get taken by huge bills soon by building off of someone else’s service.\u003c/p\u003e\n\u003cp\u003eOn the flip side I’m definitely the guy that gets in a rut of just copy paste to the ai, wait for codeium to to inject.  I feel like I have issues of momentum more than anything.  When I’m on one side or the other I tend to stick it out for too long, but less so on going without because that llm drug is calling you when you hit a hard problem.\u003c/p\u003e\n\u003cp\u003eI’m excited to see him build out a \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 for llm stuff that he mentioned at the top.  I’m interested, but probably not building one out for myself until we start to see some cheaper maybe used hardware to do it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"cQNyYx2fZXw\" title=\"AI Is Making You An Illiterate Programmer\" playlabel=\"Play: AI Is Making You An Illiterate Programmer\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n👏👏👏 This one is really good. I'm right there with him on most of this.  I am very hesitant on subscription models, and all the ai tools feel like they are getting ready to be the next round of death by a thousand cuts, this time with pretty limited free tier and relatively high prices to run.  I'm sure we will see companies get taken by huge bills soon by building off of someone else's service.\n\nOn the flip side I'm definitely the guy that gets in a rut of just copy paste to the ai, wait for codeium to to inject.  I feel like I have issues of momentum more than anything.  When I'm on one side or the other I tend to stick it out for too long, but less so on going without because that llm drug is calling you when you hit a hard problem.\n\nI'm excited to see him build out a homelab for llm stuff that he mentioned at the top.  I'm interested, but probably not building one out for myself until we start to see some cheaper maybe used hardware to do it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=cQNyYx2fZXw",
      "date_published": "2025-01-30T14:23:10Z",
      "date_modified": "2025-01-30T14:23:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-543/",
      "url": "https://go.waylonwalker.com/thought-543/",
      "title": "💭 Why is Kubernetes everywhere? | Kelsey Hightower - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"MQbkN99eBD8\" title=\"Why is Kubernetes everywhere? | Kelsey Hightower\" playlabel=\"Play: Why is Kubernetes everywhere? | Kelsey Hightower\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eKelsey says several times in this interview, you don’t need kubernetes.  If you are running one node you don’t need kubernetes.  My question though is, would you use kubernetes?  Ya I get it if you are a web developer, data scientist, backend dev, but if you are looking to bee a whole ass engineer, or infrastructure engineer, you know kubernetes, Should you use kubernetes on single node?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"MQbkN99eBD8\" title=\"Why is Kubernetes everywhere? | Kelsey Hightower\" playlabel=\"Play: Why is Kubernetes everywhere? | Kelsey Hightower\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nKelsey says several times in this interview, you don't need kubernetes.  If you are running one node you don't need kubernetes.  My question though is, would you use kubernetes?  Ya I get it if you are a web developer, data scientist, backend dev, but if you are looking to bee a whole ass engineer, or infrastructure engineer, you know kubernetes, Should you use kubernetes on single node?\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=MQbkN99eBD8",
      "date_published": "2025-01-29T16:28:21Z",
      "date_modified": "2025-01-29T16:28:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-542/",
      "url": "https://go.waylonwalker.com/thought-542/",
      "title": "💭 Models - Pydantic",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.pydantic.dev/latest/concepts/models/#rebuilding-model-schema\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pydantic.dev/docs/og/validation/latest/concepts/models.png\" alt=\"Models\" loading=\"lazy\"/ data-glightbox=\"description: Models\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eModels\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePydantic Docs · docs.pydantic.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI came accross from_attributes today it allows creation of pydantic models from objects such as a sqlalchemy  \u003ccode\u003eBase\u003c/code\u003e Model or while nesting pydantic models.  I believe in the past I have ran into some inconsistencies with nesting pydantic models and I’ll bet one had from_attributes set and another did not.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eArbitrary class instances¶\n\u003cem\u003e(Formerly known as “ORM Mode”/from_orm).\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003ePydantic models can also be created from arbitrary class instances by reading the instance \u0026gt; attributes corresponding to the model field names. One common application of this functionality is integration with object-relational mappings (ORMs).\u003c/p\u003e\n\u003cp\u003eTo do this, set the from_attributes config value to True (see the documentation on Configuration for more details).\u003c/p\u003e\n\u003cp\u003eThe example here uses SQLAlchemy, but the same approach should work for any ORM.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.pydantic.dev/latest/concepts/models/#rebuilding-model-schema\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pydantic.dev/docs/og/validation/latest/concepts/models.png\" alt=\"Models\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eModels\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePydantic Docs \u0026middot; docs.pydantic.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI came accross from_attributes today it allows creation of pydantic models from objects such as a sqlalchemy  `Base` Model or while nesting pydantic models.  I believe in the past I have ran into some inconsistencies with nesting pydantic models and I'll bet one had from_attributes set and another did not.\n\n\u003e Arbitrary class instances¶\n\u003e _(Formerly known as \"ORM Mode\"/from_orm)._\n\u003e \n\u003e Pydantic models can also be created from arbitrary class instances by reading the instance \u003e attributes corresponding to the model field names. One common application of this functionality is integration with object-relational mappings (ORMs).\n\u003e \n\u003e To do this, set the from_attributes config value to True (see the documentation on Configuration for more details).\n\u003e\n\u003e The example here uses SQLAlchemy, but the same approach should work for any ORM.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.pydantic.dev/latest/concepts/models/#rebuilding-model-schema",
      "date_published": "2025-01-28T17:27:20Z",
      "date_modified": "2025-01-28T17:27:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "pydantic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-541/",
      "url": "https://go.waylonwalker.com/thought-541/",
      "title": "💭 If Mitchell Hashimoto succeeds, Tmux \u0026 Zellij will disappear -...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"o-qtso47ECk\" title=\"If Mitchell Hashimoto succeeds, Tmux \u0026amp; Zellij will disappear\" playlabel=\"Play: If Mitchell Hashimoto succeeds, Tmux \u0026amp; Zellij will disappear\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDang strong stance that tmux and zellij should not exist.  I really do get his point though.  Theres a good number of terminal features I often miss out on because I run tmux.  Its an app that runs apps, and doesn’t let all of the signals back to the host.  But its fantastic at what it does, and brings so much to the table that the little bit of downside it brings is well worth it to me.  The other thing missing in this discussion is that I can take my hotkeys and session workflow to any machine just by running tmux.  I do not need to run a certain terminal, or install it headlessly on a server to get special features just for it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"o-qtso47ECk\" title=\"If Mitchell Hashimoto succeeds, Tmux \u0026amp; Zellij will disappear\" playlabel=\"Play: If Mitchell Hashimoto succeeds, Tmux \u0026amp; Zellij will disappear\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDang strong stance that tmux and zellij should not exist.  I really do get his point though.  Theres a good number of terminal features I often miss out on because I run tmux.  Its an app that runs apps, and doesn't let all of the signals back to the host.  But its fantastic at what it does, and brings so much to the table that the little bit of downside it brings is well worth it to me.  The other thing missing in this discussion is that I can take my hotkeys and session workflow to any machine just by running tmux.  I do not need to run a certain terminal, or install it headlessly on a server to get special features just for it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=o-qtso47ECk",
      "date_published": "2025-01-28T13:18:40Z",
      "date_modified": "2025-01-28T13:18:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/veekaybee-gitfeed/",
      "url": "https://go.waylonwalker.com/veekaybee-gitfeed/",
      "title": "⭐ veekaybee gitfeed",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/veekaybee\" 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\"\u003eveekaybee\u003c/a\u003e and their project \u003ca href=\"https://github.com/veekaybee/gitfeed\" 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\"\u003egitfeed\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFeed of posts from Bluesky that have a GitHub link\u003c/p\u003e\n",
      "content_text": "\nCheck out [veekaybee](https://github.com/veekaybee) and their project [gitfeed](https://github.com/veekaybee/gitfeed).\n\nFeed of posts from Bluesky that have a GitHub link\n",
      "summary": "Check out veekaybee and their project gitfeed.",
      "date_published": "2025-01-24T19:34:10Z",
      "date_modified": "2025-01-24T19:34:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ggml-org-llama-vim/",
      "url": "https://go.waylonwalker.com/ggml-org-llama-vim/",
      "title": "⭐ ggml-org llama.vim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/ggml-org/llama.vim\" 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\"\u003ellama.vim\u003c/a\u003e from \u003ca href=\"https://github.com/ggml-org\" 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\"\u003eggml-org\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eVim plugin for LLM-assisted code/text completion\u003c/p\u003e\n",
      "content_text": "\nI came across [llama.vim](https://github.com/ggml-org/llama.vim) from [ggml-org](https://github.com/ggml-org), and it's packed with great features and ideas.\n\nVim plugin for LLM-assisted code/text completion\n",
      "summary": "I came across llama.vim from ggml-org, and it's packed with great features and ideas.",
      "date_published": "2025-01-24T01:01:28Z",
      "date_modified": "2025-01-24T01:01:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-540/",
      "url": "https://go.waylonwalker.com/thought-540/",
      "title": "💭 Top Python libraries of 2024 | Tryolabs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tryolabs.com/blog/top-python-libraries-2024\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://tryolabs.com/assets/blog/top-python-libraries-2024/collection-python-e190b6eef0.png\" alt=\"Top Python libraries of 2024 — Dive into our 10th annual Python Libraries roundup for 2024, now featuring separate curated lists for General Use and AI / ML / Data tools. Discover this year\u0026#39;s most innovative additions to the ecosystem!\" loading=\"lazy\"/ data-glightbox=\"description: Top Python libraries of 2024 — Dive into our 10th annual Python Libraries roundup for 2024, now featuring separate curated lists for General Use and AI / ML / Data tools. Discover this year\u0026#39;s most innovative additions to the ecosystem!\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTop Python libraries of 2024\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDive into our 10th annual Python Libraries roundup for 2024, now featuring separate curated lists for General Use and AI / ML / Data tools. Discover this year\u0026#39;s most innovative additions to the eco...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTryolabs · tryolabs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eReally good listicle of new modern top python libraries from 2024.  Very well done article with images, links, and an actually quality listicle with many things I’ve never even heard of.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tryolabs.com/blog/top-python-libraries-2024\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://tryolabs.com/assets/blog/top-python-libraries-2024/collection-python-e190b6eef0.png\" alt=\"Top Python libraries of 2024 — Dive into our 10th annual Python Libraries roundup for 2024, now featuring separate curated lists for General Use and AI / ML / Data tools. Discover this year\u0026#39;s most innovative additions to the ecosystem!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTop Python libraries of 2024\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDive into our 10th annual Python Libraries roundup for 2024, now featuring separate curated lists for General Use and AI / ML / Data tools. Discover this year\u0026#39;s most innovative additions to the eco...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTryolabs \u0026middot; tryolabs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n Really good listicle of new modern top python libraries from 2024.  Very well done article with images, links, and an actually quality listicle with many things I've never even heard of.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tryolabs.com/blog/top-python-libraries-2024",
      "date_published": "2025-01-23T00:31:18Z",
      "date_modified": "2025-01-23T00:31:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-539/",
      "url": "https://go.waylonwalker.com/thought-539/",
      "title": "💭 Choosing color palettes — seaborn 0.13.2 documentation",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://seaborn.pydata.org/tutorial/color_palettes.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://seaborn.pydata.org/tutorial/color_palettes.html\" alt=\"https://seaborn.pydata.org/tutorial/color_palettes.html\"/ data-glightbox=\"description: https://seaborn.pydata.org/tutorial/color_palettes.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eGood overview of seaborn color palettes.  They have all sorts of different types, some designed to purposfully give each color the same weight for catecorization.  Some designd to give linear differences in value, some have a parabolic feel with a diverging nature.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://seaborn.pydata.org/tutorial/color_palettes.html](/static/https://seaborn.pydata.org/tutorial/color_palettes.html)\n\nGood overview of seaborn color palettes.  They have all sorts of different types, some designed to purposfully give each color the same weight for catecorization.  Some designd to give linear differences in value, some have a parabolic feel with a diverging nature.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://seaborn.pydata.org/tutorial/color_palettes.html",
      "date_published": "2025-01-22T13:47:54Z",
      "date_modified": "2025-01-22T13:47:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data-viz",
        "seaborn",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ublue-os-ucore/",
      "url": "https://go.waylonwalker.com/ublue-os-ucore/",
      "title": "⭐ ublue-os ucore",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ublue-os\" 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\"\u003eublue-os\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/ublue-os/ucore\" 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\"\u003eucore\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eAn OCI base image of Fedora CoreOS with batteries included\u003c/p\u003e\n",
      "content_text": "\n[ublue-os](https://github.com/ublue-os) has done a fantastic job with [ucore](https://github.com/ublue-os/ucore). Highly recommend taking a look.\n\nAn OCI base image of Fedora CoreOS with batteries included\n",
      "summary": "ublue-os has done a fantastic job with ucore. Highly recommend taking a look.",
      "date_published": "2025-01-21T22:22:29Z",
      "date_modified": "2025-01-21T22:22:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ublue-os-bazzite/",
      "url": "https://go.waylonwalker.com/ublue-os-bazzite/",
      "title": "⭐ ublue-os bazzite",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/ublue-os/bazzite\" 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\"\u003ebazzite\u003c/a\u003e by \u003ca href=\"https://github.com/ublue-os\" 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\"\u003eublue-os\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eBazzite is a cloud native image built upon Fedora Atomic Desktops that brings the best of Linux gaming to all of your devices - including your favorite handheld.\u003c/p\u003e\n",
      "content_text": "\nJust starred [bazzite](https://github.com/ublue-os/bazzite) by [ublue-os](https://github.com/ublue-os). It's an exciting project with a lot to offer.\n\nBazzite is a cloud native image built upon Fedora Atomic Desktops that brings the best of Linux gaming to all of your devices - including your favorite handheld.\n",
      "summary": "Just starred bazzite by ublue-os. It's an exciting project with a lot to offer.",
      "date_published": "2025-01-21T22:22:12Z",
      "date_modified": "2025-01-21T22:22:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-538/",
      "url": "https://go.waylonwalker.com/thought-538/",
      "title": "💭 poolers.postgresql.cnpg.io CRD metadata.annotations Too long ·...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/cloudnative-pg/charts/issues/325\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/42368c5206f375a8cd5aa7b6fd8a9f0832a56704f689e76a81e392bf8e484f6a/cloudnative-pg/charts/issues/325\" alt=\"poolers.postgresql.cnpg.io CRD metadata.annotations Too long · Issue #325 · cloudnative-pg/charts — Unable to deploy helm chart using ArgoCD. Getting following error Failed sync attempt to : one or more objects failed to apply, reason: CustomResourceDefinition.apiextensions.k8s.io \u0026#34;poolers.postgr...\" loading=\"lazy\"/ data-glightbox=\"description: poolers.postgresql.cnpg.io CRD metadata.annotations Too long · Issue #325 · cloudnative-pg/charts — Unable to deploy helm chart using ArgoCD. Getting following error Failed sync attempt to : one or more objects failed to apply, reason: CustomResourceDefinition.apiextensions.k8s.io \u0026#34;poolers.postgr...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epoolers.postgresql.cnpg.io CRD metadata.annotations Too long · Issue #325 · cloudnative-pg/charts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUnable to deploy helm chart using ArgoCD. Getting following error Failed sync attempt to : one or more objects failed to apply, reason: CustomResourceDefinition.apiextensions.k8s.io \u0026#34;poolers.postgr...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve never seen or needed to use a serversideapply in kubernetes before, but I ran into this same issue in my k3s \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 while installing cloudnative-pg.\u003c/p\u003e\n\u003cp\u003eYou can do it with argo\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eargoproj.io/v1alpha1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eApplication\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003esyncPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003esyncOptions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"l\"\u003eServerSideApply=true\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eand you can do it with kubectl\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl apply --server-side --force-conflicts -f cnpg-1.25.0.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/cloudnative-pg/charts/issues/325\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/42368c5206f375a8cd5aa7b6fd8a9f0832a56704f689e76a81e392bf8e484f6a/cloudnative-pg/charts/issues/325\" alt=\"poolers.postgresql.cnpg.io CRD metadata.annotations Too long · Issue #325 · cloudnative-pg/charts — Unable to deploy helm chart using ArgoCD. Getting following error Failed sync attempt to : one or more objects failed to apply, reason: CustomResourceDefinition.apiextensions.k8s.io \u0026#34;poolers.postgr...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epoolers.postgresql.cnpg.io CRD metadata.annotations Too long · Issue #325 · cloudnative-pg/charts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUnable to deploy helm chart using ArgoCD. Getting following error Failed sync attempt to : one or more objects failed to apply, reason: CustomResourceDefinition.apiextensions.k8s.io \u0026#34;poolers.postgr...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've never seen or needed to use a serversideapply in kubernetes before, but I ran into this same issue in my k3s homelab while installing cloudnative-pg.\n\n\nYou can do it with argo\n\n``` yaml\napiVersion: argoproj.io/v1alpha1\nkind: Application\nspec:\nsyncPolicy:\nsyncOptions:\n- ServerSideApply=true\n```\n\nand you can do it with kubectl\n\n``` bash\nkubectl apply --server-side --force-conflicts -f cnpg-1.25.0.yaml\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/cloudnative-pg/charts/issues/325",
      "date_published": "2025-01-21T17:06:21Z",
      "date_modified": "2025-01-21T17:06:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "argo",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/setting-up-nvim-manager-starship-prompt/",
      "url": "https://go.waylonwalker.com/setting-up-nvim-manager-starship-prompt/",
      "title": "setting up nvim-manager starship prompt",
      "content_html": "\u003cp\u003eI built out a tool for myself to manage my nvim configuration, and I wanted to\nquickly see which one I am running in my starship prompt. Here’s the config I\nended up with.  It warns if the \u003ccode\u003eNVIM_APPNAME\u003c/code\u003e environment variable is not set, and\nit shows which nvim I am using if it is set.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003ecustom\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003envim-manager-system\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ewhen\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[[ ! -n \u0026#34;${NVIM_APPNAME}\u0026#34; ]]\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003estyle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;bold yellow\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esymbol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[ ](fg:#15AABF)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;$symbol[USING SYSTEM NVIM]($style)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eenv_var\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003estyle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;green\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esymbol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[ ](fg:#15AABF)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[$symbol${env_value}]($style)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003evariable\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;NVIM_APPNAME\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI built out a tool for myself to manage my nvim configuration, and I wanted to\nquickly see which one I am running in my starship prompt. Here's the config I\nended up with.  It warns if the `NVIM_APPNAME` environment variable is not set, and\nit shows which nvim I am using if it is set.\n\n``` toml\n[custom.nvim-manager-system]\nwhen = '[[ ! -n \"${NVIM_APPNAME}\" ]]'\nstyle = \"bold yellow\"\nsymbol = '[ ](fg:#15AABF)'\nformat = '$symbol[USING SYSTEM NVIM]($style)'\n\n[env_var.NVIM_APPNAME]\nstyle = \"green\"\nsymbol = '[ ](fg:#15AABF)'\nformat = '[$symbol${env_value}]($style)'\nvariable = \"NVIM_APPNAME\"\n```\n",
      "summary": "I built out a tool for myself to manage my nvim configuration, and I wanted to quickly see which one I am running in my starship prompt. Here's the config I...",
      "date_published": "2025-01-21T16:03:46Z",
      "date_modified": "2025-01-21T16:03:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "nvim-manager",
        "starship"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/moonbeam-nyc-snorlax/",
      "url": "https://go.waylonwalker.com/moonbeam-nyc-snorlax/",
      "title": "⭐ moonbeam-nyc snorlax",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/moonbeam-nyc/snorlax\" 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\"\u003esnorlax\u003c/a\u003e by \u003ca href=\"https://github.com/moonbeam-nyc\" 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\"\u003emoonbeam-nyc\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003ewake and sleep Kubernetes deployments on a schedule\u003c/p\u003e\n",
      "content_text": "\n[snorlax](https://github.com/moonbeam-nyc/snorlax) by [moonbeam-nyc](https://github.com/moonbeam-nyc) is a game-changer in its space. Excited to see how it evolves.\n\nwake and sleep Kubernetes deployments on a schedule\n",
      "summary": "snorlax by moonbeam-nyc is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2025-01-21T03:19:48Z",
      "date_modified": "2025-01-21T03:19:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kubernetes-sigs-headlamp/",
      "url": "https://go.waylonwalker.com/kubernetes-sigs-headlamp/",
      "title": "⭐ kubernetes-sigs headlamp",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/kubernetes-sigs/headlamp\" 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\"\u003eheadlamp\u003c/a\u003e from \u003ca href=\"https://github.com/kubernetes-sigs\" 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\"\u003ekubernetes-sigs\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA Kubernetes web UI that is fully-featured, user-friendly and extensible\u003c/p\u003e\n",
      "content_text": "\nI came across [headlamp](https://github.com/kubernetes-sigs/headlamp) from [kubernetes-sigs](https://github.com/kubernetes-sigs), and it's packed with great features and ideas.\n\nA Kubernetes web UI that is fully-featured, user-friendly and extensible\n",
      "summary": "I came across headlamp from kubernetes-sigs, and it's packed with great features and ideas.",
      "date_published": "2025-01-21T03:13:58Z",
      "date_modified": "2025-01-21T03:13:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/headlamp-k8s-headlamp/",
      "url": "https://go.waylonwalker.com/headlamp-k8s-headlamp/",
      "title": "⭐ headlamp-k8s headlamp",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/headlamp-k8s/headlamp\" 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\"\u003eheadlamp\u003c/a\u003e by \u003ca href=\"https://github.com/headlamp-k8s\" 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\"\u003eheadlamp-k8s\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA Kubernetes web UI that is fully-featured, user-friendly and extensible\u003c/p\u003e\n",
      "content_text": "\nJust starred [headlamp](https://github.com/headlamp-k8s/headlamp) by [headlamp-k8s](https://github.com/headlamp-k8s). It's an exciting project with a lot to offer.\n\nA Kubernetes web UI that is fully-featured, user-friendly and extensible\n",
      "summary": "Just starred headlamp by headlamp-k8s. It's an exciting project with a lot to offer.",
      "date_published": "2025-01-21T03:13:58Z",
      "date_modified": "2025-01-21T03:13:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gitui-org-gitui/",
      "url": "https://go.waylonwalker.com/gitui-org-gitui/",
      "title": "⭐ gitui-org gitui",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/gitui-org/gitui\" 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\"\u003egitui\u003c/a\u003e, created by \u003ca href=\"https://github.com/gitui-org\" 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\"\u003egitui-org\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBlazing 💥 fast terminal-ui for \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e written in rust 🦀\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [gitui](https://github.com/gitui-org/gitui), created by [gitui-org](https://github.com/gitui-org).\n\nBlazing 💥 fast terminal-ui for git written in rust 🦀\n",
      "summary": "If you're into interesting projects, don't miss out on gitui, created by gitui-org.",
      "date_published": "2025-01-21T02:43:48Z",
      "date_modified": "2025-01-21T02:43:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/extrawurst-gitui/",
      "url": "https://go.waylonwalker.com/extrawurst-gitui/",
      "title": "⭐ extrawurst gitui",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/extrawurst/gitui\" 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\"\u003egitui\u003c/a\u003e by \u003ca href=\"https://github.com/extrawurst\" 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\"\u003eextrawurst\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBlazing 💥 fast terminal-ui for \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e written in rust 🦀\u003c/p\u003e\n",
      "content_text": "\nThe work on [gitui](https://github.com/extrawurst/gitui) by [extrawurst](https://github.com/extrawurst).\n\nBlazing 💥 fast terminal-ui for git written in rust 🦀\n",
      "summary": "The work on gitui by extrawurst.",
      "date_published": "2025-01-21T02:43:48Z",
      "date_modified": "2025-01-21T02:43:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-537/",
      "url": "https://go.waylonwalker.com/thought-537/",
      "title": "💭 Nerd Fonts - Iconic font aggregator, glyphs/icons collection, ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.nerdfonts.com/cheat-sheet\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.nerdfonts.com/assets/img/sankey-glyphs-combined-diagram.png\" alt=\"Nerd Fonts - Iconic font aggregator, glyphs/icons collection, \u0026amp; fonts patcher — Iconic font aggregator, collection, \u0026amp; patcher: 9,000+ glyph/icons, 60+ patched fonts: Hack, Source Code Pro, more. Popular glyph collections: Font Awesome, Octicons, Material Design Icons, and more\" loading=\"lazy\"/ data-glightbox=\"description: Nerd Fonts - Iconic font aggregator, glyphs/icons collection, \u0026amp; fonts patcher — Iconic font aggregator, collection, \u0026amp; patcher: 9,000+ glyph/icons, 60+ patched fonts: Hack, Source Code Pro, more. Popular glyph collections: Font Awesome, Octicons, Material Design Icons, and more\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNerd Fonts - Iconic font aggregator, glyphs/icons collection, \u0026amp; fonts patcher\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIconic font aggregator, collection, \u0026amp; patcher: 9,000+ glyph/icons, 60+ patched fonts: Hack, Source Code Pro, more. Popular glyph collections: Font Awesome, Octicons, Material Design Icons, and more\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNerd Fonts · nerdfonts.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNerdfont cheatsheet is a fantastic way to copy paste icons into your shell.  I just used it to juice up my starship prompt with my current \u003ccode\u003e$NVIM_APPNAME\u003c/code\u003e managed by \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\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/3635351b-c006-4cff-8011-85c3b14bfc8f.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/3635351b-c006-4cff-8011-85c3b14bfc8f.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.nerdfonts.com/cheat-sheet\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.nerdfonts.com/assets/img/sankey-glyphs-combined-diagram.png\" alt=\"Nerd Fonts - Iconic font aggregator, glyphs/icons collection, \u0026amp; fonts patcher — Iconic font aggregator, collection, \u0026amp; patcher: 9,000+ glyph/icons, 60+ patched fonts: Hack, Source Code Pro, more. Popular glyph collections: Font Awesome, Octicons, Material Design Icons, and more\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNerd Fonts - Iconic font aggregator, glyphs/icons collection, \u0026amp; fonts patcher\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIconic font aggregator, collection, \u0026amp; patcher: 9,000+ glyph/icons, 60+ patched fonts: Hack, Source Code Pro, more. Popular glyph collections: Font Awesome, Octicons, Material Design Icons, and more\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNerd Fonts \u0026middot; nerdfonts.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNerdfont cheatsheet is a fantastic way to copy paste icons into your shell.  I just used it to juice up my starship prompt with my current `$NVIM_APPNAME` managed by \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\n\n![image](https://dropper.wayl.one/api/file/3635351b-c006-4cff-8011-85c3b14bfc8f.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.nerdfonts.com/cheat-sheet",
      "date_published": "2025-01-21T01:04:01Z",
      "date_modified": "2025-01-21T01:04:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "icons",
        "font",
        "nerdfont",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/emoji-in-headless-chrome-in-docker/",
      "url": "https://go.waylonwalker.com/emoji-in-headless-chrome-in-docker/",
      "title": "emoji in headless chrome in docker",
      "content_html": "\u003cp\u003eI recently noticed that my \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eog\u003c/a\u003e images were missing emoji.  They were taken using\nheadless chrome in a container.  I fixed it by adding an emoji font in the\ncontainerfile / dockerfile.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eRUN\u003c/span\u003e apt-get update \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e apt-get install -y \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"c1\"\u003e# Add fonts with emoji support\u003c/span\u003e\u003cspan class=\"err\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e\u003c/span\u003e    fonts-noto-color-emoji \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e rm -rf /var/lib/apt/lists/*\u003cspan class=\"err\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"before\"\u003eBefore \u003ca href=\"#before\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere’s what they were looking like with broken emoji fonts.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/6e9060f2-0e15-4f22-88b6-b6ec5ddb34de.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/6e9060f2-0e15-4f22-88b6-b6ec5ddb34de.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"after\"\u003eAfter \u003ca href=\"#after\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAnd now with the fixed emoji font.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/8ed5e338-50c2-4130-8cce-549ecc802f01.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/8ed5e338-50c2-4130-8cce-549ecc802f01.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI put thought bubbles on my thoughts posts and stars on my github stars posts\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nI recently noticed that my og images were missing emoji.  They were taken using\nheadless chrome in a container.  I fixed it by adding an emoji font in the\ncontainerfile / dockerfile.\n\n``` Dockerfile\nRUN apt-get update \u0026\u0026 apt-get install -y \\\n    # Add fonts with emoji support\n    fonts-noto-color-emoji \\\n    \u0026\u0026 rm -rf /var/lib/apt/lists/*\n```\n\n## Before\n\nHere's what they were looking like with broken emoji fonts.\n\n![image](https://dropper.waylonwalker.com/api/file/6e9060f2-0e15-4f22-88b6-b6ec5ddb34de.webp)\n\n## After\n\nAnd now with the fixed emoji font.\n\n![image](https://dropper.waylonwalker.com/api/file/8ed5e338-50c2-4130-8cce-549ecc802f01.webp)\n\n\u003e I put thought bubbles on my thoughts posts and stars on my github stars posts\n",
      "summary": "I recently noticed that my og images were missing emoji. They were taken using headless chrome in a container. I fixed it by adding an emoji font in the...",
      "date_published": "2025-01-20T13:55:37Z",
      "date_modified": "2025-01-20T13:55:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/one2nc-cloudlens/",
      "url": "https://go.waylonwalker.com/one2nc-cloudlens/",
      "title": "⭐ one2nc cloudlens",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/one2nc\" 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\"\u003eone2nc\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/one2nc/cloudlens\" 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\"\u003ecloudlens\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003ek9s like CLI for AWS and GCP\u003c/p\u003e\n",
      "content_text": "\n[one2nc](https://github.com/one2nc) has done a fantastic job with [cloudlens](https://github.com/one2nc/cloudlens). Highly recommend taking a look.\n\nk9s like CLI for AWS and GCP\n",
      "summary": "one2nc has done a fantastic job with cloudlens. Highly recommend taking a look.",
      "date_published": "2025-01-20T00:21:58Z",
      "date_modified": "2025-01-20T00:21:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dlvhdr-gh-dash/",
      "url": "https://go.waylonwalker.com/dlvhdr-gh-dash/",
      "title": "⭐ dlvhdr gh-dash",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/dlvhdr\" 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\"\u003edlvhdr’s\u003c/a\u003e project \u003ca href=\"https://github.com/dlvhdr/gh-dash\" 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\"\u003egh-dash\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA beautiful CLI dashboard for GitHub 🚀\u003c/p\u003e\n",
      "content_text": "\nI like [dlvhdr's](https://github.com/dlvhdr) project [gh-dash](https://github.com/dlvhdr/gh-dash).\n\nA beautiful CLI dashboard for GitHub 🚀\n",
      "summary": "I like dlvhdr's project gh-dash.",
      "date_published": "2025-01-20T00:21:53Z",
      "date_modified": "2025-01-20T00:21:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/doitintl-kube-no-trouble/",
      "url": "https://go.waylonwalker.com/doitintl-kube-no-trouble/",
      "title": "⭐ doitintl kube-no-trouble",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/doitintl/kube-no-trouble\" 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\"\u003ekube-no-trouble\u003c/a\u003e by \u003ca href=\"https://github.com/doitintl\" 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\"\u003edoitintl\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eEasily check your clusters for use of deprecated APIs\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [kube-no-trouble](https://github.com/doitintl/kube-no-trouble) by [doitintl](https://github.com/doitintl), and it's truly impressive.\n\nEasily check your clusters for use of deprecated APIs\n",
      "summary": "I recently discovered kube-no-trouble by doitintl, and it's truly impressive.",
      "date_published": "2025-01-19T23:10:54Z",
      "date_modified": "2025-01-19T23:10:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-536/",
      "url": "https://go.waylonwalker.com/thought-536/",
      "title": "💭 Manufacturer Recertified Drives | Enterprise Grade — ServerPar...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://serverpartdeals.com/collections/manufacturer-recertified-drives\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://serverpartdeals.com/cdn/shop/files/SPD_Logo_-_2000x2000_88baf93f-3981-4a53-88bc-df53f34c620e_1200x1200.png?v=1629317788\" alt=\"Manufacturer Recertified Drives | Enterprise Grade — Manufacturer Recertified enterprise drives work and look like new. Rebuilt by the manufacturer and quality tested to ensure they function as new, our recertified drives save on cost. Shop now!\" loading=\"lazy\"/ data-glightbox=\"description: Manufacturer Recertified Drives | Enterprise Grade — Manufacturer Recertified enterprise drives work and look like new. Rebuilt by the manufacturer and quality tested to ensure they function as new, our recertified drives save on cost. Shop now!\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eManufacturer Recertified Drives | Enterprise Grade\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eManufacturer Recertified enterprise drives work and look like new. Rebuilt by the manufacturer and quality tested to ensure they function as new, our recertified drives save on cost. Shop now!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eServerPartDeals.com · serverpartdeals.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFor my next drive upgrade in my \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 I am gong to be using one of these factory recertified drives from serverpartdeals.com.  Found them on an LTT video awhile back.  They are some lightly used and recertified, fully burnt in drives.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eShop for drives that are certified once again by the manufacturer to work like new. Factory ReCertified drives are cost-effective alternatives compared to factory-sealed new counter parts. Additionally, unlike in mass production, the re-certification process involves closer attention to the overall operation of the hardware so that the re-certification will not have to happen a 2nd time\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://serverpartdeals.com/collections/manufacturer-recertified-drives\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://serverpartdeals.com/cdn/shop/files/SPD_Logo_-_2000x2000_88baf93f-3981-4a53-88bc-df53f34c620e_1200x1200.png?v=1629317788\" alt=\"Manufacturer Recertified Drives | Enterprise Grade — Manufacturer Recertified enterprise drives work and look like new. Rebuilt by the manufacturer and quality tested to ensure they function as new, our recertified drives save on cost. Shop now!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eManufacturer Recertified Drives | Enterprise Grade\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eManufacturer Recertified enterprise drives work and look like new. Rebuilt by the manufacturer and quality tested to ensure they function as new, our recertified drives save on cost. Shop now!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eServerPartDeals.com \u0026middot; serverpartdeals.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFor my next drive upgrade in my homelab I am gong to be using one of these factory recertified drives from serverpartdeals.com.  Found them on an LTT video awhile back.  They are some lightly used and recertified, fully burnt in drives.\n\n\u003e Shop for drives that are certified once again by the manufacturer to work like new. Factory ReCertified drives are cost-effective alternatives compared to factory-sealed new counter parts. Additionally, unlike in mass production, the re-certification process involves closer attention to the overall operation of the hardware so that the re-certification will not have to happen a 2nd time\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://serverpartdeals.com/collections/manufacturer-recertified-drives",
      "date_published": "2025-01-19T19:11:47Z",
      "date_modified": "2025-01-19T19:11:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-535/",
      "url": "https://go.waylonwalker.com/thought-535/",
      "title": "💭 Releases · bootandy/dust",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/bootandy/dust?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/e8f11d2f70fa5b3f4583014e5549abf3897896cd11d88613fc7e3a654df1c5d9/bootandy/dust\" alt=\"GitHub - bootandy/dust: A more intuitive version of du in rust — A more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - bootandy/dust: A more intuitive version of du in rust — A more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - bootandy/dust: A more intuitive version of du in rust\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003edust is one of my favorite rust rewrite tools.  Its so useful for narrowing down file system bloat and cleaning up some disk space on your nearly full disks.  It runs right in your terminal and gives you a nice bar graph on the top directories in use.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/bootandy/dust?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/e8f11d2f70fa5b3f4583014e5549abf3897896cd11d88613fc7e3a654df1c5d9/bootandy/dust\" alt=\"GitHub - bootandy/dust: A more intuitive version of du in rust — A more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - bootandy/dust: A more intuitive version of du in rust\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ndust is one of my favorite rust rewrite tools.  Its so useful for narrowing down file system bloat and cleaning up some disk space on your nearly full disks.  It runs right in your terminal and gives you a nice bar graph on the top directories in use.\n\n\n![image](https://dropper.wayl.one/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/bootandy/dust?tab=readme-ov-file",
      "date_published": "2025-01-19T18:58:42Z",
      "date_modified": "2025-01-19T18:58:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bootandy-dust/",
      "url": "https://go.waylonwalker.com/bootandy-dust/",
      "title": "⭐ bootandy dust",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/bootandy/dust\" 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\"\u003edust\u003c/a\u003e by \u003ca href=\"https://github.com/bootandy\" 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\"\u003ebootandy\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA more intuitive version of du in rust\u003c/p\u003e\n",
      "content_text": "\nCheck out [dust](https://github.com/bootandy/dust) by [bootandy](https://github.com/bootandy). It's a well-crafted project with great potential.\n\nA more intuitive version of du in rust\n",
      "summary": "Check out dust by bootandy. It's a well-crafted project with great potential.",
      "date_published": "2025-01-19T18:56:38Z",
      "date_modified": "2025-01-19T18:56:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-534/",
      "url": "https://go.waylonwalker.com/thought-534/",
      "title": "💭 Keycloak",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.keycloak.org/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.keycloak.org/preview/index.png\" alt=\"Keycloak — Keycloak - the open source identity and access management solution. Add single-sign-on and authentication to applications and secure services with minimum effort.\" loading=\"lazy\"/ data-glightbox=\"description: Keycloak — Keycloak - the open source identity and access management solution. Add single-sign-on and authentication to applications and secure services with minimum effort.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKeycloak\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKeycloak - the open source identity and access management solution. Add single-sign-on and authentication to applications and secure services with minimum effort.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKeycloak · keycloak.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eKeycloak looks like an interesting way to setup sso.  It’s part of the cncf so it’s got a good backing.  I want something better for argo workflows and this might be it.  I’m curious what else I can tie into it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.keycloak.org/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.keycloak.org/preview/index.png\" alt=\"Keycloak — Keycloak - the open source identity and access management solution. Add single-sign-on and authentication to applications and secure services with minimum effort.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKeycloak\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKeycloak - the open source identity and access management solution. Add single-sign-on and authentication to applications and secure services with minimum effort.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKeycloak \u0026middot; keycloak.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nKeycloak looks like an interesting way to setup sso.  It's part of the cncf so it's got a good backing.  I want something better for argo workflows and this might be it.  I'm curious what else I can tie into it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.keycloak.org/",
      "date_published": "2025-01-19T05:34:32Z",
      "date_modified": "2025-01-19T05:34:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "auth",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-mini-mini-ai/",
      "url": "https://go.waylonwalker.com/nvim-mini-mini-ai/",
      "title": "⭐ nvim-mini mini.ai",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/nvim-mini/mini.ai\" 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\"\u003emini.ai\u003c/a\u003e from \u003ca href=\"https://github.com/nvim-mini\" 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\"\u003envim-mini\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNeovim Lua plugin to extend and create \u003ccode\u003ea\u003c/code\u003e/\u003ccode\u003ei\u003c/code\u003e textobjects. Part of ‘mini.nvim’ library.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [mini.ai](https://github.com/nvim-mini/mini.ai) from [nvim-mini](https://github.com/nvim-mini).\n\nNeovim Lua plugin to extend and create `a`/`i` textobjects. Part of 'mini.nvim' library.\n",
      "summary": "I'm impressed by mini.ai from nvim-mini.",
      "date_published": "2025-01-18T17:08:45Z",
      "date_modified": "2025-01-18T17:08:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/echasnovski-mini-ai/",
      "url": "https://go.waylonwalker.com/echasnovski-mini-ai/",
      "title": "⭐ echasnovski mini.ai",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/echasnovski\" 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\"\u003eechasnovski\u003c/a\u003e and their project \u003ca href=\"https://github.com/echasnovski/mini.ai\" 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\"\u003emini.ai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNeovim Lua plugin to extend and create \u003ccode\u003ea\u003c/code\u003e/\u003ccode\u003ei\u003c/code\u003e textobjects. Part of ‘mini.nvim’ library.\u003c/p\u003e\n",
      "content_text": "\nCheck out [echasnovski](https://github.com/echasnovski) and their project [mini.ai](https://github.com/echasnovski/mini.ai).\n\nNeovim Lua plugin to extend and create `a`/`i` textobjects. Part of 'mini.nvim' library.\n",
      "summary": "Check out echasnovski and their project mini.ai.",
      "date_published": "2025-01-18T17:08:45Z",
      "date_modified": "2025-01-18T17:08:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-533/",
      "url": "https://go.waylonwalker.com/thought-533/",
      "title": "💭 The Worst Thing You Can Do For Your Career - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"CVG6f1N0VT8\" title=\"The Worst Thing You Can Do For Your Career\" playlabel=\"Play: The Worst Thing You Can Do For Your Career\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDon’t stop learning!  Stop trying because you have a doomer outlook on ai, llms, industry and think they are taking over.  If you have no hope for the future, if you stop now you are cementing in that you will be no good and the ai will be better.  Many, maybe most of us in this industry go here by hard work, long nights of learning, trying to solve problems that our job had.  If llms  take over then the world is going to be a whole lot different, it will be a world you cannot predict or plan for.  For now put your head down and succeed in the world we have today.\u003c/p\u003e\n\u003cp\u003eTEEJ has some great thoughts on this whole sentiment, put this on for you morning walk or whatever you do.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"CVG6f1N0VT8\" title=\"The Worst Thing You Can Do For Your Career\" playlabel=\"Play: The Worst Thing You Can Do For Your Career\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDon't stop learning!  Stop trying because you have a doomer outlook on ai, llms, industry and think they are taking over.  If you have no hope for the future, if you stop now you are cementing in that you will be no good and the ai will be better.  Many, maybe most of us in this industry go here by hard work, long nights of learning, trying to solve problems that our job had.  If llms  take over then the world is going to be a whole lot different, it will be a world you cannot predict or plan for.  For now put your head down and succeed in the world we have today.\n\nTEEJ has some great thoughts on this whole sentiment, put this on for you morning walk or whatever you do.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=CVG6f1N0VT8",
      "date_published": "2025-01-17T14:54:14Z",
      "date_modified": "2025-01-17T14:54:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "dev",
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/swark-io-swark/",
      "url": "https://go.waylonwalker.com/swark-io-swark/",
      "title": "⭐ swark-io swark",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/swark-io/swark\" 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\"\u003eswark\u003c/a\u003e by \u003ca href=\"https://github.com/swark-io\" 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\"\u003eswark-io\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCreate architecture diagrams from code automatically using large language models (LLMs).\u003c/p\u003e\n",
      "content_text": "\nThe work on [swark](https://github.com/swark-io/swark) by [swark-io](https://github.com/swark-io).\n\nCreate architecture diagrams from code automatically using large language models (LLMs).\n",
      "summary": "The work on swark by swark-io.",
      "date_published": "2025-01-17T03:20:26Z",
      "date_modified": "2025-01-17T03:20:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-532/",
      "url": "https://go.waylonwalker.com/thought-532/",
      "title": "💭 The Future of HTMX - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"0rtpsJSLb44\" title=\"The Future of \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003eHTMX\u003c/a\u003e\" playlabel=\"Play: The Future of HTMX\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI like the charts that Theo brings to to these videos.  Shout out for a positive k8s reference and not shitting on it.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/6b2d4ec0-98f2-4e58-8ab4-936b7356e7f4.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/6b2d4ec0-98f2-4e58-8ab4-936b7356e7f4.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eHtmx brings \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/css just a bit further down the complexity graph with little to no extra effort, while react allows us to go all the way full complexity at the cost of build and dev complexity to go from zero to 100 as soon as its introduced.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/71ac480a-4e45-4777-87eb-a9d2d8775cca.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/71ac480a-4e45-4777-87eb-a9d2d8775cca.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003ehtmx brings us back to the ease of jquery ajax without any complex swapping or json parsing, all of the object parsing and html templating is done in the backend, the front end just tracks where to put it.  HTMX couples the frontend and backend much tigher, since all of the front end html is generated in the backend, done correctly it is not possible for the front end to get out of sync and try to do things that the back end does not know how to handle, vice versa.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/aa09051d-7e36-43a3-b6da-a6257cad1cc9.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/aa09051d-7e36-43a3-b6da-a6257cad1cc9.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"0rtpsJSLb44\" title=\"The Future of HTMX\" playlabel=\"Play: The Future of HTMX\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI like the charts that Theo brings to to these videos.  Shout out for a positive k8s reference and not shitting on it.\n\n![image](https://dropper.wayl.one/api/file/6b2d4ec0-98f2-4e58-8ab4-936b7356e7f4.webp)\n\nHtmx brings html/css just a bit further down the complexity graph with little to no extra effort, while react allows us to go all the way full complexity at the cost of build and dev complexity to go from zero to 100 as soon as its introduced.\n\n![image](https://dropper.wayl.one/api/file/71ac480a-4e45-4777-87eb-a9d2d8775cca.webp)\n\nhtmx brings us back to the ease of jquery ajax without any complex swapping or json parsing, all of the object parsing and html templating is done in the backend, the front end just tracks where to put it.  HTMX couples the frontend and backend much tigher, since all of the front end html is generated in the backend, done correctly it is not possible for the front end to get out of sync and try to do things that the back end does not know how to handle, vice versa.\n\n![image](https://dropper.wayl.one/api/file/aa09051d-7e36-43a3-b6da-a6257cad1cc9.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=0rtpsJSLb44\u0026t=624s",
      "date_published": "2025-01-13T02:45:27Z",
      "date_modified": "2025-01-13T02:45:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-531/",
      "url": "https://go.waylonwalker.com/thought-531/",
      "title": "💭 Why I Write",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://brittanyellich.com/why-i-write/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://brittanyellich.com/_astro/typewriter.LhfVZpCN_Z1bzYMR.jpg\" alt=\"Why I Write — Staff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted podcast.\" loading=\"lazy\"/ data-glightbox=\"description: Why I Write — Staff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted podcast.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhy I Write\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStaff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted po...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBrittany Ellich · brittanyellich.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIt’s interesting how many people in tech maintain a blog.  I think part of this brings us back to web 1.0 days when so many individual websites owned the web it was a free for all unindexed land and you got to own a small piece of it.\u003c/p\u003e\n\u003cp\u003eI agree with most of Brittany’s points here I write a lot to keep my skills sharp, and to refer back to.  Brittany mentions keeping all her old posts, even the cringy ones.  I’m all with you here, I’m just wodering how you look back at anything you wrote in the past and not get a bit of that feel, maybe its just me, but I see cringe and mistakes gallore, but it all makes me better moving forward.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://brittanyellich.com/why-i-write/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://brittanyellich.com/_astro/typewriter.LhfVZpCN_Z1bzYMR.jpg\" alt=\"Why I Write — Staff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted podcast.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhy I Write\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStaff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted po...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBrittany Ellich \u0026middot; brittanyellich.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIt's interesting how many people in tech maintain a blog.  I think part of this brings us back to web 1.0 days when so many individual websites owned the web it was a free for all unindexed land and you got to own a small piece of it.\n\nI agree with most of Brittany's points here I write a lot to keep my skills sharp, and to refer back to.  Brittany mentions keeping all her old posts, even the cringy ones.  I'm all with you here, I'm just wodering how you look back at anything you wrote in the past and not get a bit of that feel, maybe its just me, but I see cringe and mistakes gallore, but it all makes me better moving forward.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://brittanyellich.com/why-i-write/",
      "date_published": "2025-01-13T02:28:21Z",
      "date_modified": "2025-01-13T02:28:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-530/",
      "url": "https://go.waylonwalker.com/thought-530/",
      "title": "💭 Availability",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://brittanyellich.com/note/availability/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://brittanyellich.com/_astro/ProfilePicSquare.7t78KdLr_Z18Hm6X.jpg\" alt=\"Availability — Staff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted podcast.\" loading=\"lazy\"/ data-glightbox=\"description: Availability — Staff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted podcast.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAvailability\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStaff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted po...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBrittany Ellich · brittanyellich.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003enice overview of availability measurements and what they really mean.  The crazy world we live in today depends on so many things runnig, its also so hard to measure your uptime, The uptime metrics can mean a lot of different things.  The site is up and accepting traffic, but can users make changes or submit orders, there is a lot more to it than just up or down.  I really appreciate Brittany’s story from Nike nested in there.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://brittanyellich.com/note/availability/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://brittanyellich.com/_astro/ProfilePicSquare.7t78KdLr_Z18Hm6X.jpg\" alt=\"Availability — Staff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted podcast.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAvailability\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStaff Software Engineer at GitHub specializing in developer productivity, AI-assisted development, and accessibility. Creator of The Balanced Engineer newsletter and co-host of the Overcommitted po...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBrittany Ellich \u0026middot; brittanyellich.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nnice overview of availability measurements and what they really mean.  The crazy world we live in today depends on so many things runnig, its also so hard to measure your uptime, The uptime metrics can mean a lot of different things.  The site is up and accepting traffic, but can users make changes or submit orders, there is a lot more to it than just up or down.  I really appreciate Brittany's story from Nike nested in there.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://brittanyellich.com/note/availability/",
      "date_published": "2025-01-13T02:20:16Z",
      "date_modified": "2025-01-13T02:20:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-529/",
      "url": "https://go.waylonwalker.com/thought-529/",
      "title": "💭 SuperMini nRF52840 Wireless Controller Development Board - kri...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kriscables.com/supermini-nrf52840/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://kriscables.com/wp-content/uploads/2019/11/cropped-500x250.png\" alt=\"nRF52840 Wireless Controller Development Board - kriscables — SuperMini nRF52840 Wireless Controller Development Board\" loading=\"lazy\"/ data-glightbox=\"description: nRF52840 Wireless Controller Development Board - kriscables — SuperMini nRF52840 Wireless Controller Development Board\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003enRF52840 Wireless Controller Development Board - kriscables\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSuperMini nRF52840 Wireless Controller Development Board\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekriscables - Custom Ergo Keyboards and Cables · kriscables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe SuperMini nrf52840 is a sick controller for building keyboards, affordable, easy to get, and compact.  Bluetooth and wired setup just works in zmk.  This page has a nice image of the pinout.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kriscables.com/supermini-nrf52840/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://kriscables.com/wp-content/uploads/2019/11/cropped-500x250.png\" alt=\"nRF52840 Wireless Controller Development Board - kriscables — SuperMini nRF52840 Wireless Controller Development Board\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003enRF52840 Wireless Controller Development Board - kriscables\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSuperMini nRF52840 Wireless Controller Development Board\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekriscables - Custom Ergo Keyboards and Cables \u0026middot; kriscables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe SuperMini nrf52840 is a sick controller for building keyboards, affordable, easy to get, and compact.  Bluetooth and wired setup just works in zmk.  This page has a nice image of the pinout.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kriscables.com/supermini-nrf52840/",
      "date_published": "2025-01-13T01:51:24Z",
      "date_modified": "2025-01-13T01:51:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "microcontroller",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-527/",
      "url": "https://go.waylonwalker.com/thought-527/",
      "title": "💭 Quick Start - kotaemon Docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cinnamon.github.io/kotaemon/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQuick Start - kotaemon Docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecinnamon.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003einteresting UI for RAG based workflows, i.e. chatting with your documents.  It looks like it can run a number of models, feels like ollama with RAG and a nice web ui.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cinnamon.github.io/kotaemon/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQuick Start - kotaemon Docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecinnamon.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ninteresting UI for RAG based workflows, i.e. chatting with your documents.  It looks like it can run a number of models, feels like ollama with RAG and a nice web ui.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cinnamon.github.io/kotaemon/",
      "date_published": "2025-01-11T16:34:26Z",
      "date_modified": "2025-01-11T16:34:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "rag",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-526/",
      "url": "https://go.waylonwalker.com/thought-526/",
      "title": "💭 Bluesky is more like Twitter than X is",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://joelhooks.com/bluesky\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://res.cloudinary.com/badass-courses/image/upload/w_1200,h_630,c_fill,f_auto/w_1020,h_450,c_fit,co_rgb:FFFFFF,g_west,x_90,y_-40,l_text:Roboto_60_left_bold:bluesky%20is%20more%20like%20twitter%20than%20x%20is/v1731357274/social-image-templates/joelhooks-com_sbhjby.png\" alt=\"Bluesky is more like Twitter than X is\" loading=\"lazy\"/ data-glightbox=\"description: Bluesky is more like Twitter than X is\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBluesky is more like Twitter than X is\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejoelhooks.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBluesky is almost excatly like twitter was when I joined years ago.  It’s gone crazy lately bogged deep in politics, bots, and ads.  I’ve seen like two scroll pages of ads in a row, its nuts.  What I did not know before Joel pointed out here is that the feed I am looking at is my following feed, its only feed of people I follow in descending order.  On bluesky you get to pick your feed!!!  This feels like tweetdeck did back when we were able to run that.  You could tune in search terms and save them it was glorious.  Bluesky has some really interesting ones that you can use like popular with friends, only posts, my bangers, that have a pre defined algorithms.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://joelhooks.com/bluesky\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://res.cloudinary.com/badass-courses/image/upload/w_1200,h_630,c_fill,f_auto/w_1020,h_450,c_fit,co_rgb:FFFFFF,g_west,x_90,y_-40,l_text:Roboto_60_left_bold:bluesky%20is%20more%20like%20twitter%20than%20x%20is/v1731357274/social-image-templates/joelhooks-com_sbhjby.png\" alt=\"Bluesky is more like Twitter than X is\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBluesky is more like Twitter than X is\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejoelhooks.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBluesky is almost excatly like twitter was when I joined years ago.  It's gone crazy lately bogged deep in politics, bots, and ads.  I've seen like two scroll pages of ads in a row, its nuts.  What I did not know before Joel pointed out here is that the feed I am looking at is my following feed, its only feed of people I follow in descending order.  On bluesky you get to pick your feed!!!  This feels like tweetdeck did back when we were able to run that.  You could tune in search terms and save them it was glorious.  Bluesky has some really interesting ones that you can use like popular with friends, only posts, my bangers, that have a pre defined algorithms.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://joelhooks.com/bluesky",
      "date_published": "2025-01-11T02:17:50Z",
      "date_modified": "2025-01-11T02:17:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "social",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-524/",
      "url": "https://go.waylonwalker.com/thought-524/",
      "title": "💭 Why You Should Game on Linux (feat. GloriousEggroll of Nobara)...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"QwpTAk_IiyU\" title=\"Why You Should Game on Linux (feat. GloriousEggroll of Nobara)\" playlabel=\"Play: Why You Should Game on Linux (feat. GloriousEggroll of Nobara)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis man is responsible for making gaming on linux what it is today.  Such a heartfelt story to hear that reviving his dad’s machine was at the core of what drove him to do what he has done for the wider gaming on linux community.  Update on your schedule, remove all the tracking and bloatware, this is what drove him to start using linux before making it accessible for his Dad.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBut really do update, this is not your 2002 PHP box, things need updated and regular updates help the process.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"QwpTAk_IiyU\" title=\"Why You Should Game on Linux (feat. GloriousEggroll of Nobara)\" playlabel=\"Play: Why You Should Game on Linux (feat. GloriousEggroll of Nobara)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis man is responsible for making gaming on linux what it is today.  Such a heartfelt story to hear that reviving his dad's machine was at the core of what drove him to do what he has done for the wider gaming on linux community.  Update on your schedule, remove all the tracking and bloatware, this is what drove him to start using linux before making it accessible for his Dad.\n\n\u003e But really do update, this is not your 2002 PHP box, things need updated and regular updates help the process.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=QwpTAk_IiyU\u0026t=28s",
      "date_published": "2025-01-11T01:38:57Z",
      "date_modified": "2025-01-11T01:38:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/postiz-file-upload/",
      "url": "https://go.waylonwalker.com/postiz-file-upload/",
      "title": "postiz-file-upload",
      "content_html": "\u003cp\u003eToday I learned that the docs in postiz are a bit behind, (fantastic docs btw,\nthey are to the point, and cover almost all of what you need).  The docs state\nthat you need to include an R2 bucket to handle uploads.\u003c/p\u003e\n\u003cp\u003eThis \u003ca href=\"https://github.com/gitroomhq/postiz-app/issues/322\" 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\"\u003eissue\u003c/a\u003e shows that\nmore work has been done, one of which is local storage.  The \u003ca href=\"https://docs.postiz.com/installation/docker-compose\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.postiz.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.postiz.com.png\" class=\"has-avatar  has-avatar-before\"\u003ecompose\nfile\u003c/a\u003e they use in the\nquick start has the required env variables to set this up.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eSTORAGE_PROVIDER\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;local\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eUPLOAD_DIRECTORY\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/uploads\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eNEXT_PUBLIC_UPLOAD_DIRECTORY\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/uploads\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003elooking into my running instance I can see my images there.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⬢ \u003cspan class=\"o\"\u003e[\u003c/span\u003edevtainer\u003cspan class=\"o\"\u003e]\u003c/span\u003e ❯ podman \u003cspan class=\"nb\"\u003eexec\u003c/span\u003e postiz ls /uploads/2025/01/09\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e811747b3f703f5d9a7f10aff5103412ff0.jpeg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ea221db10a76f0c414171ab417379b09ec.jpeg\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I learned that the docs in postiz are a bit behind, (fantastic docs btw,\nthey are to the point, and cover almost all of what you need).  The docs state\nthat you need to include an R2 bucket to handle uploads.\n\nThis [issue](https://github.com/gitroomhq/postiz-app/issues/322) shows that\nmore work has been done, one of which is local storage.  The [compose\nfile](https://docs.postiz.com/installation/docker-compose) they use in the\nquick start has the required env variables to set this up.\n\n```yaml\n      STORAGE_PROVIDER: \"local\"\n      UPLOAD_DIRECTORY: \"/uploads\"\n      NEXT_PUBLIC_UPLOAD_DIRECTORY: \"/uploads\"\n```\n\nlooking into my running instance I can see my images there.\n\n``` bash\n⬢ [devtainer] ❯ podman exec postiz ls /uploads/2025/01/09\n811747b3f703f5d9a7f10aff5103412ff0.jpeg\na221db10a76f0c414171ab417379b09ec.jpeg\n```\n",
      "summary": "Today I learned that the docs in postiz are a bit behind, (fantastic docs btw, they are to the point, and cover almost all of what you need). The docs state...",
      "date_published": "2025-01-10T20:35:39Z",
      "date_modified": "2025-01-10T20:35:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "social",
        "postiz",
        "containers",
        "compose",
        "docker"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-523/",
      "url": "https://go.waylonwalker.com/thought-523/",
      "title": "💭 V2 suddenly getting client-not-enrolled today - X API - X Deve...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://devcommunity.x.com/t/v2-suddenly-getting-client-not-enrolled-today/195456\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edevcommunity.x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJust tried using my twitter api key for the first time in quite awhile.  Apps now need to be tied to projects in order to work.  It looks like projects are where pricing comes into play.  Thankfully they still give a free tier for doing small time things for myself.  You can really see the effect that llms have on these things though as it is 5x more expensive to read posts than to make posts currently.  Data is the new gold for these kind of companies.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://devcommunity.x.com/t/v2-suddenly-getting-client-not-enrolled-today/195456\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edevcommunity.x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJust tried using my twitter api key for the first time in quite awhile.  Apps now need to be tied to projects in order to work.  It looks like projects are where pricing comes into play.  Thankfully they still give a free tier for doing small time things for myself.  You can really see the effect that llms have on these things though as it is 5x more expensive to read posts than to make posts currently.  Data is the new gold for these kind of companies.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://devcommunity.x.com/t/v2-suddenly-getting-client-not-enrolled-today/195456",
      "date_published": "2025-01-10T02:56:15Z",
      "date_modified": "2025-01-10T02:56:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "twitter",
        "x",
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-522/",
      "url": "https://go.waylonwalker.com/thought-522/",
      "title": "💭 containers/podman-compose: a script to run docker-compose.yml ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/containers/podman-compose\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/d53abe4df4591d8d021c6e93bc163b20017f898c74c3f411d182466ae0f31ace/containers/podman-compose\" alt=\"GitHub - containers/podman-compose: a script to run docker-compose.yml using podman — a script to run docker-compose.yml using podman. Contribute to containers/podman-compose development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - containers/podman-compose: a script to run docker-compose.yml using podman — a script to run docker-compose.yml using podman. Contribute to containers/podman-compose development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - containers/podman-compose: a script to run docker-compose.yml using podman\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ea script to run docker-compose.yml using podman. Contribute to containers/podman-compose development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWild that the podman-compose github readme calls out k3s as an alternative.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/9326cd6f-3f27-4703-85fd-a3b16f7bdc92.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/9326cd6f-3f27-4703-85fd-a3b16f7bdc92.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003ecompose definitely has its place, especially for local development on a developers machine, its so much easier to stand up and get things like hot reload up and running smooth.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/containers/podman-compose\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/d53abe4df4591d8d021c6e93bc163b20017f898c74c3f411d182466ae0f31ace/containers/podman-compose\" alt=\"GitHub - containers/podman-compose: a script to run docker-compose.yml using podman — a script to run docker-compose.yml using podman. Contribute to containers/podman-compose development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - containers/podman-compose: a script to run docker-compose.yml using podman\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ea script to run docker-compose.yml using podman. Contribute to containers/podman-compose development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWild that the podman-compose github readme calls out k3s as an alternative.\n\n![image](https://dropper.wayl.one/api/file/9326cd6f-3f27-4703-85fd-a3b16f7bdc92.webp)\n\ncompose definitely has its place, especially for local development on a developers machine, its so much easier to stand up and get things like hot reload up and running smooth.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/containers/podman-compose",
      "date_published": "2025-01-09T14:57:06Z",
      "date_modified": "2025-01-09T14:57:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/containers-podman-compose/",
      "url": "https://go.waylonwalker.com/containers-podman-compose/",
      "title": "⭐ containers podman-compose",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/containers/podman-compose\" 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\"\u003epodman-compose\u003c/a\u003e by \u003ca href=\"https://github.com/containers\" 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\"\u003econtainers\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ea script to run docker-compose.yml using podman\u003c/p\u003e\n",
      "content_text": "\nThe work on [podman-compose](https://github.com/containers/podman-compose) by [containers](https://github.com/containers).\n\na script to run docker-compose.yml using podman\n",
      "summary": "The work on podman-compose by containers.",
      "date_published": "2025-01-09T14:54:36Z",
      "date_modified": "2025-01-09T14:54:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-521/",
      "url": "https://go.waylonwalker.com/thought-521/",
      "title": "💭 bic | Static blog generator, in bash",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bic.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ebic\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStatic blog generator, in bash\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebic · bic.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIntereresting someone built a blog generator in bash.  it comes with normal markdown to \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, static content, robots.txt, sitemap, rss, and tags.  It uses pandoc to take markdown to html and mustache for page templates.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bic.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ebic\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStatic blog generator, in bash\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebic \u0026middot; bic.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIntereresting someone built a blog generator in bash.  it comes with normal markdown to html, static content, robots.txt, sitemap, rss, and tags.  It uses pandoc to take markdown to html and mustache for page templates.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bic.sh/",
      "date_published": "2025-01-09T14:22:47Z",
      "date_modified": "2025-01-09T14:22:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "markdown",
        "bash",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-520/",
      "url": "https://go.waylonwalker.com/thought-520/",
      "title": "💭 Animate to height: auto; (and other intrinsic sizing keywords)...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.chrome.com/docs/css-ui/animate-to-height-auto/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developer.chrome.com/static/docs/css-ui/animate-to-height-auto/image/animate-to-height-auto.png\" alt=\"Animate to height: auto; (and other intrinsic sizing keywords) in CSS  |  CSS and UI  |  Chrome for Developers — Animate to and from intrinsic sizing keywords with `interpolate-size` and `calc-size()`\" loading=\"lazy\"/ data-glightbox=\"description: Animate to height: auto; (and other intrinsic sizing keywords) in CSS  |  CSS and UI  |  Chrome for Developers — Animate to and from intrinsic sizing keywords with `interpolate-size` and `calc-size()`\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAnimate to height: auto; (and other intrinsic sizing keywords) in CSS  |  CSS and UI  |  Chrome for Developers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAnimate to and from intrinsic sizing keywords with `interpolate-size` and `calc-size()`\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChrome for Developers · developer.chrome.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCss is getting so good, new things like interpolate-size are making things that use to require some deep expertise and hacks intuitive and easy.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e/* Opt-in the whole page to interpolate sizes to/from keywords */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nd\"\u003eroot\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003einterpolate-size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eallow-keywords\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"c\"\u003e/* 👈 */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.chrome.com/docs/css-ui/animate-to-height-auto/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developer.chrome.com/static/docs/css-ui/animate-to-height-auto/image/animate-to-height-auto.png\" alt=\"Animate to height: auto; (and other intrinsic sizing keywords) in CSS  |  CSS and UI  |  Chrome for Developers — Animate to and from intrinsic sizing keywords with `interpolate-size` and `calc-size()`\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAnimate to height: auto; (and other intrinsic sizing keywords) in CSS  |  CSS and UI  |  Chrome for Developers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAnimate to and from intrinsic sizing keywords with `interpolate-size` and `calc-size()`\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChrome for Developers \u0026middot; developer.chrome.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCss is getting so good, new things like interpolate-size are making things that use to require some deep expertise and hacks intuitive and easy.\n\n``` css\n/* Opt-in the whole page to interpolate sizes to/from keywords */\n:root {\n    interpolate-size: allow-keywords; /* 👈 */\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developer.chrome.com/docs/css-ui/animate-to-height-auto/",
      "date_published": "2025-01-09T14:20:25Z",
      "date_modified": "2025-01-09T14:20:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "css",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-519/",
      "url": "https://go.waylonwalker.com/thought-519/",
      "title": "💭 awesome-cursorrules/rules/py-fast-api/.cursorrules at main · P...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules\" alt=\"https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules\"/ data-glightbox=\"description: https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eLooks like a great start to a rules file for \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/p\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003ePlace the happy path last in the function for improved readability.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI have never heard anyone say this.  It feels weird to me.  The other early return, find and handle errors early all make sense to me, but happy path last is new to me.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules](/static/https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules)\n\nLooks like a great start to a rules file for fastapi.\n\n\u003e - Place the happy path last in the function for improved readability.\n\nI have never heard anyone say this.  It feels weird to me.  The other early return, find and handle errors early all make sense to me, but happy path last is new to me.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/PatrickJS/awesome-cursorrules/blob/main/rules/py-fast-api/.cursorrules",
      "date_published": "2025-01-09T14:03:12Z",
      "date_modified": "2025-01-09T14:03:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "agentic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-518/",
      "url": "https://go.waylonwalker.com/thought-518/",
      "title": "💭 Generate Custom .cursorrules for Your Project Based on Communi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://egghead.io/generate-custom-cursorrules-for-your-project-based-on-community-examples~eimq2\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://builder.egghead.io/api/og?resource=generate-custom-cursorrules-for-your-project-based-on-community-examples~eimq2\" alt=\"Generate Custom .cursorrules for Your Project Based on Community Examples — expert led courses for front-end web developers and teams that want to level up through straightforward and concise lessons on the most useful tools available.\" loading=\"lazy\"/ data-glightbox=\"description: Generate Custom .cursorrules for Your Project Based on Community Examples — expert led courses for front-end web developers and teams that want to level up through straightforward and concise lessons on the most useful tools available.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGenerate Custom .cursorrules for Your Project Based on Community Examples\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eexpert led courses for front-end web developers and teams that want to level up through straightforward and concise lessons on the most useful tools available.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eegghead · egghead.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eReally interesting way to generate a rules file for agentic workflows based on your current repo.  John uses gitingest here, looks like a fantastic tool, but probably not useful for most private repos.  I’m sure you can replicate the same thing in a private repo wtih a small amount of effort the few times you need to do it.  gitingest looks like a great way to pull in some extra context for some open source dependencies that you have though.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://egghead.io/generate-custom-cursorrules-for-your-project-based-on-community-examples~eimq2\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://builder.egghead.io/api/og?resource=generate-custom-cursorrules-for-your-project-based-on-community-examples~eimq2\" alt=\"Generate Custom .cursorrules for Your Project Based on Community Examples — expert led courses for front-end web developers and teams that want to level up through straightforward and concise lessons on the most useful tools available.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGenerate Custom .cursorrules for Your Project Based on Community Examples\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eexpert led courses for front-end web developers and teams that want to level up through straightforward and concise lessons on the most useful tools available.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eegghead \u0026middot; egghead.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nReally interesting way to generate a rules file for agentic workflows based on your current repo.  John uses gitingest here, looks like a fantastic tool, but probably not useful for most private repos.  I'm sure you can replicate the same thing in a private repo wtih a small amount of effort the few times you need to do it.  gitingest looks like a great way to pull in some extra context for some open source dependencies that you have though.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://egghead.io/generate-custom-cursorrules-for-your-project-based-on-community-examples~eimq2",
      "date_published": "2025-01-09T13:53:40Z",
      "date_modified": "2025-01-09T13:53:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "agentic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-517/",
      "url": "https://go.waylonwalker.com/thought-517/",
      "title": "💭 cyclotruc/gitingest: Replace 'hub' with 'ingest' in any github...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/cyclotruc/gitingest\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/3b73a3791048282b343b8ce6c805b6bae5eb7b5bb4a0d9544b0c739609364a27/coderamp-labs/gitingest\" alt=\"GitHub - coderamp-labs/gitingest: Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase — Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase  - coderamp-labs/gitingest\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - coderamp-labs/gitingest: Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase — Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase  - coderamp-labs/gitingest\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - coderamp-labs/gitingest: Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReplace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase  - coderamp-labs/gitingest\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGitingest has a python package on pypi that you can run with uvx, and it accepts the same arguments as the web version, right in your terminal\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⬢ \u003cspan class=\"o\"\u003e[\u003c/span\u003edevtainer\u003cspan class=\"o\"\u003e]\u003c/span\u003e ❯ uvx gitingest --help\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUsage: gitingest \u003cspan class=\"o\"\u003e[\u003c/span\u003eOPTIONS\u003cspan class=\"o\"\u003e]\u003c/span\u003e SOURCE\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Analyze a directory and create a text dump of its contents.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOptions:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -o, --output TEXT           Output file path \u003cspan class=\"o\"\u003e(\u003c/span\u003edefault: \u0026lt;repo_name\u0026gt;.txt in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                              current directory\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -s, --max-size INTEGER      Maximum file size to process in bytes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -e, --exclude-pattern TEXT  Patterns to exclude\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -i, --include-pattern TEXT  Patterns to include\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --help                      Show this message and exit.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/cyclotruc/gitingest\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/3b73a3791048282b343b8ce6c805b6bae5eb7b5bb4a0d9544b0c739609364a27/coderamp-labs/gitingest\" alt=\"GitHub - coderamp-labs/gitingest: Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase — Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase  - coderamp-labs/gitingest\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - coderamp-labs/gitingest: Replace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReplace \u0026#39;hub\u0026#39; with \u0026#39;ingest\u0026#39; in any GitHub URL to get a prompt-friendly extract of a codebase  - coderamp-labs/gitingest\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGitingest has a python package on pypi that you can run with uvx, and it accepts the same arguments as the web version, right in your terminal\n\n\n``` bash\n⬢ [devtainer] ❯ uvx gitingest --help\nUsage: gitingest [OPTIONS] SOURCE\n\n  Analyze a directory and create a text dump of its contents.\n\nOptions:\n  -o, --output TEXT           Output file path (default: \u003crepo_name\u003e.txt in\n                              current directory)\n  -s, --max-size INTEGER      Maximum file size to process in bytes\n  -e, --exclude-pattern TEXT  Patterns to exclude\n  -i, --include-pattern TEXT  Patterns to include\n  --help                      Show this message and exit.\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/cyclotruc/gitingest",
      "date_published": "2025-01-09T13:46:33Z",
      "date_modified": "2025-01-09T13:46:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cyclotruc-gitingest/",
      "url": "https://go.waylonwalker.com/cyclotruc-gitingest/",
      "title": "⭐ cyclotruc gitingest",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/cyclotruc/gitingest\" 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\"\u003egitingest\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/cyclotruc\" 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\"\u003ecyclotruc\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eReplace ‘hub’ with ‘ingest’ in any github url to get a prompt-friendly extract of a codebase\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [gitingest](https://github.com/cyclotruc/gitingest), an amazing project by [cyclotruc](https://github.com/cyclotruc). It's worth exploring!\n\nReplace 'hub' with 'ingest' in any github url to get a prompt-friendly extract of a codebase\n",
      "summary": "I'm really excited about gitingest, an amazing project by cyclotruc. It's worth exploring!",
      "date_published": "2025-01-09T13:41:27Z",
      "date_modified": "2025-01-09T13:41:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/coderamp-labs-gitingest/",
      "url": "https://go.waylonwalker.com/coderamp-labs-gitingest/",
      "title": "⭐ coderamp-labs gitingest",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/coderamp-labs/gitingest\" 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\"\u003egitingest\u003c/a\u003e by \u003ca href=\"https://github.com/coderamp-labs\" 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\"\u003ecoderamp-labs\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eReplace ‘hub’ with ‘ingest’ in any github url to get a prompt-friendly extract of a codebase\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [gitingest](https://github.com/coderamp-labs/gitingest) by [coderamp-labs](https://github.com/coderamp-labs).\n\nReplace 'hub' with 'ingest' in any github url to get a prompt-friendly extract of a codebase\n",
      "summary": "Looking for inspiration? gitingest by coderamp-labs.",
      "date_published": "2025-01-09T13:41:27Z",
      "date_modified": "2025-01-09T13:41:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-516/",
      "url": "https://go.waylonwalker.com/thought-516/",
      "title": "💭 Gitingest",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gitingest.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/static/og-image.png\" alt=\"Gitingest — Replace\" loading=\"lazy\"/ data-glightbox=\"description: Gitingest — Replace\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitingest\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReplace \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egitingest.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eReplace \u003cstrong\u003ehub\u003c/strong\u003e with \u003cstrong\u003eingest\u003c/strong\u003e in any \u003cstrong\u003egithub\u003c/strong\u003e and get a prompt friendly codebase ready to feed into any llm.  It combines the entire codebase, based on a gitignore style glob that you pass in, into a single TXT file.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gitingest.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/static/og-image.png\" alt=\"Gitingest — Replace\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitingest\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReplace \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egitingest.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nReplace **hub** with **ingest** in any **github** and get a prompt friendly codebase ready to feed into any llm.  It combines the entire codebase, based on a gitignore style glob that you pass in, into a single TXT file.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gitingest.com/",
      "date_published": "2025-01-09T13:40:41Z",
      "date_modified": "2025-01-09T13:40:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pinjasaur-bic/",
      "url": "https://go.waylonwalker.com/pinjasaur-bic/",
      "title": "⭐ Pinjasaur bic",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Pinjasaur/bic\" 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\"\u003ebic\u003c/a\u003e by \u003ca href=\"https://github.com/Pinjasaur\" 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\"\u003ePinjasaur\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eStatic blog generator, in bash\u003c/p\u003e\n",
      "content_text": "\nCheck out [bic](https://github.com/Pinjasaur/bic) by [Pinjasaur](https://github.com/Pinjasaur). It's a well-crafted project with great potential.\n\nStatic blog generator, in bash\n",
      "summary": "Check out bic by Pinjasaur. It's a well-crafted project with great potential.",
      "date_published": "2025-01-09T02:25:48Z",
      "date_modified": "2025-01-09T02:25:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-515/",
      "url": "https://go.waylonwalker.com/thought-515/",
      "title": "💭 olimorris/codecompanion.nvim: ✨ AI-powered coding, seamlessly ...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/olimorris/codecompanion.nvim\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/olimorris/codecompanion.nvim\" alt=\"https://github.com/olimorris/codecompanion.nvim\"/ data-glightbox=\"description: https://github.com/olimorris/codecompanion.nvim\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eDefinitely need to give codecompanion.nvim a try, it looks like a competitor to windsurf but in nvim.  It looks so feature complete that its hard to grasp all of what it does.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/olimorris/codecompanion.nvim](/static/https://github.com/olimorris/codecompanion.nvim)\n\nDefinitely need to give codecompanion.nvim a try, it looks like a competitor to windsurf but in nvim.  It looks so feature complete that its hard to grasp all of what it does.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/olimorris/codecompanion.nvim",
      "date_published": "2025-01-09T02:18:50Z",
      "date_modified": "2025-01-09T02:18:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-514/",
      "url": "https://go.waylonwalker.com/thought-514/",
      "title": "💭 Cracking the Code | Open Sauce 2024 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"9vSiP_ftyuQ\" title=\"Cracking the Code | Open Sauce 2024\" playlabel=\"Play: Cracking the Code | Open Sauce 2024\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat panel of software folks at open sauce.  It was interesting hearing from all these creators from the perspective of an open sauce panel.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"9vSiP_ftyuQ\" title=\"Cracking the Code | Open Sauce 2024\" playlabel=\"Play: Cracking the Code | Open Sauce 2024\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat panel of software folks at open sauce.  It was interesting hearing from all these creators from the perspective of an open sauce panel.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=9vSiP_ftyuQ",
      "date_published": "2025-01-08T21:08:08Z",
      "date_modified": "2025-01-08T21:08:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-513/",
      "url": "https://go.waylonwalker.com/thought-513/",
      "title": "💭 WaylonWalker/nvim-manager: manage dotfiles with nvim_appname",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2\" alt=\"https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2\"/ data-glightbox=\"description: https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eNew release out for nvim-manager that supports installing pre-configured distros.  It’s such a breeze to install these now, its been fun to go through each of them.  The currently included distros are.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLazyVim\u003c/li\u003e\n\u003cli\u003eAstroVim\u003c/li\u003e\n\u003cli\u003ekickstart\u003c/li\u003e\n\u003cli\u003eNvChad\u003c/li\u003e\n\u003cli\u003eLunarVim\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2](/static/https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2)\n\nNew release out for nvim-manager that supports installing pre-configured distros.  It's such a breeze to install these now, its been fun to go through each of them.  The currently included distros are.\n\n* LazyVim\n* AstroVim\n* kickstart\n* NvChad\n* LunarVim\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/nvim-manager/releases/tag/v0.0.2",
      "date_published": "2025-01-08T17:11:34Z",
      "date_modified": "2025-01-08T17:11:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-512/",
      "url": "https://go.waylonwalker.com/thought-512/",
      "title": "💭 Releases · WaylonWalker/nvim-manager",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/nvim-manager/releases\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/288ea3d9a89631a1c891efaa01f6a0511d367d92e445d5a0b6036aab9c640567/WaylonWalker/nvim-manager\" alt=\"Releases · WaylonWalker/nvim-manager — manage dotfiles with nvim_appname. Contribute to WaylonWalker/nvim-manager development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: Releases · WaylonWalker/nvim-manager — manage dotfiles with nvim_appname. Contribute to WaylonWalker/nvim-manager development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReleases · WaylonWalker/nvim-manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003emanage dotfiles with nvim_appname. Contribute to WaylonWalker/nvim-manager development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFirst release of \u003ccode\u003envim-manager\u003c/code\u003e is out. Your dotfiles change a lot, sometimes it’s hard to manage all of the places you have installed them and potentially made hand edits to. nvim-manager allows you to easily make static releases of your dotfiles, and keep your nvim install from breaking by leveraging NVIM_APPNAME and pinned releases of your dotfiles stored in ~/.config. In this directory you might have many nvim configurations installed, nvim-manager automates the process of installing and updating from your dotfiles, while keeping previous pinned versions untouched.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/nvim-manager/releases\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/288ea3d9a89631a1c891efaa01f6a0511d367d92e445d5a0b6036aab9c640567/WaylonWalker/nvim-manager\" alt=\"Releases · WaylonWalker/nvim-manager — manage dotfiles with nvim_appname. Contribute to WaylonWalker/nvim-manager development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReleases · WaylonWalker/nvim-manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003emanage dotfiles with nvim_appname. Contribute to WaylonWalker/nvim-manager development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFirst release of `nvim-manager` is out. Your dotfiles change a lot, sometimes it's hard to manage all of the places you have installed them and potentially made hand edits to. nvim-manager allows you to easily make static releases of your dotfiles, and keep your nvim install from breaking by leveraging NVIM_APPNAME and pinned releases of your dotfiles stored in ~/.config. In this directory you might have many nvim configurations installed, nvim-manager automates the process of installing and updating from your dotfiles, while keeping previous pinned versions untouched.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/nvim-manager/releases",
      "date_published": "2025-01-08T03:09:30Z",
      "date_modified": "2025-01-08T03:09:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-511/",
      "url": "https://go.waylonwalker.com/thought-511/",
      "title": "💭 URL escape codes",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm\" alt=\"https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm\"/ data-glightbox=\"description: https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eNice list of url escape codes.  I did not actually know that to get a literal sequence like %2D you can use $2D.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm](/static/https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm)\n\nNice list of url escape codes.  I did not actually know that to get a literal sequence like %2D you can use $2D.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.microfocus.com/OMi/10.62/Content/OMi/ExtGuide/ExtApps/URL_encoding.htm",
      "date_published": "2025-01-07T02:03:16Z",
      "date_modified": "2025-01-07T02:03:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-510/",
      "url": "https://go.waylonwalker.com/thought-510/",
      "title": "💭 GitHub - ngalaiko/tree-sitter-go-template: Golang template gra...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ngalaiko/tree-sitter-go-template\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/bbafd277fb3fb79080f6eca6cc28d4f792c0fa16e0c37733d71d7bf120548386/ngalaiko/tree-sitter-go-template\" alt=\"GitHub - ngalaiko/tree-sitter-go-template: Golang template grammar for tree-sitter — Golang template grammar for tree-sitter. Contribute to ngalaiko/tree-sitter-go-template development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - ngalaiko/tree-sitter-go-template: Golang template grammar for tree-sitter — Golang template grammar for tree-sitter. Contribute to ngalaiko/tree-sitter-go-template development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - ngalaiko/tree-sitter-go-template: Golang template grammar for tree-sitter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGolang template grammar for tree-sitter. Contribute to ngalaiko/tree-sitter-go-template development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis setup fixed my nvim syntax highlighting in helm templates.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ngalaiko/tree-sitter-go-template\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/bbafd277fb3fb79080f6eca6cc28d4f792c0fa16e0c37733d71d7bf120548386/ngalaiko/tree-sitter-go-template\" alt=\"GitHub - ngalaiko/tree-sitter-go-template: Golang template grammar for tree-sitter — Golang template grammar for tree-sitter. Contribute to ngalaiko/tree-sitter-go-template development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - ngalaiko/tree-sitter-go-template: Golang template grammar for tree-sitter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGolang template grammar for tree-sitter. Contribute to ngalaiko/tree-sitter-go-template development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis setup fixed my nvim syntax highlighting in helm templates.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/ngalaiko/tree-sitter-go-template",
      "date_published": "2025-01-06T18:49:13Z",
      "date_modified": "2025-01-06T18:49:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "helm",
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-509/",
      "url": "https://go.waylonwalker.com/thought-509/",
      "title": "💭 imagegenius/docker-immich: Monolithic (Single) Docker Containe...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/imagegenius/docker-immich/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/fb67394d2b3130f918b4ce4d113ddf639bcc4d2b1c6c9fbce208b7cf7441d6ff/imagegenius/docker-immich\" alt=\"GitHub - imagegenius/docker-immich: Monolithic (Single) Docker Container for Immich — Monolithic (Single) Docker Container for Immich. Contribute to imagegenius/docker-immich development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - imagegenius/docker-immich: Monolithic (Single) Docker Container for Immich — Monolithic (Single) Docker Container for Immich. Contribute to imagegenius/docker-immich development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - imagegenius/docker-immich: Monolithic (Single) Docker Container for Immich\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMonolithic (Single) Docker Container for Immich. Contribute to imagegenius/docker-immich development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eimagegenius has made an immich all in one setup that looks much easier to use than immich.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/imagegenius/docker-immich/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/fb67394d2b3130f918b4ce4d113ddf639bcc4d2b1c6c9fbce208b7cf7441d6ff/imagegenius/docker-immich\" alt=\"GitHub - imagegenius/docker-immich: Monolithic (Single) Docker Container for Immich — Monolithic (Single) Docker Container for Immich. Contribute to imagegenius/docker-immich development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - imagegenius/docker-immich: Monolithic (Single) Docker Container for Immich\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMonolithic (Single) Docker Container for Immich. Contribute to imagegenius/docker-immich development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nimagegenius has made an immich all in one setup that looks much easier to use than immich.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/imagegenius/docker-immich/",
      "date_published": "2025-01-06T14:44:08Z",
      "date_modified": "2025-01-06T14:44:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "self-host",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-508/",
      "url": "https://go.waylonwalker.com/thought-508/",
      "title": "💭 Owning It · Matthias Ott",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://matthiasott.com/notes/owning-it\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://matthiasott.com//assets/pictures/_twitterimage/owning-it_2025-01-06-002955_syir.jpg\" alt=\"Owning It · Matthias Ott — Owning your content and platform means true independence on the web. Why it matters more than ever for creators.\" loading=\"lazy\"/ data-glightbox=\"description: Owning It · Matthias Ott — Owning your content and platform means true independence on the web. Why it matters more than ever for creators.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOwning It · Matthias Ott\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOwning your content and platform means true independence on the web. Why it matters more than ever for creators.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMatthias Ott – Web Design Engineer · matthiasott.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI can say I had the same kind of feelings when I first saw something called “Own Your Web” being run in Buttondown.  I totally get it.  It takes time and effort to build your own stuff, email sending is hard, not done right ends you in the spam folder.  There is something about the name though that I think needs to set an example and \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 host\u003c/a\u003e as much as it possibly can.\u003c/p\u003e\n\u003cp\u003eThe changelog has covered this several times, do they need to go to the crazy lengths they do to run their site, no probably not, but it keeps them in the loop.  They are using the tech they talk about in a very real and production critical way to run the show.\u003c/p\u003e\n\u003cp\u003eCant wait to see more from ownyourweb.site\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://matthiasott.com/notes/owning-it\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://matthiasott.com//assets/pictures/_twitterimage/owning-it_2025-01-06-002955_syir.jpg\" alt=\"Owning It · Matthias Ott — Owning your content and platform means true independence on the web. Why it matters more than ever for creators.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOwning It · Matthias Ott\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOwning your content and platform means true independence on the web. Why it matters more than ever for creators.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMatthias Ott – Web Design Engineer \u0026middot; matthiasott.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI can say I had the same kind of feelings when I first saw something called \"Own Your Web\" being run in Buttondown.  I totally get it.  It takes time and effort to build your own stuff, email sending is hard, not done right ends you in the spam folder.  There is something about the name though that I think needs to set an example and self host as much as it possibly can.  \n\nThe changelog has covered this several times, do they need to go to the crazy lengths they do to run their site, no probably not, but it keeps them in the loop.  They are using the tech they talk about in a very real and production critical way to run the show.\n\nCant wait to see more from ownyourweb.site\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://matthiasott.com/notes/owning-it",
      "date_published": "2025-01-06T13:23:23Z",
      "date_modified": "2025-01-06T13:23:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-507/",
      "url": "https://go.waylonwalker.com/thought-507/",
      "title": "💭 The weirdest controller I've ever used",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"OrucAJknMys\" title=\"The Weirdest controller I\u0026#39;ve ever Used.\" playlabel=\"Play: The Weirdest controller I\u0026#39;ve ever Used.\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGyroscope better than a mouse??  Nerd nest really sells how having two gyros in the way they have done for noise cancelling changes the game on it, and makes it a contender to replace a mouse.\u003c/p\u003e\n\u003cp\u003eIt really makes me want to try it.  I love how repairable this controller looks.  I’ve got to imagine that the fact that it comes as a kit, and all the parts are available that this hits S tier repairability.  My current controller of choice is a PS5 and I’ve had stick issues I wish I could fix.\u003c/p\u003e\n\u003cp\u003eNo analog triggers, I’m out.  Maybe they will make it an option in the future idk.  I don’t play shooters where I need a hair trigger, this won’t work on session or driving games.\u003c/p\u003e\n\u003cp\u003emicro usb, seriously, that kinda kills it for me too.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eedit\u003c/strong\u003e I looked on their website and they have usb c in the latest version\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"OrucAJknMys\" title=\"The Weirdest controller I\u0026#39;ve ever Used.\" playlabel=\"Play: The Weirdest controller I\u0026#39;ve ever Used.\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGyroscope better than a mouse??  Nerd nest really sells how having two gyros in the way they have done for noise cancelling changes the game on it, and makes it a contender to replace a mouse.\n\nIt really makes me want to try it.  I love how repairable this controller looks.  I've got to imagine that the fact that it comes as a kit, and all the parts are available that this hits S tier repairability.  My current controller of choice is a PS5 and I've had stick issues I wish I could fix.\n\nNo analog triggers, I'm out.  Maybe they will make it an option in the future idk.  I don't play shooters where I need a hair trigger, this won't work on session or driving games.\n\nmicro usb, seriously, that kinda kills it for me too.  \n\n**edit** I looked on their website and they have usb c in the latest version\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=OrucAJknMys",
      "date_published": "2025-01-04T17:07:40Z",
      "date_modified": "2025-01-04T17:07:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "game",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-506/",
      "url": "https://go.waylonwalker.com/thought-506/",
      "title": "💭 Postiz: The All-in-One Social Media Management Tool",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://postiz.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cms.postiz.com/wp-content/uploads/2024/06/OG-1-1024x538.png\" alt=\"Postiz: The All-in-One agentic social media scheduling tool — Streamline your social media with Postiz. Schedule posts, analyze performance, and manage all accounts in one place.\" loading=\"lazy\"/ data-glightbox=\"description: Postiz: The All-in-One agentic social media scheduling tool — Streamline your social media with Postiz. Schedule posts, analyze performance, and manage all accounts in one place.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePostiz: The All-in-One agentic social media scheduling tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStreamline your social media with Postiz. Schedule posts, analyze performance, and manage all accounts in one place.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePostiz · postiz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epostiz looks like a very polished way to automate and schedule posts to all the social services.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://postiz.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cms.postiz.com/wp-content/uploads/2024/06/OG-1-1024x538.png\" alt=\"Postiz: The All-in-One agentic social media scheduling tool — Streamline your social media with Postiz. Schedule posts, analyze performance, and manage all accounts in one place.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePostiz: The All-in-One agentic social media scheduling tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStreamline your social media with Postiz. Schedule posts, analyze performance, and manage all accounts in one place.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePostiz \u0026middot; postiz.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npostiz looks like a very polished way to automate and schedule posts to all the social services.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://postiz.com/",
      "date_published": "2025-01-04T15:39:27Z",
      "date_modified": "2025-01-04T15:39:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "social",
        "marketing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-505/",
      "url": "https://go.waylonwalker.com/thought-505/",
      "title": "💭 gitroomhq/postiz-helmchart: Helm for Postiz",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/gitroomhq/postiz-helmchart\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/31d2afed8816c39d3c96c166a9b66790610e86b994524ad0c48957223d9efeef/gitroomhq/postiz-helmchart\" alt=\"GitHub - gitroomhq/postiz-helmchart: Helm for Postiz — Helm for Postiz. Contribute to gitroomhq/postiz-helmchart development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - gitroomhq/postiz-helmchart: Helm for Postiz — Helm for Postiz. Contribute to gitroomhq/postiz-helmchart development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - gitroomhq/postiz-helmchart: Helm for Postiz\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHelm for Postiz. Contribute to gitroomhq/postiz-helmchart development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eReminder to myself, look into self hosting postiz with this helm chart later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/gitroomhq/postiz-helmchart\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/31d2afed8816c39d3c96c166a9b66790610e86b994524ad0c48957223d9efeef/gitroomhq/postiz-helmchart\" alt=\"GitHub - gitroomhq/postiz-helmchart: Helm for Postiz — Helm for Postiz. Contribute to gitroomhq/postiz-helmchart development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - gitroomhq/postiz-helmchart: Helm for Postiz\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHelm for Postiz. Contribute to gitroomhq/postiz-helmchart development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nReminder to myself, look into self hosting postiz with this helm chart later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/gitroomhq/postiz-helmchart",
      "date_published": "2025-01-04T15:36:10Z",
      "date_modified": "2025-01-04T15:36:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-503/",
      "url": "https://go.waylonwalker.com/thought-503/",
      "title": "💭 Realign – Chris Coyier",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/01/03/realign/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJ0eHQiOiJSZWFsaWduIiwidGVtcGxhdGUiOiJmdWxsc2NyZWVuIiwiYmxvZ19pZCI6NzQwNzQyNDh9.MbeAu1AeMezY52RJjFG9lceg8PN8Y3YjvU4J6PtSV3EMQ\" alt=\"Realign — I just popped out a realign of the ol’ personal website. I only say realign as I didn’t rethink every single detail of the thing. I’d say probably 40% of the original HTML and CSS…\" loading=\"lazy\"/ data-glightbox=\"description: Realign — I just popped out a realign of the ol’ personal website. I only say realign as I didn’t rethink every single detail of the thing. I’d say probably 40% of the original HTML and CSS…\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRealign\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI just popped out a realign of the ol’ personal website. I only say realign as I didn’t rethink every single detail of the thing. I’d say probably 40% of the original HTML and CSS…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier · chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eChris Coyier had a small re-align on his site, some good nuggets in here.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI like the idea of having a photo of myself prominently on the site, so you know who you’re dealing with here.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI really like this after thinking about it and I think I am going to make sure I get my face back on my posts.  I do have my 8bit style pixel art image of me that I use on social media, but no real picture.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI feel like a lot of people redesign their entire website when it’s time to update to the latest list of social networks and I’m no different. Once you touch it you gotta keep going.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can totally relate to this, once you open the thing, you get the build tools greased up, and your confidence high that re-deploying isn’t going to mess something up, I tend to start digging in to other things.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://chriscoyier.net/2025/01/03/realign/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jetpack.com/redirect/?source=sigenerate\u0026amp;query=t%3DeyJ0eHQiOiJSZWFsaWduIiwidGVtcGxhdGUiOiJmdWxsc2NyZWVuIiwiYmxvZ19pZCI6NzQwNzQyNDh9.MbeAu1AeMezY52RJjFG9lceg8PN8Y3YjvU4J6PtSV3EMQ\" alt=\"Realign — I just popped out a realign of the ol’ personal website. I only say realign as I didn’t rethink every single detail of the thing. I’d say probably 40% of the original HTML and CSS…\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRealign\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI just popped out a realign of the ol’ personal website. I only say realign as I didn’t rethink every single detail of the thing. I’d say probably 40% of the original HTML and CSS…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChris Coyier \u0026middot; chriscoyier.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nChris Coyier had a small re-align on his site, some good nuggets in here.\n\n\u003e I like the idea of having a photo of myself prominently on the site, so you know who you’re dealing with here.\n\nI really like this after thinking about it and I think I am going to make sure I get my face back on my posts.  I do have my 8bit style pixel art image of me that I use on social media, but no real picture.\n\n\u003e  I feel like a lot of people redesign their entire website when it’s time to update to the latest list of social networks and I’m no different. Once you touch it you gotta keep going.\n\nI can totally relate to this, once you open the thing, you get the build tools greased up, and your confidence high that re-deploying isn't going to mess something up, I tend to start digging in to other things.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://chriscoyier.net/2025/01/03/realign/",
      "date_published": "2025-01-04T14:25:02Z",
      "date_modified": "2025-01-04T14:25:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-502/",
      "url": "https://go.waylonwalker.com/thought-502/",
      "title": "💭 About Me – Harry Roberts – Web Performance Consultant",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://csswizardry.com/about/#section:colophon\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/csswizardry.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/csswizardry.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAbout Harry Roberts – Award-Winning Web Performance Consultant – CSS Wizardry\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecsswizardry.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve only recently learned what colophon means, and I really like to read through site that use it.  If you don’t know its about how the site is built.  I’ve always liked peeking under the hood of things to understand how they work, it’s what turned me towards an engineering degree.\u003c/p\u003e\n\u003cp\u003eI love how he mentions that he chose the name when he was 17 and he is stuck with it.  I particularly like the name, it has something special to it.  Hats off to you for doing something that has lasted so long for you.  I fully understand though, I have projects that I made a year ago that I think why did I name it that.  At the same time when I try to think of a name I end up with the I don’t have anything good and I’d rather build the thing so fuck it, its going to be what it is.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://csswizardry.com/about/#section:colophon\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAbout Harry Roberts – Award-Winning Web Performance Consultant – CSS Wizardry\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecsswizardry.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've only recently learned what colophon means, and I really like to read through site that use it.  If you don't know its about how the site is built.  I've always liked peeking under the hood of things to understand how they work, it's what turned me towards an engineering degree.\n\nI love how he mentions that he chose the name when he was 17 and he is stuck with it.  I particularly like the name, it has something special to it.  Hats off to you for doing something that has lasted so long for you.  I fully understand though, I have projects that I made a year ago that I think why did I name it that.  At the same time when I try to think of a name I end up with the I don't have anything good and I'd rather build the thing so fuck it, its going to be what it is.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://csswizardry.com/about/#section:colophon",
      "date_published": "2025-01-04T04:14:00Z",
      "date_modified": "2025-01-04T04:14:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-501/",
      "url": "https://go.waylonwalker.com/thought-501/",
      "title": "💭 Using Obsidian as a Gaming Backlog Library",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bryanhogan.com/blog/obsidian-gaming-backlog\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://bryanhogan.com/images/Bryan-Hogan-Preview.png\" alt=\"Using Obsidian as a Gaming Backlog Library — How to use Obsidian as a gaming backlog library. Get a long-lasting overview of games you want to and have played.\" loading=\"lazy\"/ data-glightbox=\"description: Using Obsidian as a Gaming Backlog Library — How to use Obsidian as a gaming backlog library. Get a long-lasting overview of games you want to and have played.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing Obsidian as a Gaming Backlog Library\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to use Obsidian as a gaming backlog library. Get a long-lasting overview of games you want to and have played.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBryan Hogan · bryanhogan.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eVery interesting way to catalog games, I need to make a catalog of mine, I’ll probably start adding some blog entries for games I’m in and have completed.  Wonder if there is a way to hook into steam with python to get achievements and progress live.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bryanhogan.com/blog/obsidian-gaming-backlog\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://bryanhogan.com/images/Bryan-Hogan-Preview.png\" alt=\"Using Obsidian as a Gaming Backlog Library — How to use Obsidian as a gaming backlog library. Get a long-lasting overview of games you want to and have played.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing Obsidian as a Gaming Backlog Library\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to use Obsidian as a gaming backlog library. Get a long-lasting overview of games you want to and have played.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBryan Hogan \u0026middot; bryanhogan.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nVery interesting way to catalog games, I need to make a catalog of mine, I'll probably start adding some blog entries for games I'm in and have completed.  Wonder if there is a way to hook into steam with python to get achievements and progress live.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bryanhogan.com/blog/obsidian-gaming-backlog",
      "date_published": "2025-01-03T22:59:05Z",
      "date_modified": "2025-01-03T22:59:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-500/",
      "url": "https://go.waylonwalker.com/thought-500/",
      "title": "💭 Harry Roberts: \"📡 I’ve been writing a lot lately. I’ve also du...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/csswizardry.com/post/3lckq4qo6zs22\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:52up7cndgdslkpxfrxb3kghh/bafkreiggbvzqgtieuxek4nfspovxuptd7762coyawrgmsx7c6fmscrvjru\" alt=\"Harry Roberts (@csswizardry.com) — 📡 I’ve been writing a lot lately. I’ve also dusted off my RSS reader. Send me your feeds! Mine is at csswizardry.com/feed.xml\nhttps://csswizardry.com/feed.xml\" loading=\"lazy\"/ data-glightbox=\"description: Harry Roberts (@csswizardry.com) — 📡 I’ve been writing a lot lately. I’ve also dusted off my RSS reader. Send me your feeds! Mine is at csswizardry.com/feed.xml\nhttps://csswizardry.com/feed.xml\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHarry Roberts (@csswizardry.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e📡 I’ve been writing a lot lately. I’ve also dusted off my RSS reader. Send me your feeds! Mine is at csswizardry.com/feed.xml\nhttps://csswizardry.com/feed.xml\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTons of cool people came out with their rss feeds here, again will need to browse more closely later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/csswizardry.com/post/3lckq4qo6zs22\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/avatar_thumbnail/plain/did:plc:52up7cndgdslkpxfrxb3kghh/bafkreiggbvzqgtieuxek4nfspovxuptd7762coyawrgmsx7c6fmscrvjru\" alt=\"Harry Roberts (@csswizardry.com) — 📡 I’ve been writing a lot lately. I’ve also dusted off my RSS reader. Send me your feeds! Mine is at csswizardry.com/feed.xml\nhttps://csswizardry.com/feed.xml\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHarry Roberts (@csswizardry.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e📡 I’ve been writing a lot lately. I’ve also dusted off my RSS reader. Send me your feeds! Mine is at csswizardry.com/feed.xml\nhttps://csswizardry.com/feed.xml\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTons of cool people came out with their rss feeds here, again will need to browse more closely later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/csswizardry.com/post/3lckq4qo6zs22",
      "date_published": "2025-01-03T22:56:44Z",
      "date_modified": "2025-01-03T22:56:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "rss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-499/",
      "url": "https://go.waylonwalker.com/thought-499/",
      "title": "💭 myRSS/personal-blogs.xml at master · sturobson/myRSS",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml\" alt=\"https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml\"/ data-glightbox=\"description: https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eSturobson has a ton of rss feeds here, I recognize quite a few, will definitely need to poke at some of these later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml](/static/https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml)\n\nSturobson has a ton of rss feeds here, I recognize quite a few, will definitely need to poke at some of these later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/sturobson/myRSS/blob/master/personal-blogs.xml",
      "date_published": "2025-01-03T22:54:32Z",
      "date_modified": "2025-01-03T22:54:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "rss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-497/",
      "url": "https://go.waylonwalker.com/thought-497/",
      "title": "💭 Own Your Web • Buttondown",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://buttondown.com/ownyourweb\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://assets.buttondown.email/images/349f6a10-bca3-4f68-9106-2fc7af674487.jpg\" alt=\"Own Your Web — Own Your Web is a newsletter by Matthias Ott about designing, building, creating, and publishing for and on the Web. Every other week, I send out an exclusive email full of actionable insights, best practices, hacks, links, books, tools, and other high-quality insights I found or explored. Whether you want to get started with your own personal website or level up as a designer, developer, or independent creator working with the ever-changing material of the Web, this little email is for you. ❤✊ Free. No spam ever. You can unsubscribe at any time. By signing up, you consent to my use of your email address to stay in touch with you, as provided in my Privacy Policy.\" loading=\"lazy\"/ data-glightbox=\"description: Own Your Web — Own Your Web is a newsletter by Matthias Ott about designing, building, creating, and publishing for and on the Web. Every other week, I send out an exclusive email full of actionable insights, best practices, hacks, links, books, tools, and other high-quality insights I found or explored. Whether you want to get started with your own personal website or level up as a designer, developer, or independent creator working with the ever-changing material of the Web, this little email is for you. ❤✊ Free. No spam ever. You can unsubscribe at any time. By signing up, you consent to my use of your email address to stay in touch with you, as provided in my Privacy Policy.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOwn Your Web\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOwn Your Web is a newsletter by Matthias Ott about designing, building, creating, and publishing for and on the Web. Every other week, I send out an exclusive email full of actionable insights, bes...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebuttondown.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m a sucker for good own your own shit on the web blogs, and Matthias Ott has a top notch one here.  The archive has been a great read so far, I’ve discovered things like slashpages.net.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://buttondown.com/ownyourweb\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://assets.buttondown.email/images/349f6a10-bca3-4f68-9106-2fc7af674487.jpg\" alt=\"Own Your Web — Own Your Web is a newsletter by Matthias Ott about designing, building, creating, and publishing for and on the Web. Every other week, I send out an exclusive email full of actionable insights, best practices, hacks, links, books, tools, and other high-quality insights I found or explored. Whether you want to get started with your own personal website or level up as a designer, developer, or independent creator working with the ever-changing material of the Web, this little email is for you. ❤✊ Free. No spam ever. You can unsubscribe at any time. By signing up, you consent to my use of your email address to stay in touch with you, as provided in my Privacy Policy.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOwn Your Web\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOwn Your Web is a newsletter by Matthias Ott about designing, building, creating, and publishing for and on the Web. Every other week, I send out an exclusive email full of actionable insights, bes...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebuttondown.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm a sucker for good own your own shit on the web blogs, and Matthias Ott has a top notch one here.  The archive has been a great read so far, I've discovered things like slashpages.net.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://buttondown.com/ownyourweb",
      "date_published": "2025-01-03T16:43:26Z",
      "date_modified": "2025-01-03T16:43:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-496/",
      "url": "https://go.waylonwalker.com/thought-496/",
      "title": "💭 Fork Around And Find Out | Remaining Authentic in Retirement w...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://share.transistor.fm/s/a9e41e15\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://img.transistorcdn.com/mHoxCHu62O4E-j5TFlNHwKgjmPh6nVKx-9HlNfwAYBg/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS8xMzk0/MmM3M2ExY2IwNTdh/MGM5MjdhMTMyN2Qw/OGU5Ny5wbmc.webp\" alt=\"Fork Around And Find Out | Remaining Authentic in Retirement with Kelsey Hightower — Retirement is about the journey, not the destination. For Kelsey Hightower, it’s been an epic journey. On our debut episode of the Fork Around and Find Out Podcast (and much to Autumn’s elation), Kelsey joins us to run down his illustrious career that spans a quarter of a century.Known for...\" loading=\"lazy\"/ data-glightbox=\"description: Fork Around And Find Out | Remaining Authentic in Retirement with Kelsey Hightower — Retirement is about the journey, not the destination. For Kelsey Hightower, it’s been an epic journey. On our debut episode of the Fork Around and Find Out Podcast (and much to Autumn’s elation), Kelsey joins us to run down his illustrious career that spans a quarter of a century.Known for...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFork Around And Find Out | Remaining Authentic in Retirement with Kelsey Hightower\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRetirement is about the journey, not the destination. For Kelsey Hightower, it’s been an epic journey. On our debut episode of the Fork Around and Find Out Podcast (and much to Autumn’s elation...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eshare.transistor.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat a great first guest for FAFO.  Kelsey is always such a great listen.  He talks about killedbygoogle and how engineers get no incentive to work on old projects, google had no incentive, and you got the thing for FREE in the first place.  He talks about end of career and having love you money, having so much in the bank you can say no.  If you are presented with a project that does not align with your values you can say no.M\u003c/p\u003e\n\u003cp\u003eJustin even mentions how Google has more killedbygoogle projects than Amazon has total projects.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf we knew how hard it would be, we would never build it.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAutumn’s Fav quote from ep1 of shipit\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://share.transistor.fm/s/a9e41e15\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://img.transistorcdn.com/mHoxCHu62O4E-j5TFlNHwKgjmPh6nVKx-9HlNfwAYBg/rs:fill:0:0:1/w:800/h:800/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS8xMzk0/MmM3M2ExY2IwNTdh/MGM5MjdhMTMyN2Qw/OGU5Ny5wbmc.webp\" alt=\"Fork Around And Find Out | Remaining Authentic in Retirement with Kelsey Hightower — Retirement is about the journey, not the destination. For Kelsey Hightower, it’s been an epic journey. On our debut episode of the Fork Around and Find Out Podcast (and much to Autumn’s elation), Kelsey joins us to run down his illustrious career that spans a quarter of a century.Known for...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFork Around And Find Out | Remaining Authentic in Retirement with Kelsey Hightower\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRetirement is about the journey, not the destination. For Kelsey Hightower, it’s been an epic journey. On our debut episode of the Fork Around and Find Out Podcast (and much to Autumn’s elation...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eshare.transistor.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWhat a great first guest for FAFO.  Kelsey is always such a great listen.  He talks about killedbygoogle and how engineers get no incentive to work on old projects, google had no incentive, and you got the thing for FREE in the first place.  He talks about end of career and having love you money, having so much in the bank you can say no.  If you are presented with a project that does not align with your values you can say no.M\n\nJustin even mentions how Google has more killedbygoogle projects than Amazon has total projects.\n\n\n\u003e If we knew how hard it would be, we would never build it.\n\nAutumn's Fav quote from ep1 of shipit\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://share.transistor.fm/s/a9e41e15",
      "date_published": "2025-01-03T16:39:51Z",
      "date_modified": "2025-01-03T16:39:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-495/",
      "url": "https://go.waylonwalker.com/thought-495/",
      "title": "💭 Changelog • Robb Knight",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://rknight.me/log/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://v1.screenshot.11ty.dev/https%3A%2F%2Frknight.me%2Fopengraph%2Flog%2F/opengraph/_14334\" alt=\"Changelog — Maker of web things, sticker merchant, viral toot-based business man, blogger, podcaster, and pizzaiolo. Human dad.\" loading=\"lazy\"/ data-glightbox=\"description: Changelog — Maker of web things, sticker merchant, viral toot-based business man, blogger, podcaster, and pizzaiolo. Human dad.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eChangelog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMaker of web things, sticker merchant, viral toot-based business man, blogger, podcaster, and pizzaiolo. Human dad.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003erknight.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWell done changelog with some really good inspirational nuggets.  Many slash pages I want to check out and an 11ty contribution graph.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://rknight.me/log/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://v1.screenshot.11ty.dev/https%3A%2F%2Frknight.me%2Fopengraph%2Flog%2F/opengraph/_14334\" alt=\"Changelog — Maker of web things, sticker merchant, viral toot-based business man, blogger, podcaster, and pizzaiolo. Human dad.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eChangelog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMaker of web things, sticker merchant, viral toot-based business man, blogger, podcaster, and pizzaiolo. Human dad.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003erknight.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWell done changelog with some really good inspirational nuggets.  Many slash pages I want to check out and an 11ty contribution graph.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://rknight.me/log/",
      "date_published": "2025-01-02T18:16:10Z",
      "date_modified": "2025-01-02T18:16:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-494/",
      "url": "https://go.waylonwalker.com/thought-494/",
      "title": "💭 slash pages",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://slashpages.net/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://slashpages.net/icons/preview.jpg\" alt=\"slash pages — A guide to common pages you can add to your website\" loading=\"lazy\"/ data-glightbox=\"description: slash pages — A guide to common pages you can add to your website\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eslash pages\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA guide to common pages you can add to your website\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eslashpages.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA nice list of slashpages you might want to consider including / aliasing / 301ing. These feel like nice things to setup and keep in the back pocket for obsidian style wiki link to easily.  I get kinda bad at wiki-linking as much as I would like to, mostly because it does require some amount of work to make the page, and keep it up to date over time, then remember that you even have it.\u003c/p\u003e\n\u003cp\u003eSome are serious, some very common, some quite useful.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/ba4edf27-03d4-49ff-ab4e-712e9ab8acda.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ba4edf27-03d4-49ff-ab4e-712e9ab8acda.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://slashpages.net/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://slashpages.net/icons/preview.jpg\" alt=\"slash pages — A guide to common pages you can add to your website\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eslash pages\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA guide to common pages you can add to your website\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eslashpages.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA nice list of slashpages you might want to consider including / aliasing / 301ing. These feel like nice things to setup and keep in the back pocket for obsidian style wiki link to easily.  I get kinda bad at wiki-linking as much as I would like to, mostly because it does require some amount of work to make the page, and keep it up to date over time, then remember that you even have it.\n\nSome are serious, some very common, some quite useful.\n\n![image](https://dropper.wayl.one/api/file/ba4edf27-03d4-49ff-ab4e-712e9ab8acda.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://slashpages.net/",
      "date_published": "2025-01-02T16:17:51Z",
      "date_modified": "2025-01-02T16:17:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-493/",
      "url": "https://go.waylonwalker.com/thought-493/",
      "title": "💭 We need to have a talk... - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"_VQl_HTk9PM\" title=\"Serverless: A Comprehensive Breakdown\" playlabel=\"Play: Serverless: A Comprehensive Breakdown\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTheo does a fantastic history of serverless here.\u003c/p\u003e\n\u003ch2 id=\"kubernetes-shit\"\u003eKubernetes shit \u003ca href=\"#kubernetes-shit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTheo can’t have an infra video without shitting on k8s.  Specifically people who have never touched k8s pushing fear of k8s to large audiences of people who have never touched k8s.  If you are a webdev who solely lives in webdev space and never touches as much as a dockerfile listen to him.  If you touch infra at all try it before you take his opinion at face value.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a84ec689-e84f-458a-b1d6-fec85b310023.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a84ec689-e84f-458a-b1d6-fec85b310023.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"serverless-shines-in-high-variance\"\u003eServerless shines in high variance \u003ca href=\"#serverless-shines-in-high-variance\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you plan on having traffic spikes 10x your regular traffic for something like black friday, serverless might be right for your use case.\u003c/p\u003e\n\u003ch2 id=\"stateless-programming\"\u003estateless programming \u003ca href=\"#stateless-programming\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHe argues that targeting a stateless deployment of serverless leads to better code.  I’d like to see more examples here.  Maybe most of the code bases I work on already do this.  I’ve never targeted a serverless deployment, but I’ve targeted horizontally scaled deployments many times and they feel like they have the same targets.  For instance if I spin up 8 pods for my application or uvicorn with 3 workers I have to target statelessness, all of the state must live in the database and cannot live in memory.  Even if I target 1 instance in a containerized environment I have to be ready for restarts at any point in time.\u003c/p\u003e\n\u003cp\u003eI might be missing something here, but I don’t see how this point applies to serverless.\u003c/p\u003e\n\u003ch2 id=\"scale-to-zero-services\"\u003eScale to Zero Services \u003ca href=\"#scale-to-zero-services\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a06523f8-35e1-46cf-83b8-fd6be0831d93.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a06523f8-35e1-46cf-83b8-fd6be0831d93.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=_VQl_HTk9PM\u0026amp;t=2607s\" 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\"\u003ehttps://www.youtube.com/watch?v=_VQl_HTk9PM\u0026amp;t=2607s\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eCompanies that can run on scale to zero can allow your shitty side projects that have no users run for free indefinitely because it costs them nothing.  He compares planetscale running mysql vs Turso running SQLite stored in s3.\u003c/p\u003e\n\u003ch2 id=\"everything-he-covers-is-really-cloud-to-cloud\"\u003eEverything he covers is really cloud to cloud \u003ca href=\"#everything-he-covers-is-really-cloud-to-cloud\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHe compares early deployments of LAMP and MEAN stack running on one server then jumps to serverless.  It feels like he is missing the angle of owning your own hardware.  This might just be the experience difference between theo and DHH.  DHH works on one focused company, Theo is jumping around between startups.\u003c/p\u003e\n\u003ch2 id=\"ok-i-get-some-of-it\"\u003eOk I get some of it \u003ca href=\"#ok-i-get-some-of-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAt the end he covers a dumb side project that has branch deploys.  It had a 100s of deploy still running, some very old, some never even touched, vercel can do this because it costs them nothing if its not running.  What I didn’t think about right away is that there is probably a backend component to this.\u003c/p\u003e\n\u003cp\u003eIn my python backends I often have deploy environments, but since they don’t scale to zero they have at least some cost even if its small, with this I cannot just keep hundreds of them running because that cost would add up.\u003c/p\u003e\n\u003cp\u003eI would argue that this is hardly useful, because you can checkout any old version and run it locally, and you rarely are going to need to poke through these old branch deploys.  But in that case that you need to quickly do this serverless is definitely superior.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"_VQl_HTk9PM\" title=\"Serverless: A Comprehensive Breakdown\" playlabel=\"Play: Serverless: A Comprehensive Breakdown\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTheo does a fantastic history of serverless here.\n\n## Kubernetes shit\n\nTheo can't have an infra video without shitting on k8s.  Specifically people who have never touched k8s pushing fear of k8s to large audiences of people who have never touched k8s.  If you are a webdev who solely lives in webdev space and never touches as much as a dockerfile listen to him.  If you touch infra at all try it before you take his opinion at face value.\n\n![image](https://dropper.wayl.one/api/file/a84ec689-e84f-458a-b1d6-fec85b310023.webp)\n\n## Serverless shines in high variance\n\nIf you plan on having traffic spikes 10x your regular traffic for something like black friday, serverless might be right for your use case.\n\n## stateless programming\n\nHe argues that targeting a stateless deployment of serverless leads to better code.  I'd like to see more examples here.  Maybe most of the code bases I work on already do this.  I've never targeted a serverless deployment, but I've targeted horizontally scaled deployments many times and they feel like they have the same targets.  For instance if I spin up 8 pods for my application or uvicorn with 3 workers I have to target statelessness, all of the state must live in the database and cannot live in memory.  Even if I target 1 instance in a containerized environment I have to be ready for restarts at any point in time.\n\nI might be missing something here, but I don't see how this point applies to serverless.\n\n## Scale to Zero Services\n\n![image](https://dropper.wayl.one/api/file/a06523f8-35e1-46cf-83b8-fd6be0831d93.webp)\n\nhttps://www.youtube.com/watch?v=_VQl_HTk9PM\u0026t=2607s\n\nCompanies that can run on scale to zero can allow your shitty side projects that have no users run for free indefinitely because it costs them nothing.  He compares planetscale running mysql vs Turso running SQLite stored in s3.\n\n## Everything he covers is really cloud to cloud\n\nHe compares early deployments of LAMP and MEAN stack running on one server then jumps to serverless.  It feels like he is missing the angle of owning your own hardware.  This might just be the experience difference between theo and DHH.  DHH works on one focused company, Theo is jumping around between startups.\n\n## Ok I get some of it\n\nAt the end he covers a dumb side project that has branch deploys.  It had a 100s of deploy still running, some very old, some never even touched, vercel can do this because it costs them nothing if its not running.  What I didn't think about right away is that there is probably a backend component to this.  \n\nIn my python backends I often have deploy environments, but since they don't scale to zero they have at least some cost even if its small, with this I cannot just keep hundreds of them running because that cost would add up.\n\nI would argue that this is hardly useful, because you can checkout any old version and run it locally, and you rarely are going to need to poke through these old branch deploys.  But in that case that you need to quickly do this serverless is definitely superior.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=_HTk9PM\u0026t=2607s",
      "date_published": "2025-01-02T03:04:14Z",
      "date_modified": "2025-01-02T03:04:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-492/",
      "url": "https://go.waylonwalker.com/thought-492/",
      "title": "💭 linkding | linkding",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://linkding.link/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elinkding\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA self-hosted bookmarking service that is designed to be minimal, fast and easy to set up.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elinkding · linkding.link\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003elinkding looks like an interesting alternative to thoughts.  Thoughts is focused on the note being a value add tweet length blog post that you share to the public.  This seems more focused on fire and forget with some note taking and search ability.  I should definitely level up the search and tag discovery in thoughts.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://linkding.link/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elinkding\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA self-hosted bookmarking service that is designed to be minimal, fast and easy to set up.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elinkding \u0026middot; linkding.link\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nlinkding looks like an interesting alternative to thoughts.  Thoughts is focused on the note being a value add tweet length blog post that you share to the public.  This seems more focused on fire and forget with some note taking and search ability.  I should definitely level up the search and tag discovery in thoughts.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://linkding.link/",
      "date_published": "2025-01-02T02:51:03Z",
      "date_modified": "2025-01-02T02:51:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-489/",
      "url": "https://go.waylonwalker.com/thought-489/",
      "title": "💭 Wrapping your favorite CLI in neovim - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"rerTvidyz-0\" title=\"Wrapping your favorite CLI in neovim\" playlabel=\"Play: Wrapping your favorite CLI in neovim\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003ecool video on expanding vim with cli.\u003c/p\u003e\n\u003ch2 id=\"piping-commands-into-vim\"\u003epiping commands into vim \u003ca href=\"#piping-commands-into-vim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/4283e98a-9b12-4f8a-9799-a097d5f3184d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/4283e98a-9b12-4f8a-9799-a097d5f3184d.webp\" alt=\"piping commands into vim\"/ data-glightbox=\"description: piping commands into vim\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"write-a-healthcheck\"\u003ewrite a healthcheck \u003ca href=\"#write-a-healthcheck\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/d90a8c88-4748-4dfe-8569-b51c023c825b.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/d90a8c88-4748-4dfe-8569-b51c023c825b.webp\" alt=\"write a healthcheck\"/ data-glightbox=\"description: write a healthcheck\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"rerTvidyz-0\" title=\"Wrapping your favorite CLI in neovim\" playlabel=\"Play: Wrapping your favorite CLI in neovim\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\ncool video on expanding vim with cli.\n\n\n## piping commands into vim\n\n![piping commands into vim](https://dropper.wayl.one/api/file/4283e98a-9b12-4f8a-9799-a097d5f3184d.webp)\n\n## write a healthcheck\n\n![write a healthcheck](https://dropper.wayl.one/api/file/d90a8c88-4748-4dfe-8569-b51c023c825b.webp)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=rerTvidyz-0\u0026t=160s",
      "date_published": "2024-12-31T21:02:44Z",
      "date_modified": "2024-12-31T21:02:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-488/",
      "url": "https://go.waylonwalker.com/thought-488/",
      "title": "💭 Why Your Backend Shouldn't Serve Files - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"aybSXT9ZJ8w\" title=\"Why Your Backend Shouldn\u0026#39;t Serve Files\" playlabel=\"Play: Why Your Backend Shouldn\u0026#39;t Serve Files\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eLane from boot.dev madde this fantastic video about serving files on the internet.  It has me wondering if I need to rethink a few of my things that I have built.  I have a few things I am serving media from, but I have very aggressive cloudflare cache rules on them, so each file should only be uploaded about once per year.\u003c/p\u003e\n\u003cp\u003eMy problem going straight out of minio right now is how do i set headers for cache control on it.  If I can’t set the cache control and everything is coming out of minio this does not solve my problems.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eI went back and played with presigned urls and you can in fact control and set response headers, this is definitely the way and I have been wrong.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"aybSXT9ZJ8w\" title=\"Why Your Backend Shouldn\u0026#39;t Serve Files\" playlabel=\"Play: Why Your Backend Shouldn\u0026#39;t Serve Files\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nLane from boot.dev madde this fantastic video about serving files on the internet.  It has me wondering if I need to rethink a few of my things that I have built.  I have a few things I am serving media from, but I have very aggressive cloudflare cache rules on them, so each file should only be uploaded about once per year.\n\nMy problem going straight out of minio right now is how do i set headers for cache control on it.  If I can't set the cache control and everything is coming out of minio this does not solve my problems.\n\n---\n\nI went back and played with presigned urls and you can in fact control and set response headers, this is definitely the way and I have been wrong.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=aybSXT9ZJ8w",
      "date_published": "2024-12-31T16:24:28Z",
      "date_modified": "2024-12-31T16:24:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-487/",
      "url": "https://go.waylonwalker.com/thought-487/",
      "title": "💭 curl with partial files | daniel.haxx.se",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.haxx.se/blog/2024/12/30/curl-with-partial-files/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://daniel.haxx.se/blog/wp-content/uploads/2021/04/curl-polynesia-puzzle.jpg\" alt=\"curl with partial files — Back in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful way when building curl command lines in ways not previously possible - with almost all existing command line options. curl command lines … Continue reading curl with partial files →\" loading=\"lazy\"/ data-glightbox=\"description: curl with partial files — Back in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful way when building curl command lines in ways not previously possible - with almost all existing command line options. curl command lines … Continue reading curl with partial files →\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecurl with partial files\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBack in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaniel.haxx.se · daniel.haxx.se\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a cool new feature coming to bash, I can’t think of a use case I have out of the gate, but it looks cool.  I’m thinking this might be good to keep in the back pocket for something like CI where I don’t have a hightly tuned bashrc file, and I want a dynamic curl request based on some state that exists as a fille.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.haxx.se/blog/2024/12/30/curl-with-partial-files/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://daniel.haxx.se/blog/wp-content/uploads/2021/04/curl-polynesia-puzzle.jpg\" alt=\"curl with partial files — Back in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful way when building curl command lines in ways not previously possible - with almost all existing command line options. curl command lines … Continue reading curl with partial files →\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecurl with partial files\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBack in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaniel.haxx.se \u0026middot; daniel.haxx.se\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a cool new feature coming to bash, I can't think of a use case I have out of the gate, but it looks cool.  I'm thinking this might be good to keep in the back pocket for something like CI where I don't have a hightly tuned bashrc file, and I want a dynamic curl request based on some state that exists as a fille.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daniel.haxx.se/blog/2024/12/30/curl-with-partial-files/",
      "date_published": "2024-12-30T21:29:52Z",
      "date_modified": "2024-12-30T21:29:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-486/",
      "url": "https://go.waylonwalker.com/thought-486/",
      "title": "💭 The beautiful sentence that is the web",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/web-dev-sentence/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/web-dev-sentence.png\" alt=\"The beautiful sentence that is the web — A metaphor for the building blocks of web development.\" loading=\"lazy\"/ data-glightbox=\"description: The beautiful sentence that is the web — A metaphor for the building blocks of web development.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe beautiful sentence that is the web\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA metaphor for the building blocks of web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNicely worded Cassidy!  Javascript can be too much, it can bog down low powered devices, we can ship so much that its untenable on poor connections.  It can be argued that its a bad language and putting it on the server is a mistake, but it brings sites to life.  It makes it possible to extend the static nature of \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/css with just a little special spice only your site needs.\u003c/p\u003e\n\u003cp\u003eI’d add to the argument that a lot of js should go away over time.  Over time libraries such as jquery have fallen out of use, not because they are bad, or have been replaced by new libraries, but because the browser has adopted most of the functionality that jquery brought.\u003c/p\u003e\n\u003cp\u003eAs a primarily python dev I’d really like to see \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e die a very similar graceful death.  There have been several iterations on this idea, and the crux of it is very similar, give the ability to use HTTP verbs right inside html with some instruction of when to apply them and what to apply them to.\u003c/p\u003e\n\u003cp\u003eNo js should not go away, it never will, we will always find new patterns that the browser should take, sites will always need a small bit of spice to bring them to life.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/web-dev-sentence/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/web-dev-sentence.png\" alt=\"The beautiful sentence that is the web — A metaphor for the building blocks of web development.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThe beautiful sentence that is the web\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA metaphor for the building blocks of web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNicely worded Cassidy!  Javascript can be too much, it can bog down low powered devices, we can ship so much that its untenable on poor connections.  It can be argued that its a bad language and putting it on the server is a mistake, but it brings sites to life.  It makes it possible to extend the static nature of html/css with just a little special spice only your site needs.\n\nI'd add to the argument that a lot of js should go away over time.  Over time libraries such as jquery have fallen out of use, not because they are bad, or have been replaced by new libraries, but because the browser has adopted most of the functionality that jquery brought.\n\nAs a primarily python dev I'd really like to see htmx die a very similar graceful death.  There have been several iterations on this idea, and the crux of it is very similar, give the ability to use HTTP verbs right inside html with some instruction of when to apply them and what to apply them to.\n\nNo js should not go away, it never will, we will always find new patterns that the browser should take, sites will always need a small bit of spice to bring them to life.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/web-dev-sentence/",
      "date_published": "2024-12-30T21:25:08Z",
      "date_modified": "2024-12-30T21:25:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-485/",
      "url": "https://go.waylonwalker.com/thought-485/",
      "title": "💭 Teleport to coop partner | Hypixel Forums",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hypixel.net/threads/teleport-to-coop-partner.2250505/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://hypixel.net/styles/hypixel-v2/images/hypixel-512px.png\" alt=\"Teleport to coop partner — Hello,\nIs there a command where you can teleport to your coop partner? Or is it just this Follow button in chat?  :)\" loading=\"lazy\"/ data-glightbox=\"description: Teleport to coop partner — Hello,\nIs there a command where you can teleport to your coop partner? Or is it just this Follow button in chat?  :)\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTeleport to coop partner\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHello,\nIs there a command where you can teleport to your coop partner? Or is it just this Follow button in chat?  :)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHypixel Forums · hypixel.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e/p warp will warp your party to your current server in hypixel skyblock\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a4f5be07-5f79-450c-a40d-1f48ac086e05.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a4f5be07-5f79-450c-a40d-1f48ac086e05.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hypixel.net/threads/teleport-to-coop-partner.2250505/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://hypixel.net/styles/hypixel-v2/images/hypixel-512px.png\" alt=\"Teleport to coop partner — Hello,\nIs there a command where you can teleport to your coop partner? Or is it just this Follow button in chat?  :)\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTeleport to coop partner\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHello,\nIs there a command where you can teleport to your coop partner? Or is it just this Follow button in chat?  :)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHypixel Forums \u0026middot; hypixel.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n/p warp will warp your party to your current server in hypixel skyblock\n\n![image](https://dropper.wayl.one/api/file/a4f5be07-5f79-450c-a40d-1f48ac086e05.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hypixel.net/threads/teleport-to-coop-partner.2250505/",
      "date_published": "2024-12-30T17:19:10Z",
      "date_modified": "2024-12-30T17:19:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "minecraft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-484/",
      "url": "https://go.waylonwalker.com/thought-484/",
      "title": "💭 How to configure base url for all requests using HTMX? - Stack...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/69456875/how-to-configure-base-url-for-all-requests-using-htmx\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned how to configure the baseurl for \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e using the \u003cbase/\u003e tag.  This is pretty handy to be able to configure different baseurls.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebase\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u0026lt;scheme\u0026gt;://\u0026lt;netloc\u0026gt;/api/v1/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-post\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;clicked\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"na\"\u003ehx-trigger\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;click\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"na\"\u003ehx-target\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#parent-div\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"na\"\u003ehx-swap\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;outerHTML\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Click Me!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/69456875/how-to-configure-base-url-for-all-requests-using-htmx\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned how to configure the baseurl for htmx using the \u003cbase\u003e tag.  This is pretty handy to be able to configure different baseurls.\n\n``` html\n  \u003cbase href=\"\u003cscheme\u003e://\u003cnetloc\u003e/api/v1/\"\u003e\n  \u003cbutton hx-post=\"clicked\"\n       hx-trigger=\"click\"\n       hx-target=\"#parent-div\"\n       hx-swap=\"outerHTML\"\u003e\n    Click Me!\n  \u003c/button\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/69456875/how-to-configure-base-url-for-all-requests-using-htmx",
      "date_published": "2024-12-30T16:25:49Z",
      "date_modified": "2024-12-30T16:25:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "htmx",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-482/",
      "url": "https://go.waylonwalker.com/thought-482/",
      "title": "💭 Addy Osmani: \"Tip: Chrome DevTools can override the content of...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/addyosmani.bsky.social/post/3lei5jhkgdk2k\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://video.bsky.app/watch/did%3Aplc%3Aympscj7qcsrcpj4qz35qhs3v/bafkreiapekc7qrtgki4efd36iftkvm57ejdnp5lkmlp6ifnlufver7dqum/thumbnail.jpg\" alt=\"Addy Osmani (@addyosmani.bsky.social) — Tip: Chrome DevTools can override the content of Fetch/XHR requests! Useful for mocking APIs without waiting on backend changes.\" loading=\"lazy\"/ data-glightbox=\"description: Addy Osmani (@addyosmani.bsky.social) — Tip: Chrome DevTools can override the content of Fetch/XHR requests! Useful for mocking APIs without waiting on backend changes.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAddy Osmani (@addyosmani.bsky.social)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTip: Chrome DevTools can override the content of Fetch/XHR requests! Useful for mocking APIs without waiting on backend changes.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWTF, you can just change a server response from devtools and update a vuejs app?  Just tried with \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e, and my GET requests are not showing up in the sources tab.  I’ll keep this in my back pocket for next time I’m supporting a vuejs app though.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/addyosmani.bsky.social/post/3lei5jhkgdk2k\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://video.bsky.app/watch/did%3Aplc%3Aympscj7qcsrcpj4qz35qhs3v/bafkreiapekc7qrtgki4efd36iftkvm57ejdnp5lkmlp6ifnlufver7dqum/thumbnail.jpg\" alt=\"Addy Osmani (@addyosmani.bsky.social) — Tip: Chrome DevTools can override the content of Fetch/XHR requests! Useful for mocking APIs without waiting on backend changes.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAddy Osmani (@addyosmani.bsky.social)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTip: Chrome DevTools can override the content of Fetch/XHR requests! Useful for mocking APIs without waiting on backend changes.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWTF, you can just change a server response from devtools and update a vuejs app?  Just tried with htmx, and my GET requests are not showing up in the sources tab.  I'll keep this in my back pocket for next time I'm supporting a vuejs app though.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/addyosmani.bsky.social/post/3lei5jhkgdk2k",
      "date_published": "2024-12-30T02:48:43Z",
      "date_modified": "2024-12-30T02:48:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-481/",
      "url": "https://go.waylonwalker.com/thought-481/",
      "title": "💭 Gary Vaynerchuk: \"2025 : the year of action … who’s finally re...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/garyvee.com/post/3leidcd6xjk2y\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:3g5dwh5bw3leulmrtfo4rlxm/bafkreig7nwdidlkbnyghjzmgfxr7bjjewepoodqywqvtykui4yfozt3i7m\" alt=\"Gary Vaynerchuk (@garyvee.com) — 2025 : the year of action … who’s finally ready ?\n\u0026lt;p\u0026gt;PS: text me for any follow up questions at 📱 1-212-931-5731\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;#2025 #todo #todolist #motivation #garyvee\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Gary Vaynerchuk (@garyvee.com) — 2025 : the year of action … who’s finally ready ?\n\u0026lt;p\u0026gt;PS: text me for any follow up questions at 📱 1-212-931-5731\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;#2025 #todo #todolist #motivation #garyvee\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eGary Vaynerchuk (@garyvee.com)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003e2025 : the year of action … who’s finally ready ?\u003cp\u003e\u003c/p\u003e\n\u003cp\u003ePS: text me for any follow up questions at 📱 1-212-931-5731\u003c/p\u003e\n\u003cp\u003e#2025 #todo #todolist #motivation #garyvee\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eGary Vee, is the goat.  leaving this image as a reminder for myself\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/074edddb-8b46-4d94-9b55-d70a7bb74366.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/074edddb-8b46-4d94-9b55-d70a7bb74366.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/garyvee.com/post/3leidcd6xjk2y\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:3g5dwh5bw3leulmrtfo4rlxm/bafkreig7nwdidlkbnyghjzmgfxr7bjjewepoodqywqvtykui4yfozt3i7m\" alt=\"Gary Vaynerchuk (@garyvee.com) — 2025 : the year of action … who’s finally ready ?\n\nPS: text me for any follow up questions at 📱 1-212-931-5731\n\n#2025 #todo #todolist #motivation #garyvee\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGary Vaynerchuk (@garyvee.com)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e2025 : the year of action … who’s finally ready ?\n\nPS: text me for any follow up questions at 📱 1-212-931-5731\n\n#2025 #todo #todolist #motivation #garyvee\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGary Vee, is the goat.  leaving this image as a reminder for myself\n\n![image](https://dropper.wayl.one/api/file/074edddb-8b46-4d94-9b55-d70a7bb74366.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/garyvee.com/post/3leidcd6xjk2y",
      "date_published": "2024-12-30T02:45:02Z",
      "date_modified": "2024-12-30T02:45:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "startup",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/atuinsh-atuin/",
      "url": "https://go.waylonwalker.com/atuinsh-atuin/",
      "title": "⭐ atuinsh atuin",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/atuinsh/atuin\" 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\"\u003eatuin\u003c/a\u003e by \u003ca href=\"https://github.com/atuinsh\" 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\"\u003eatuinsh\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e✨ Magical shell history\u003c/p\u003e\n",
      "content_text": "\nThe work on [atuin](https://github.com/atuinsh/atuin) by [atuinsh](https://github.com/atuinsh).\n\n✨ Magical shell history\n",
      "summary": "The work on atuin by atuinsh.",
      "date_published": "2024-12-28T23:18:51Z",
      "date_modified": "2024-12-28T23:18:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-475/",
      "url": "https://go.waylonwalker.com/thought-475/",
      "title": "💭 Ellie Huxtable: \"Atuin v18.4 is out now! Including `atuin wrap...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/ellie.wtf/post/3lecj36r5ps2x\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:6pz6ncxxtia36hrtbf24wzue/bafkreigfrzhv3ju3ynaugisqh5wc2qsharsqott5ru4i7tb53ha2fnerde\" alt=\"Ellie Huxtable (@ellie.wtf) — Atuin v18.4 is out now!\n\u0026lt;p\u0026gt;Including \u0026lt;code\u0026gt;atuin wrapped\u0026lt;/code\u0026gt;, your year in shell history 🐢\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;thanks @daveeddy.com for the suggestion!\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Ellie Huxtable (@ellie.wtf) — Atuin v18.4 is out now!\n\u0026lt;p\u0026gt;Including \u0026lt;code\u0026gt;atuin wrapped\u0026lt;/code\u0026gt;, your year in shell history 🐢\u0026lt;/p\u0026gt;\n\u0026lt;p\u0026gt;thanks @daveeddy.com for the suggestion!\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eEllie Huxtable (@ellie.wtf)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eAtuin v18.4 is out now!\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eIncluding \u003ccode\u003eatuin wrapped\u003c/code\u003e, your year in shell history 🐢\u003c/p\u003e\n\u003cp\u003ethanks @daveeddy.com for the suggestion!\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eBluesky Social · bsky.app\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eAtuin v18.4 is out with an atuin wrapped command.\u003c/p\u003e\n\u003cp\u003eHere’s Ellie’s Wrapped.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/246f2dc6-4e46-410c-9d25-fa6ccc85f8f2.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/246f2dc6-4e46-410c-9d25-fa6ccc85f8f2.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is a pretty sick command, I’ve only been using Atuin about as long as I’ve been on bazzite, so maybe 4 months, but here is my wrapped.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/434e1290-cf81-4ae5-abaf-34927006f3b6.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/434e1290-cf81-4ae5-abaf-34927006f3b6.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eComparing to Ellie, I’m surprised that I even have 126 package related commands, being on an immutable distro most of my packages come from the container, I don’t need to run packaging commands.  My cd is also super low, I use tmux sessions to take me where I need to be most of the time, which is a project’s root directory, It’s pretty rare to see me outside of a project root directory.\u003c/p\u003e\n\u003cp\u003eI’d venture to guess that nvim would be higher if it didn’t auto start on every tmux session as well.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bsky.app/profile/ellie.wtf/post/3lecj36r5ps2x\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:6pz6ncxxtia36hrtbf24wzue/bafkreigfrzhv3ju3ynaugisqh5wc2qsharsqott5ru4i7tb53ha2fnerde\" alt=\"Ellie Huxtable (@ellie.wtf) — Atuin v18.4 is out now!\n\nIncluding `atuin wrapped`, your year in shell history 🐢\n\nthanks @daveeddy.com for the suggestion!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eEllie Huxtable (@ellie.wtf)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAtuin v18.4 is out now!\n\nIncluding `atuin wrapped`, your year in shell history 🐢\n\nthanks @daveeddy.com for the suggestion!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBluesky Social \u0026middot; bsky.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAtuin v18.4 is out with an atuin wrapped command.\n\n\nHere's Ellie's Wrapped.\n\n![image](https://dropper.wayl.one/api/file/246f2dc6-4e46-410c-9d25-fa6ccc85f8f2.webp)\n\nThis is a pretty sick command, I've only been using Atuin about as long as I've been on bazzite, so maybe 4 months, but here is my wrapped.\n\n![image](https://dropper.wayl.one/api/file/434e1290-cf81-4ae5-abaf-34927006f3b6.webp)\n\nComparing to Ellie, I'm surprised that I even have 126 package related commands, being on an immutable distro most of my packages come from the container, I don't need to run packaging commands.  My cd is also super low, I use tmux sessions to take me where I need to be most of the time, which is a project's root directory, It's pretty rare to see me outside of a project root directory.\n\nI'd venture to guess that nvim would be higher if it didn't auto start on every tmux session as well.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bsky.app/profile/ellie.wtf/post/3lecj36r5ps2x",
      "date_published": "2024-12-28T06:29:12Z",
      "date_modified": "2024-12-28T06:29:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-474/",
      "url": "https://go.waylonwalker.com/thought-474/",
      "title": "💭 Hybrid Cloud Show – Episode 20 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"IXUtIXYjFDM\" title=\"Hybrid Cloud Show – Episode 20\" playlabel=\"Play: Hybrid Cloud Show – Episode 20\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eRed Hat has donated the whole open alternative to docker to the CNCF, the hosts weigh in with thier opinions all being pretty positive as they seem to be a legitimate donation and not dumping crap on open source.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003epodman\u003c/li\u003e\n\u003cli\u003epodman-desktop\u003c/li\u003e\n\u003cli\u003ebuildah\u003c/li\u003e\n\u003cli\u003ecompose-fs\u003c/li\u003e\n\u003cli\u003epodman\u003c/li\u003e\n\u003cli\u003ebootc\u003c/li\u003e\n\u003cli\u003escopio\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePersonally I’ve been running podman exclusively at home since switching to Bazzite in August.  I’d like to use buildah in ci. I gave it a try, but was unable to swap out my use of kaniko for buildah, I will get there, but it was not quite as drop in as I wanted.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"IXUtIXYjFDM\" title=\"Hybrid Cloud Show – Episode 20\" playlabel=\"Play: Hybrid Cloud Show – Episode 20\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nRed Hat has donated the whole open alternative to docker to the CNCF, the hosts weigh in with thier opinions all being pretty positive as they seem to be a legitimate donation and not dumping crap on open source.\n\n* podman\n* podman-desktop\n* buildah\n* compose-fs\n* podman\n* bootc\n* scopio\n\nPersonally I've been running podman exclusively at home since switching to Bazzite in August.  I'd like to use buildah in ci. I gave it a try, but was unable to swap out my use of kaniko for buildah, I will get there, but it was not quite as drop in as I wanted.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=IXUtIXYjFDM",
      "date_published": "2024-12-28T04:58:50Z",
      "date_modified": "2024-12-28T04:58:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-473/",
      "url": "https://go.waylonwalker.com/thought-473/",
      "title": "💭 are we cooked w/ o3? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"kjOxkPl3RGo\" title=\"are we cooked w/ o3?\" playlabel=\"Play: are we cooked w/ o3?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHoly shit these AGI models are incredibly expensive to run, require lots of wild hardware that there is not enough to go around, and requires shit tons of power to run.\u003c/p\u003e\n\u003cp\u003eNow more than ever is time to distinguish yourself with deep expertise, jack of all trades is being eaten by ai.  People with deep expertise are getting a jack of all trades bump from ai, not o3, just the regular stuff.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"kjOxkPl3RGo\" title=\"are we cooked w/ o3?\" playlabel=\"Play: are we cooked w/ o3?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHoly shit these AGI models are incredibly expensive to run, require lots of wild hardware that there is not enough to go around, and requires shit tons of power to run.\n\nNow more than ever is time to distinguish yourself with deep expertise, jack of all trades is being eaten by ai.  People with deep expertise are getting a jack of all trades bump from ai, not o3, just the regular stuff.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=kjOxkPl3RGo",
      "date_published": "2024-12-27T16:09:32Z",
      "date_modified": "2024-12-27T16:09:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-472/",
      "url": "https://go.waylonwalker.com/thought-472/",
      "title": "💭 Getting a Dev Job in 2025 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2PiM2e4RtTg\" title=\"Getting a Dev Job in 2025\" playlabel=\"Play: Getting a Dev Job in 2025\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTheo weighing in on the 2025 job market.  It’s no 2018 out there right now, the ratio of jobs to engineers in the market has flipped big time.  Theo as usual really focuses on community, being in a community, and being a good citizen.  At the end of the video Theo weighs in on his experience hiring, and generally it starts with we need someone to do x does anyone know someone, then goes to a more formal internal post, then more formally asking internally does anyone know someone, then maybe to his community, and if he really still needs the person it \u003cem\u003emight\u003c/em\u003e become an external post.  These days there are so many good engineers on the market that very few good jobs actually get a posting for in his opinion.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2PiM2e4RtTg\" title=\"Getting a Dev Job in 2025\" playlabel=\"Play: Getting a Dev Job in 2025\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTheo weighing in on the 2025 job market.  It's no 2018 out there right now, the ratio of jobs to engineers in the market has flipped big time.  Theo as usual really focuses on community, being in a community, and being a good citizen.  At the end of the video Theo weighs in on his experience hiring, and generally it starts with we need someone to do x does anyone know someone, then goes to a more formal internal post, then more formally asking internally does anyone know someone, then maybe to his community, and if he really still needs the person it _might_ become an external post.  These days there are so many good engineers on the market that very few good jobs actually get a posting for in his opinion.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=2PiM2e4RtTg",
      "date_published": "2024-12-27T02:53:55Z",
      "date_modified": "2024-12-27T02:53:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-471/",
      "url": "https://go.waylonwalker.com/thought-471/",
      "title": "💭 kitze 🚀 on X: \"holy fk I thought package.json was bad but TIL ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/thekitze/status/1872267874842063223?t=zxq6-kA9atVuXJeWntxfWg\u0026amp;s=09\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ekitze hating on  python packaging in new ways.  Python packaging has a lot of quirks that can make it infuriating.  Not once have I thought “you know what this needs, quotes and braces”\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/566ff44b-cace-474d-b1bc-62aaf42f419f.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/566ff44b-cace-474d-b1bc-62aaf42f419f.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/thekitze/status/1872267874842063223?t=zxq6-kA9atVuXJeWntxfWg\u0026amp;s=09\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nkitze hating on  python packaging in new ways.  Python packaging has a lot of quirks that can make it infuriating.  Not once have I thought \"you know what this needs, quotes and braces\"\n\n![image](https://dropper.wayl.one/api/file/566ff44b-cace-474d-b1bc-62aaf42f419f.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/thekitze/status/1872267874842063223?t=zxq6-kA9atVuXJeWntxfWg\u0026s=09",
      "date_published": "2024-12-27T02:51:27Z",
      "date_modified": "2024-12-27T02:51:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-470/",
      "url": "https://go.waylonwalker.com/thought-470/",
      "title": "💭 Custom Gridfinity Bins For ANYTHING! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"_TtkaIe0ZKU\" title=\"Custom Gridfinity Bins For ANYTHING!\" playlabel=\"Play: Custom Gridfinity Bins For ANYTHING!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis tip of using tinkercad to do boolean operations on an stl of a solid gridfinity bin and an outline is absolute fire 🔥🔥🔥.  This feels like a relatively simple operation, but to do it to a generated stl proves hard to do in most modeling software, at least harder than it needs to be.  Somehow tinkercad got it right and made it a very basic operation to do.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/36826ac6-9e38-4955-b622-4de86900c8b7.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/36826ac6-9e38-4955-b622-4de86900c8b7.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIt took me a minute to find the Merge button that Uncle Jessy mentioned, they call it a group in TinkerCAD.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a22fc486-d627-4e37-8d58-e963919bb8a0.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a22fc486-d627-4e37-8d58-e963919bb8a0.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"_TtkaIe0ZKU\" title=\"Custom Gridfinity Bins For ANYTHING!\" playlabel=\"Play: Custom Gridfinity Bins For ANYTHING!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis tip of using tinkercad to do boolean operations on an stl of a solid gridfinity bin and an outline is absolute fire 🔥🔥🔥.  This feels like a relatively simple operation, but to do it to a generated stl proves hard to do in most modeling software, at least harder than it needs to be.  Somehow tinkercad got it right and made it a very basic operation to do.\n\n![image](https://dropper.wayl.one/api/file/36826ac6-9e38-4955-b622-4de86900c8b7.webp)\n\nIt took me a minute to find the Merge button that Uncle Jessy mentioned, they call it a group in TinkerCAD.\n\n![image](https://dropper.wayl.one/api/file/a22fc486-d627-4e37-8d58-e963919bb8a0.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=_TtkaIe0ZKU\u0026t=409s",
      "date_published": "2024-12-26T19:02:29Z",
      "date_modified": "2024-12-26T19:02:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "stl",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-469/",
      "url": "https://go.waylonwalker.com/thought-469/",
      "title": "💭 Ubuntu Summit 2024 | UMU - A unified tool for easily running y...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"iuBzGked-JU\" title=\"Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam\" playlabel=\"Play: Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn Glorious Eggrolls is still making gaming on linux better.  Of course its containerization that drives everything on linux these days.  This is a pretty badass talk.  Umu is already running in steam and bazzite.  Bazzite gamemode uses this to get a gamescope session running.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"iuBzGked-JU\" title=\"Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam\" playlabel=\"Play: Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn Glorious Eggrolls is still making gaming on linux better.  Of course its containerization that drives everything on linux these days.  This is a pretty badass talk.  Umu is already running in steam and bazzite.  Bazzite gamemode uses this to get a gamescope session running.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=iuBzGked-JU\u0026t=559s",
      "date_published": "2024-12-26T16:47:13Z",
      "date_modified": "2024-12-26T16:47:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-468/",
      "url": "https://go.waylonwalker.com/thought-468/",
      "title": "💭 4 Tips for Building a Production-Ready FastAPI Backend - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"XlnmN4BfCxw\" title=\"How I Actually Build \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 Backends for Production\" playlabel=\"Play: How I Actually Build FastAPI Backends for Production\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat list of 4 tips for running fastapi applications.\u003c/p\u003e\n\u003ch2 id=\"keep-routes-small\"\u003eKeep routes small \u003ca href=\"#keep-routes-small\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFat routers with all of the logic built in makes them hard to test, hard to refactor, causes lots of duplication, and makes it hard to reuse the business logic code later in something like a cli application.\u003c/p\u003e\n\u003ch2 id=\"deploy-early\"\u003eDeploy Early \u003ca href=\"#deploy-early\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI really like this advice!  He reccommends deploying as early as you can get a healthcheck live in your application.  I’ve found too many times developers build something that is really hard, or impossible to deploy, when if they had tried to deploy early they would have spotted some easy to fix issues.  This is less important if you are building out of a template that your team commonly deploys from, but very important with new patterns.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://youtu.be/XlnmN4BfCxw?si=ks1wvmgDyoQLgrv2\u0026amp;t=1093\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/youtu.be.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/youtu.be.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://youtu.be/XlnmN4BfCxw?si=ks1wvmgDyoQLgrv2\u0026amp;t=1093\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"XlnmN4BfCxw\" title=\"How I Actually Build FastAPI Backends for Production\" playlabel=\"Play: How I Actually Build FastAPI Backends for Production\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat list of 4 tips for running fastapi applications.  \n\n## Keep routes small\n\nFat routers with all of the logic built in makes them hard to test, hard to refactor, causes lots of duplication, and makes it hard to reuse the business logic code later in something like a cli application.\n\n## Deploy Early\n\nI really like this advice!  He reccommends deploying as early as you can get a healthcheck live in your application.  I've found too many times developers build something that is really hard, or impossible to deploy, when if they had tried to deploy early they would have spotted some easy to fix issues.  This is less important if you are building out of a template that your team commonly deploys from, but very important with new patterns.\n\nhttps://youtu.be/XlnmN4BfCxw?si=ks1wvmgDyoQLgrv2\u0026t=1093\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=XlnmN4BfCxw",
      "date_published": "2024-12-26T02:42:17Z",
      "date_modified": "2024-12-26T02:42:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-467/",
      "url": "https://go.waylonwalker.com/thought-467/",
      "title": "💭 Building Python tools with a one-shot prompt using uv run and ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Dec/19/one-shot-python-tools/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.simonwillison.net/static/2024/s3-debug-social-media-card.jpg\" alt=\"Building Python tools with a one-shot prompt using uv run and Claude Projects — I’ve written a lot about how I’ve been using Claude to build one-shot HTML+JavaScript applications via Claude Artifacts. I recently started using a similar pattern to create one-shot Python utilities, …\" loading=\"lazy\"/ data-glightbox=\"description: Building Python tools with a one-shot prompt using uv run and Claude Projects — I’ve written a lot about how I’ve been using Claude to build one-shot HTML+JavaScript applications via Claude Artifacts. I recently started using a similar pattern to create one-shot Python utilities, …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBuilding Python tools with a one-shot prompt using uv run and Claude Projects\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’ve written a lot about how I’ve been using Claude to build one-shot HTML+JavaScript applications via Claude Artifacts. I recently started using a similar pattern to create one-shot Python uti...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is really interesting, the lazy uv scripts are really becoming quite appealing, especially for something like this to just pop out of an llm ready to run.  The article features several examples of these one-shot prompt ideas that I suggest you give a try, and a prompt for creating them.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Dec/19/one-shot-python-tools/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.simonwillison.net/static/2024/s3-debug-social-media-card.jpg\" alt=\"Building Python tools with a one-shot prompt using uv run and Claude Projects — I’ve written a lot about how I’ve been using Claude to build one-shot HTML+JavaScript applications via Claude Artifacts. I recently started using a similar pattern to create one-shot Python utilities, …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBuilding Python tools with a one-shot prompt using uv run and Claude Projects\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’ve written a lot about how I’ve been using Claude to build one-shot HTML+JavaScript applications via Claude Artifacts. I recently started using a similar pattern to create one-shot Python uti...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is really interesting, the lazy uv scripts are really becoming quite appealing, especially for something like this to just pop out of an llm ready to run.  The article features several examples of these one-shot prompt ideas that I suggest you give a try, and a prompt for creating them.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/Dec/19/one-shot-python-tools/",
      "date_published": "2024-12-25T02:26:31Z",
      "date_modified": "2024-12-25T02:26:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "uv",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-466/",
      "url": "https://go.waylonwalker.com/thought-466/",
      "title": "💭 Status | Depot",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://status.depot.dev/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/status.depot.dev.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/status.depot.dev.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDepot Status\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest service status for Depot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDepot Status · status.depot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDepot’s uptime seems to be great.  I definitely hit some issues with it this afternoon 12/24/24 that were not reported.  I wonder if my issues were with the fly integration.  Maybe fly ran out of credits to depot or something.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://status.depot.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDepot Status\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLatest service status for Depot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDepot Status \u0026middot; status.depot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDepot's uptime seems to be great.  I definitely hit some issues with it this afternoon 12/24/24 that were not reported.  I wonder if my issues were with the fly integration.  Maybe fly ran out of credits to depot or something.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://status.depot.dev/",
      "date_published": "2024-12-25T02:22:53Z",
      "date_modified": "2024-12-25T02:22:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "containers",
        "status",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-465/",
      "url": "https://go.waylonwalker.com/thought-465/",
      "title": "💭 Deploy to Fly using a Depot builder",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://depot.dev/blog/how-to-build-with-depot-on-fly\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://depot.dev/images/banner/depot-fly-builder-banner.png\" alt=\"Deploy to Fly using a Depot builder — Using Fly.io\u0026#39;s new Depot builder, we\u0026#39;ll walk you through how to deploy a TypeScript service globally with speed.\" loading=\"lazy\"/ data-glightbox=\"description: Deploy to Fly using a Depot builder — Using Fly.io\u0026#39;s new Depot builder, we\u0026#39;ll walk you through how to deploy a TypeScript service globally with speed.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeploy to Fly using a Depot builder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsing Fly.io\u0026#39;s new Depot builder, we\u0026#39;ll walk you through how to deploy a TypeScript service globally with speed.\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDepot · depot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHere the integration to depot appears to be opt in using the \u003ccode\u003e--depot\u003c/code\u003e flag on \u003ccode\u003efly deploy\u003c/code\u003e.  This must have changed over time though because today it was giving me issues and I had to opt out using \u003ccode\u003efly deploy --depot=\u0026#39;false\u0026#39;\u003c/code\u003e.  Looks like a great service and I just learned about them on their bad day.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://depot.dev/blog/how-to-build-with-depot-on-fly\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://depot.dev/images/banner/depot-fly-builder-banner.png\" alt=\"Deploy to Fly using a Depot builder — Using Fly.io\u0026#39;s new Depot builder, we\u0026#39;ll walk you through how to deploy a TypeScript service globally with speed.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeploy to Fly using a Depot builder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsing Fly.io\u0026#39;s new Depot builder, we\u0026#39;ll walk you through how to deploy a TypeScript service globally with speed.\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDepot \u0026middot; depot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHere the integration to depot appears to be opt in using the `--depot` flag on `fly deploy`.  This must have changed over time though because today it was giving me issues and I had to opt out using `fly deploy --depot='false'`.  Looks like a great service and I just learned about them on their bad day.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://depot.dev/blog/how-to-build-with-depot-on-fly",
      "date_published": "2024-12-25T02:20:08Z",
      "date_modified": "2024-12-25T02:20:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "containers",
        "fly",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-464/",
      "url": "https://go.waylonwalker.com/thought-464/",
      "title": "💭 Depot",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://depot.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://depot.dev/depot-social.png\" alt=\"Depot — Exponentially faster builds for everyone.\" loading=\"lazy\"/ data-glightbox=\"description: Depot — Exponentially faster builds for everyone.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDepot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eExponentially faster builds for everyone.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDepot · depot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJust learned about depot today ironically because it seems to be down and fly is using them under the hood to do the container builds, seems like a really great service for fast builds accross your team.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://depot.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://depot.dev/depot-social.png\" alt=\"Depot — Exponentially faster builds for everyone.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDepot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eExponentially faster builds for everyone.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDepot \u0026middot; depot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJust learned about depot today ironically because it seems to be down and fly is using them under the hood to do the container builds, seems like a really great service for fast builds accross your team.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://depot.dev/",
      "date_published": "2024-12-25T02:17:47Z",
      "date_modified": "2024-12-25T02:17:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-463/",
      "url": "https://go.waylonwalker.com/thought-463/",
      "title": "💭 Cursor + Windsurf Settings to 5x AI's Output Quality (Works wi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"aG-utUqVrb0\" title=\"Cursor + Windsurf Settings to 5x AI\u0026#39;s Output Quality (Works with VS Code too)\" playlabel=\"Play: Cursor + Windsurf Settings to 5x AI\u0026#39;s Output Quality (Works with VS Code too)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis was an eye opening video into agentic editing workflows.\u003c/p\u003e\n\u003ch2 id=\"setting-rules\"\u003esetting rules \u003ca href=\"#setting-rules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDfferent ai tools use different rules files, windsurf uses .windsurfrules.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/f75bf439-919f-4c19-8695-176ca8a7d52d.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/f75bf439-919f-4c19-8695-176ca8a7d52d.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"testing-out-rules\"\u003etesting out rules \u003ca href=\"#testing-out-rules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTest out your rules file by having it say something at the beginning of the output to verify that the rules are being applied correctly.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/ebeed79c-435b-4aab-b3dc-c744b144c438.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ebeed79c-435b-4aab-b3dc-c744b144c438.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"first-line\"\u003eFirst line \u003ca href=\"#first-line\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHe suggests to use this key rule for debugging purposes, otherwise you are guessing to what rules if any it is following.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEvery time you choose to apply a rule(s), explicitly state the rule(s) in the output.  You can abbreviate the rule description to a single word or phrase.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"aG-utUqVrb0\" title=\"Cursor + Windsurf Settings to 5x AI\u0026#39;s Output Quality (Works with VS Code too)\" playlabel=\"Play: Cursor + Windsurf Settings to 5x AI\u0026#39;s Output Quality (Works with VS Code too)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis was an eye opening video into agentic editing workflows.\n\n\n## setting rules\n\nDfferent ai tools use different rules files, windsurf uses .windsurfrules.\n\n![image](https://dropper.wayl.one/api/file/f75bf439-919f-4c19-8695-176ca8a7d52d.webp)\n\n## testing out rules\n\nTest out your rules file by having it say something at the beginning of the output to verify that the rules are being applied correctly.\n\n![image](https://dropper.wayl.one/api/file/ebeed79c-435b-4aab-b3dc-c744b144c438.webp)\n\n## First line\n\nHe suggests to use this key rule for debugging purposes, otherwise you are guessing to what rules if any it is following.\n\n``` txt\nEvery time you choose to apply a rule(s), explicitly state the rule(s) in the output.  You can abbreviate the rule description to a single word or phrase.\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=aG-utUqVrb0",
      "date_published": "2024-12-24T21:28:08Z",
      "date_modified": "2024-12-24T21:28:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-462/",
      "url": "https://go.waylonwalker.com/thought-462/",
      "title": "💭 Dedicated Servers | Intel Servers | AMD Servers - Dedicated Ho...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.reliablesite.net/dedicated-servers/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.reliablesite.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.reliablesite.net.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDedicated Servers | Intel Servers | AMD Servers - Dedicated Hosting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ereliablesite.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDax talked about this in a recent How about tomorrow podcast \u003ca href=\"https://thoughts.waylonwalker.com/post/461\" 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/post/461\u003c/a\u003e.  He is using it as his dev machine, he just ssh’s in and devs on it.  Feels like quite an interesting workflow, their prices seem competitive, but as a cheap ass homelabber I see their prices and think I could grab a used optiplex for the cost of a month or two of these and probably wouldn’t know the difference.  DAX mentions longer compile times so maybe he does notice.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.reliablesite.net/dedicated-servers/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDedicated Servers | Intel Servers | AMD Servers - Dedicated Hosting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ereliablesite.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDax talked about this in a recent How about tomorrow podcast https://thoughts.waylonwalker.com/post/461.  He is using it as his dev machine, he just ssh's in and devs on it.  Feels like quite an interesting workflow, their prices seem competitive, but as a cheap ass homelabber I see their prices and think I could grab a used optiplex for the cost of a month or two of these and probably wouldn't know the difference.  DAX mentions longer compile times so maybe he does notice.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reliablesite.net/dedicated-servers/",
      "date_published": "2024-12-24T20:29:13Z",
      "date_modified": "2024-12-24T20:29:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "server",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-461/",
      "url": "https://go.waylonwalker.com/thought-461/",
      "title": "💭 Talking with Typecraft - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qEykeKfAnJQ\" title=\"- YouTube\" playlabel=\"Play: - YouTube\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty great episode talking shop with typecraft.  They talk setups, cameras, content creation. I found them talking about their linux setups particularly interesting.  Dax talked about his flow from building his own machines to using reliablesite.com.\u003c/p\u003e\n\u003ch2 id=\"tmux-default-leader\"\u003etmux default leader \u003ca href=\"#tmux-default-leader\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDax hates on c-a, both typecraft and dax use c-s, which normally freezes a terminal, we can all agree that is useless.  I use the default c-b, it seems fine for me.\u003c/p\u003e\n\u003ch2 id=\"type-crafts-setup\"\u003etype crafts setup \u003ca href=\"#type-crafts-setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUbuntu\u003c/li\u003e\n\u003cli\u003eGhosty\u003c/li\u003e\n\u003cli\u003eTmux\u003c/li\u003e\n\u003cli\u003eNvim\u003c/li\u003e\n\u003cli\u003eRuby\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"selling-coffee-without-a-web-front-end\"\u003eSelling coffee without a web front end \u003ca href=\"#selling-coffee-without-a-web-front-end\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDax talks about terminal.shop and how they originally planned to have a web front end, but after they had so much success they stuck with it.  now they are leaning harder into it and are building out integrations with a bunch of languages and an api, but no front end.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"qEykeKfAnJQ\" title=\"- YouTube\" playlabel=\"Play: - YouTube\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a pretty great episode talking shop with typecraft.  They talk setups, cameras, content creation. I found them talking about their linux setups particularly interesting.  Dax talked about his flow from building his own machines to using reliablesite.com.\n\n## tmux default leader\n\nDax hates on c-a, both typecraft and dax use c-s, which normally freezes a terminal, we can all agree that is useless.  I use the default c-b, it seems fine for me.\n\n\n## type crafts setup\n\n* Ubuntu \n* Ghosty\n* Tmux\n* Nvim\n* Ruby\n\n## Selling coffee without a web front end\n\nDax talks about terminal.shop and how they originally planned to have a web front end, but after they had so much success they stuck with it.  now they are leaning harder into it and are building out integrations with a bunch of languages and an api, but no front end.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=qEykeKfAnJQ\u0026t=1068s",
      "date_published": "2024-12-24T20:24:42Z",
      "date_modified": "2024-12-24T20:24:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-460/",
      "url": "https://go.waylonwalker.com/thought-460/",
      "title": "💭 PEP 723 – Inline script metadata | peps.python.org",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://peps.python.org/pep-0723/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://peps.python.org/_static/og-image.png\" alt=\"PEP 723 – Inline script metadata | peps.python.org — This PEP specifies a metadata format that can be embedded in single-file Python scripts to assist launchers, IDEs and other external tools which may need to interact with such scripts.\" loading=\"lazy\"/ data-glightbox=\"description: PEP 723 – Inline script metadata | peps.python.org — This PEP specifies a metadata format that can be embedded in single-file Python scripts to assist launchers, IDEs and other external tools which may need to interact with such scripts.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePEP 723 – Inline script metadata | peps.python.org\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis PEP specifies a metadata format that can be embedded in single-file Python scripts to assist launchers, IDEs and other external tools which may need to interact with such scripts.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePython Enhancement Proposals (PEPs) · peps.python.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ePEP 723 is what is inspiring all of these lazy self installing python scripts, Authored by the author of hatch and pyapp.  This is a really cool thing that uv has picked up and made python packaging just a bit easier.. maybe… dependency resolution still sucks.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://peps.python.org/pep-0723/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://peps.python.org/_static/og-image.png\" alt=\"PEP 723 – Inline script metadata | peps.python.org — This PEP specifies a metadata format that can be embedded in single-file Python scripts to assist launchers, IDEs and other external tools which may need to interact with such scripts.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePEP 723 – Inline script metadata | peps.python.org\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis PEP specifies a metadata format that can be embedded in single-file Python scripts to assist launchers, IDEs and other external tools which may need to interact with such scripts.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePython Enhancement Proposals (PEPs) \u0026middot; peps.python.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nPEP 723 is what is inspiring all of these lazy self installing python scripts, Authored by the author of hatch and pyapp.  This is a really cool thing that uv has picked up and made python packaging just a bit easier.. maybe... dependency resolution still sucks.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://peps.python.org/pep-0723/",
      "date_published": "2024-12-24T15:53:29Z",
      "date_modified": "2024-12-24T15:53:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-459/",
      "url": "https://go.waylonwalker.com/thought-459/",
      "title": "💭 Switching from virtualenvwrapper to direnv, Starship, and uv",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://treyhunner.com/2024/10/switching-from-virtualenvwrapper-to-direnv-starship-and-uv/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.gravatar.com/avatar/93a988bd85040f58f8417dc4be78c7de?s=500\" alt=\"Switching from virtualenvwrapper to direnv, Starship, and uv — Earlier this week I considered whether I should finally switch away from virtualenvwrapper to using local .venv managed by direnv. I’ve never …\" loading=\"lazy\"/ data-glightbox=\"description: Switching from virtualenvwrapper to direnv, Starship, and uv — Earlier this week I considered whether I should finally switch away from virtualenvwrapper to using local .venv managed by direnv. I’ve never …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSwitching from virtualenvwrapper to direnv, Starship, and uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEarlier this week I considered whether I should finally switch away from virtualenvwrapper to using local .venv managed by direnv. I’ve never …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etreyhunner.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve kinda fallen out of using direnv now that a lot of my projects use hatch, I generally just hatch shell into them.  I just need to make sure I go through all of them and make my installer uv.  Now I’ve been thinking about making uv my only needed dependency to run a python project and leaning more to something like \u003ccode\u003euv run --with . uvicorn myapp --reload\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://treyhunner.com/2024/10/switching-from-virtualenvwrapper-to-direnv-starship-and-uv/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.gravatar.com/avatar/93a988bd85040f58f8417dc4be78c7de?s=500\" alt=\"Switching from virtualenvwrapper to direnv, Starship, and uv — Earlier this week I considered whether I should finally switch away from virtualenvwrapper to using local .venv managed by direnv. I’ve never …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSwitching from virtualenvwrapper to direnv, Starship, and uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEarlier this week I considered whether I should finally switch away from virtualenvwrapper to using local .venv managed by direnv. I’ve never …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etreyhunner.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've kinda fallen out of using direnv now that a lot of my projects use hatch, I generally just hatch shell into them.  I just need to make sure I go through all of them and make my installer uv.  Now I've been thinking about making uv my only needed dependency to run a python project and leaning more to something like `uv run --with . uvicorn myapp --reload`\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://treyhunner.com/2024/10/switching-from-virtualenvwrapper-to-direnv-starship-and-uv/",
      "date_published": "2024-12-24T03:30:57Z",
      "date_modified": "2024-12-24T03:30:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "uv",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-458/",
      "url": "https://go.waylonwalker.com/thought-458/",
      "title": "💭 Lazy self-installing Python scripts with uv",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.gravatar.com/avatar/93a988bd85040f58f8417dc4be78c7de?s=500\" alt=\"Lazy self-installing Python scripts with uv — I frequently find myself writing my own short command-line scripts in Python that help me with day-to-day tasks. It’s so easy to throw together …\" loading=\"lazy\"/ data-glightbox=\"description: Lazy self-installing Python scripts with uv — I frequently find myself writing my own short command-line scripts in Python that help me with day-to-day tasks. It’s so easy to throw together …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazy self-installing Python scripts with uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI frequently find myself writing my own short command-line scripts in Python that help me with day-to-day tasks. It’s so easy to throw together …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etreyhunner.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI really like Trey’s steps to making an executable python script with uv\u003c/p\u003e\n\u003cp\u003ehis old process seems to be the same with a new shebang\u003c/p\u003e\n\u003cblockquote\u003e\n\u003col\u003e\n\u003cli\u003eAdd an appropriate shebang line above the first line in the file (e.g. #!/usr/bin/env python3)\u003c/li\u003e\n\u003cli\u003eAet an executable bit on the file (chmod a+x my_script.py)\u003c/li\u003e\n\u003cli\u003ePlace the script in a directory that’s in my shell’s PATH variable (e.g. cp my_script.py ~/bin/my_script)\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAnd here is the new format the the shebang followed by the metadata comment block defined in PEP 723.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/usr/bin/env -S uv run --script\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\u003cspan class=\"c1\"\u003e# /// script\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# requires-python = \u0026#34;\u0026gt;=3.12\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# dependencies = [\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#     \u0026#34;ffmpeg-normalize\u0026#34;,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ///\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.gravatar.com/avatar/93a988bd85040f58f8417dc4be78c7de?s=500\" alt=\"Lazy self-installing Python scripts with uv — I frequently find myself writing my own short command-line scripts in Python that help me with day-to-day tasks. It’s so easy to throw together …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazy self-installing Python scripts with uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI frequently find myself writing my own short command-line scripts in Python that help me with day-to-day tasks. It’s so easy to throw together …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etreyhunner.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI really like Trey's steps to making an executable python script with uv\n\nhis old process seems to be the same with a new shebang\n\n\u003e 1. Add an appropriate shebang line above the first line in the file (e.g. #!/usr/bin/env python3)\n\u003e 2. Aet an executable bit on the file (chmod a+x my_script.py)\n\u003e 3. Place the script in a directory that’s in my shell’s PATH variable (e.g. cp my_script.py ~/bin/my_script)\n\n\nAnd here is the new format the the shebang followed by the metadata comment block defined in PEP 723.\n\n``` bash\n#!/usr/bin/env -S uv run --script\n# /// script\n# requires-python = \"\u003e=3.12\"\n# dependencies = [\n#     \"ffmpeg-normalize\",\n# ]\n# ///\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/",
      "date_published": "2024-12-24T03:20:33Z",
      "date_modified": "2024-12-24T03:20:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "uv",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-457/",
      "url": "https://go.waylonwalker.com/thought-457/",
      "title": "💭 My approach to running a link blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.simonwillison.net/static/2024/link-blog-card.jpg\" alt=\"My approach to running a link blog — I started running a basic link blog on this domain back in November 2003—publishing links (which I called “blogmarks”) with a title, URL, short snippet of commentary and a “via” …\" loading=\"lazy\"/ data-glightbox=\"description: My approach to running a link blog — I started running a basic link blog on this domain back in November 2003—publishing links (which I called “blogmarks”) with a title, URL, short snippet of commentary and a “via” …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMy approach to running a link blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI started running a basic link blog on this domain back in November 2003—publishing links (which I called “blogmarks”) with a title, URL, short snippet of commentary and a “via” …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI still cannot believe I thought I had such a unique idea with thoughts only to find out shortly thereafter that Simon beat me to the punch by about 20 years!\u003c/p\u003e\n\u003cp\u003eSimon put a lot of work into this [post](\u003ca href=\"https://simonwillison.net/2024/Dec/22/link-blog/\" 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\"\u003ehttps://simonwillison.net/2024/Dec/22/link-blog/\u003c/a\u003e\u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e.waylonwalker.com) please check it out.  Its not only filled with tons of little nuggets about blogging, it has just a ton of links to other posts I’m itching to read now.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://simonwillison.net/2024/Dec/22/link-blog/\" 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\"\u003ehttps://simonwillison.net/2024/Dec/22/link-blog/\u003c/a\u003e\u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e.waylonwalker.com\u003c/p\u003e\n\u003ch2 id=\"a-linkblog-proves-that-you-read\"\u003ea linkblog proves that you read \u003ca href=\"#a-linkblog-proves-that-you-read\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSimon mentions it in the post as well, but one thing about having a link blog does is that it proves that you actually read articles that you share.  This is really more about proving to myself, and reminding myself that anyone else, it’s a good feeling.\u003c/p\u003e\n\u003ch2 id=\"trying-to-add-soemthing-extra\"\u003eTrying to add soemthing extra \u003ca href=\"#trying-to-add-soemthing-extra\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003einclude names of people, and add tags for common people\u003c/li\u003e\n\u003cli\u003esomething extra - the whole point is to bring something to the post without stealing thunder, but rather linkbuilding for the author that put the hard work in.\u003c/li\u003e\n\u003cli\u003ecopious amounts of quotes\u003c/li\u003e\n\u003cli\u003eIt should bring the author up not put them down\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"a-post-a-day\"\u003eA post a day \u003ca href=\"#a-post-a-day\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ewell .98 posts per day\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eSimon mentions starting in Nov 2003, which puts that at 7722 days since then.  That is so close to a post a day for 21 years, even though they are often as short as one sentence that is impressive to keep up over time.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSo far I’ve published 7,607 link blog posts and counting.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"whats-my-rate\"\u003eWhat’s my rate \u003ca href=\"#whats-my-rate\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI just check and I am at 513 days in with 413 posts (0.8 posts/day).  Not quite up to Simon, but close enough to be proud of.  My only grief is that I didn’t start sooner.\u003c/p\u003e\n\u003ch2 id=\"my-stack\"\u003eMy stack \u003ca href=\"#my-stack\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have a full post explaining more about how I do mine and the stack behind it here.\u003c/p\u003e\n\u003cp\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\"\u003ehttps://waylonwalker.com/thoughts/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"see-images-are-hard\"\u003eSee Images \u003cstrong\u003eare\u003c/strong\u003e hard! \u003ca href=\"#see-images-are-hard\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is one of the main reasons that I built \u003ca href=\"https://dropper.wayl.one\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dropper.wayl.one.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dropper.wayl.one.ico\" class=\"has-avatar  has-avatar-before\"\u003edropper\u003c/a\u003e for myself, and plan to include it in \u003ca href=\"https://fokais.com\"\u003efokais\u003c/a\u003e as a product to help others with their blog.  This is definite evidence that I am not the only one with this issue!\u003c/p\u003e\n\u003ch2 id=\"ive-made-images-easy-form-myself\"\u003eI’ve made images easy form myself \u003ca href=\"#ive-made-images-easy-form-myself\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve tried half a dozen or so easy techniques from obsidian to various github repos and none have really hit me with inspiration to really add screenshots like I do with \u003ca href=\"https://dropper.wayl.one\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dropper.wayl.one.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dropper.wayl.one.ico\" class=\"has-avatar  has-avatar-before\"\u003edropper\u003c/a\u003e.  I write all of my thoughts posts in a chrome extension drop down local first style and when i hit paste it uploads and gives me a markdown image link, it cannot be easier for me.\u003c/p\u003e\n\u003cp\u003eWhen I store them I compress them and convert them to webp.  I serve them by streaming them out of an s3 bucket with \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 and some very generous cloudflare cache headers, so I should only get a request for that image about once a year.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWarning, I built dropper for me, no guarantees that it works forever, foakis will be for more users.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/2d54112d-b6c0-4f42-bbbb-eeb5fea133bd.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/2d54112d-b6c0-4f42-bbbb-eeb5fea133bd.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"bluesky-does-not-penalize-for-links\"\u003eBluesky does not penalize for links \u003ca href=\"#bluesky-does-not-penalize-for-links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI am loving bluesky more and more, learning this just gave it another level up.\u003c/p\u003e\n\u003chr/\u003e\n\u003ch2 id=\"series\"\u003eSeries \u003ca href=\"#series\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI just noticed that Simon has Series on his blog in a very elegant way.  One I need to get back to blogging more, I did not do so good in 2024, and two this is awesome and I want it.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dropper.wayl.one/api/file/ec59349e-cca7-4fa9-a57e-50cc442305db.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ec59349e-cca7-4fa9-a57e-50cc442305db.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003etest\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.simonwillison.net/static/2024/link-blog-card.jpg\" alt=\"My approach to running a link blog — I started running a basic link blog on this domain back in November 2003—publishing links (which I called “blogmarks”) with a title, URL, short snippet of commentary and a “via” …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMy approach to running a link blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI started running a basic link blog on this domain back in November 2003—publishing links (which I called “blogmarks”) with a title, URL, short snippet of commentary and a “via” …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI still cannot believe I thought I had such a unique idea with thoughts only to find out shortly thereafter that Simon beat me to the punch by about 20 years! \n\nSimon put a lot of work into this [post](https://simonwillison.net/2024/Dec/22/link-blog/\u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e.waylonwalker.com) please check it out.  Its not only filled with tons of little nuggets about blogging, it has just a ton of links to other posts I'm itching to read now.\n\nhttps://simonwillison.net/2024/Dec/22/link-blog/\u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e.waylonwalker.com\n\n## a linkblog proves that you read\n\nSimon mentions it in the post as well, but one thing about having a link blog does is that it proves that you actually read articles that you share.  This is really more about proving to myself, and reminding myself that anyone else, it's a good feeling.\n\n## Trying to add soemthing extra\n\n* include names of people, and add tags for common people\n* something extra - the whole point is to bring something to the post without stealing thunder, but rather linkbuilding for the author that put the hard work in.\n* copious amounts of quotes\n* It should bring the author up not put them down\n\n## A post a day\n\n_well .98 posts per day_\n\nSimon mentions starting in Nov 2003, which puts that at 7722 days since then.  That is so close to a post a day for 21 years, even though they are often as short as one sentence that is impressive to keep up over time.\n\n\u003e So far I’ve published 7,607 link blog posts and counting.\n\n## What's my rate\n\nI just check and I am at 513 days in with 413 posts (0.8 posts/day).  Not quite up to Simon, but close enough to be proud of.  My only grief is that I didn't start sooner.\n\n## My stack\n\nI have a full post explaining more about how I do mine and the stack behind it here.\n\nhttps://waylonwalker.com/thoughts/\n\n## See Images **are** hard!\n\nThis is one of the main reasons that I built [dropper](https://dropper.wayl.one) for myself, and plan to include it in [fokais](https://fokais.com) as a product to help others with their blog.  This is definite evidence that I am not the only one with this issue!\n\n## I've made images easy form myself\n\nI've tried half a dozen or so easy techniques from obsidian to various github repos and none have really hit me with inspiration to really add screenshots like I do with [dropper](https://dropper.wayl.one).  I write all of my thoughts posts in a chrome extension drop down local first style and when i hit paste it uploads and gives me a markdown image link, it cannot be easier for me. \n\nWhen I store them I compress them and convert them to webp.  I serve them by streaming them out of an s3 bucket with fastapi and some very generous cloudflare cache headers, so I should only get a request for that image about once a year.\n\n\u003e Warning, I built dropper for me, no guarantees that it works forever, foakis will be for more users.\n\n![image](https://dropper.wayl.one/api/file/2d54112d-b6c0-4f42-bbbb-eeb5fea133bd.webp)\n\n## Bluesky does not penalize for links\n\nI am loving bluesky more and more, learning this just gave it another level up.\n\n\n---\n\n## Series\n\nI just noticed that Simon has Series on his blog in a very elegant way.  One I need to get back to blogging more, I did not do so good in 2024, and two this is awesome and I want it.\n\n![image](https://dropper.wayl.one/api/file/ec59349e-cca7-4fa9-a57e-50cc442305db.webp)test\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything",
      "date_published": "2024-12-23T01:47:47Z",
      "date_modified": "2024-12-23T01:47:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-456/",
      "url": "https://go.waylonwalker.com/thought-456/",
      "title": "💭 How I use Obsidian Templater",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/455\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/455\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"How I use Obsidian Templater\n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;This is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is rea...\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;How I use Obsidian Templater\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\" embed-card-description glightbox\"=\"\"/ data-glightbox=\"description: How I use Obsidian Templater\n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;This is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is rea...\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;How I use Obsidian Templater\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\"\u003e\n\u003cpre\u003e\u003ccode\u003eThis is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is rea...\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/a\u003e\u003c/div\u003e\u003ca href=\"https://thoughts.waylonwalker.com/post/455\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" 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\"\u003e\n  \u003c/a\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/455\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/455\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"How I use Obsidian Templater\n — \n  \n    This is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is rea...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  How I use Obsidian Templater\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\n  \n    This is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is rea...\n  \n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOk, second post on this one.  I am sending only head requests, so I want to see the first request for the image, which happens in the chrome extension after pressing submit.  It will not yet come from cloudflare so I am interested in what it looks like just streaming out of object sorage.  This time I have the inspector open on the tab.\n\n---\n\nAs expected I got a cloudflare cache miss on first hit.\n\n![image](https://dropper.wayl.one/api/file/a9fdbb56-ce1b-42cd-9598-81c36eb758e2.webp)\n\nBut the overall performance of 351ms to get the image was not bad considering it takes several seconds to get the image fresh.\n\n![image](https://dropper.wayl.one/api/file/fa623194-aa14-4fdb-a5ac-2a39beafbf1e.webp)\n\n---\n\nNow closing the chrome extension popup, and hitting the main thoughts page again gives me a cache hit from Cloudflare's CDN.\n\n![image](https://dropper.wayl.one/api/file/861880a5-4f2d-47e7-b19f-f4e8eaa34139.webp)\n\nAnd the total request time goes from 351ms to 21ms with the Cloudflare CDN, quite impressive!\n\n![image](https://dropper.wayl.one/api/file/f8927bab-a63b-453f-aaad-d6af68f5e6c0.webp)\n\n---\n\nSorry with how meta these last two posts were, I needed a second post to get that fresh request graph from.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://thoughts.waylonwalker.com/post/455",
      "date_published": "2024-12-22T17:12:50Z",
      "date_modified": "2024-12-22T17:12:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meta",
        "thoughts",
        "shots",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-455/",
      "url": "https://go.waylonwalker.com/thought-455/",
      "title": "💭 How I use Obsidian Templater",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/454\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/454\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"How I use Obsidian Templater\n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;I really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not....\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;How I use Obsidian Templater\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\" embed-card-description glightbox\"=\"\"/ data-glightbox=\"description: How I use Obsidian Templater\n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;I really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not....\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;How I use Obsidian Templater\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\"\u003e\n\u003cpre\u003e\u003ccode\u003eI really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not....\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/a\u003e\u003c/div\u003e\u003ca href=\"https://thoughts.waylonwalker.com/post/454\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" 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\"\u003e\n  \u003c/a\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/454\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/454\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"How I use Obsidian Templater\n — \n  \n    I really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not....\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  How I use Obsidian Templater\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\n  \n    I really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not....\n  \n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a test post.  I just updated the chrome extension for thoughts to take a the thumbnail image on open of the chrome extension so that it is ready when i publish it. let's see what happens.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://thoughts.waylonwalker.com/post/454",
      "date_published": "2024-12-22T17:08:32Z",
      "date_modified": "2024-12-22T17:08:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meta",
        "thoughts",
        "shots",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-454/",
      "url": "https://go.waylonwalker.com/thought-454/",
      "title": "💭 How I use Obsidian Templater",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/obsidian-templater/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/obsidian-templater.png\" alt=\"How I use Obsidian Templater — One of my favorite Obsidian plugins is Templater, which lets you create reusable templates in your notes vault!\" loading=\"lazy\"/ data-glightbox=\"description: How I use Obsidian Templater — One of my favorite Obsidian plugins is Templater, which lets you create reusable templates in your notes vault!\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow I use Obsidian Templater\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOne of my favorite Obsidian plugins is Templater, which lets you create reusable templates in your notes vault!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not.  I’m imagining the graph you can build, it feels quite interesting.  Even more relevant as we see things like teams rolling out retention limits to messages.\u003c/p\u003e\n\u003cp\u003eHere is Cassidy’s format, I like it but I’m probably not going to track the birthday of most people I work with, thats just not the relationship I tend to have with work friends.  It might be a midwest or non tech thing, but I am not even aware if any of my co-workers have social media, and I assume that if they did it would not include anything work related but more football and other sports.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/32859bd6-1b9f-4d40-a87c-0b96a5a42084.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/32859bd6-1b9f-4d40-a87c-0b96a5a42084.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/obsidian-templater/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/obsidian-templater.png\" alt=\"How I use Obsidian Templater — One of my favorite Obsidian plugins is Templater, which lets you create reusable templates in your notes vault!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow I use Obsidian Templater\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOne of my favorite Obsidian plugins is Templater, which lets you create reusable templates in your notes vault!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI really like this idea of keeping a set up contacts in a markdown repo, and being able to wikilink them to different tickets / meetings and what not.  I'm imagining the graph you can build, it feels quite interesting.  Even more relevant as we see things like teams rolling out retention limits to messages.\n\n\nHere is Cassidy's format, I like it but I'm probably not going to track the birthday of most people I work with, thats just not the relationship I tend to have with work friends.  It might be a midwest or non tech thing, but I am not even aware if any of my co-workers have social media, and I assume that if they did it would not include anything work related but more football and other sports.\n\n![image](https://dropper.wayl.one/api/file/32859bd6-1b9f-4d40-a87c-0b96a5a42084.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/obsidian-templater/",
      "date_published": "2024-12-22T16:53:28Z",
      "date_modified": "2024-12-22T16:53:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meta",
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-453/",
      "url": "https://go.waylonwalker.com/thought-453/",
      "title": "💭 docker context (and an issue to question your sanity) | Pype.dev",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/docker-context-and-an-issue-to-question-your-sanity\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"docker context (and an issue to question your sanity) | Nic Payne — docker contexts are great, would recommend putting them in your prompt though (via starship or something else)... here\u0026#39;s why I like to manage my containers\" loading=\"lazy\"/ data-glightbox=\"description: docker context (and an issue to question your sanity) | Nic Payne — docker contexts are great, would recommend putting them in your prompt though (via starship or something else)... here\u0026#39;s why I like to manage my containers\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003edocker context (and an issue to question your sanity) | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003edocker contexts are great, would recommend putting them in your prompt though (via starship or something else)... here\u0026#39;s why I like to manage my containers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDang context can really cause you to pull your hair out.  Context seems so freaking convenient, but I’ve avoided it and just ssh in for these reasons.  Maybe I’ll come around eventually but for now ssh is my friend.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/docker-context-and-an-issue-to-question-your-sanity\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"docker context (and an issue to question your sanity) | Nic Payne — docker contexts are great, would recommend putting them in your prompt though (via starship or something else)... here\u0026#39;s why I like to manage my containers\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003edocker context (and an issue to question your sanity) | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003edocker contexts are great, would recommend putting them in your prompt though (via starship or something else)... here\u0026#39;s why I like to manage my containers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDang context can really cause you to pull your hair out.  Context seems so freaking convenient, but I've avoided it and just ssh in for these reasons.  Maybe I'll come around eventually but for now ssh is my friend.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/docker-context-and-an-issue-to-question-your-sanity",
      "date_published": "2024-12-19T17:56:46Z",
      "date_modified": "2024-12-19T17:56:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ynqa-jnv/",
      "url": "https://go.waylonwalker.com/ynqa-jnv/",
      "title": "⭐ ynqa jnv",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/ynqa/jnv\" 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\"\u003ejnv\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/ynqa\" 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\"\u003eynqa\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eInteractive JSON filter using jq\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [jnv](https://github.com/ynqa/jnv), an amazing project by [ynqa](https://github.com/ynqa). It's worth exploring!\n\nInteractive JSON filter using jq\n",
      "summary": "I'm really excited about jnv, an amazing project by ynqa. It's worth exploring!",
      "date_published": "2024-12-18T18:17:13Z",
      "date_modified": "2024-12-18T18:17:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zatfer17-tui-network/",
      "url": "https://go.waylonwalker.com/zatfer17-tui-network/",
      "title": "⭐ Zatfer17 tui-network",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Zatfer17/tui-network\" 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\"\u003etui-network\u003c/a\u003e by \u003ca href=\"https://github.com/Zatfer17\" 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\"\u003eZatfer17\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[tui-network](https://github.com/Zatfer17/tui-network) by [Zatfer17](https://github.com/Zatfer17) is a game-changer in its space. Excited to see how it evolves.\n\nNo description available.\n",
      "summary": "tui-network by Zatfer17 is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-12-18T18:16:54Z",
      "date_modified": "2024-12-18T18:16:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/microsoft-markitdown/",
      "url": "https://go.waylonwalker.com/microsoft-markitdown/",
      "title": "⭐ microsoft markitdown",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/microsoft/markitdown\" 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\"\u003emarkitdown\u003c/a\u003e from \u003ca href=\"https://github.com/microsoft\" 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\"\u003emicrosoft\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003ePython tool for converting files and office documents to Markdown.\u003c/p\u003e\n",
      "content_text": "\nI came across [markitdown](https://github.com/microsoft/markitdown) from [microsoft](https://github.com/microsoft), and it's packed with great features and ideas.\n\nPython tool for converting files and office documents to Markdown.\n",
      "summary": "I came across markitdown from microsoft, and it's packed with great features and ideas.",
      "date_published": "2024-12-18T18:15:16Z",
      "date_modified": "2024-12-18T18:15:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/github-gh-skyline/",
      "url": "https://go.waylonwalker.com/github-gh-skyline/",
      "title": "⭐ github gh-skyline",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/github/gh-skyline\" 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\"\u003egh-skyline\u003c/a\u003e by \u003ca href=\"https://github.com/github\" 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\"\u003egithub\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA GitHub CLI extension to generate a 3D model of your GitHub contribution history\u003c/p\u003e\n",
      "content_text": "\n[gh-skyline](https://github.com/github/gh-skyline) by [github](https://github.com/github) is a game-changer in its space. Excited to see how it evolves.\n\nA GitHub CLI extension to generate a 3D model of your GitHub contribution history\n",
      "summary": "gh-skyline by github is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-12-18T18:13:52Z",
      "date_modified": "2024-12-18T18:13:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/outerbase-studio/",
      "url": "https://go.waylonwalker.com/outerbase-studio/",
      "title": "⭐ outerbase studio",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/outerbase/studio\" 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\"\u003estudio\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/outerbase\" 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\"\u003eouterbase\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA lightweight Database GUI in your browser. It supports connecting to Postgres, MySQL, and SQLite.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [studio](https://github.com/outerbase/studio), an amazing project by [outerbase](https://github.com/outerbase). It's worth exploring!\n\nA lightweight Database GUI in your browser. It supports connecting to Postgres, MySQL, and SQLite.\n",
      "summary": "I'm really excited about studio, an amazing project by outerbase. It's worth exploring!",
      "date_published": "2024-12-18T18:12:41Z",
      "date_modified": "2024-12-18T18:12:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cassidoo-blahg/",
      "url": "https://go.waylonwalker.com/cassidoo-blahg/",
      "title": "⭐ cassidoo blahg",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/cassidoo/blahg\" 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\"\u003eblahg\u003c/a\u003e, created by \u003ca href=\"https://github.com/cassidoo\" 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\"\u003ecassidoo\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCassidy’s blog template built with Astro and TinaCMS!\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [blahg](https://github.com/cassidoo/blahg), created by [cassidoo](https://github.com/cassidoo).\n\nCassidy's blog template built with Astro and TinaCMS!\n",
      "summary": "If you're into interesting projects, don't miss out on blahg, created by cassidoo.",
      "date_published": "2024-12-18T13:10:46Z",
      "date_modified": "2024-12-18T13:10:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-451/",
      "url": "https://go.waylonwalker.com/thought-451/",
      "title": "💭 Styling better custom inputs with Dave Rupert - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"azUEOy8_GHo\" title=\"Styling better custom inputs with Dave Rupert\" playlabel=\"Play: Styling better custom inputs with Dave Rupert\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eReminder to tune in later, can’t watch now, but saw a link on Dave’s blog.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/ea6d4a9f-9abe-4853-9b5b-97335130d221.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/ea6d4a9f-9abe-4853-9b5b-97335130d221.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"azUEOy8_GHo\" title=\"Styling better custom inputs with Dave Rupert\" playlabel=\"Play: Styling better custom inputs with Dave Rupert\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nReminder to tune in later, can't watch now, but saw a link on Dave's blog.\n\n![image](https://dropper.wayl.one/api/file/ea6d4a9f-9abe-4853-9b5b-97335130d221.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=azUEOy8_GHo",
      "date_published": "2024-12-18T02:15:14Z",
      "date_modified": "2024-12-18T02:15:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-450/",
      "url": "https://go.waylonwalker.com/thought-450/",
      "title": "💭 I got the ADHD, too - daverupert.com",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2024/12/adhd/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/daverupert.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/daverupert.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI got the ADHD, too\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis month I got my official diagnosis for Adult ADHD. It’s fun to share experiences with friends. While ADHD presents some new waters to navigate, it isn’t exactly news to me. Thanks to Dr. Ti...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com · daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCheers to the Unique brains dave.  I can say I am 100% with Dave on all of these, except the clean environment thing, lucky Dave.  If I have enough room to see what I am doing and walk around a mess, I probably wont even notice it.  I’m so hyper focused on what is right in front of me that mess could be a huge pile of cash and i’d never see it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2024/12/adhd/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI got the ADHD, too\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis month I got my official diagnosis for Adult ADHD. It’s fun to share experiences with friends. While ADHD presents some new waters to navigate, it isn’t exactly news to me. Thanks to Dr. Ti...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com \u0026middot; daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCheers to the Unique brains dave.  I can say I am 100% with Dave on all of these, except the clean environment thing, lucky Dave.  If I have enough room to see what I am doing and walk around a mess, I probably wont even notice it.  I'm so hyper focused on what is right in front of me that mess could be a huge pile of cash and i'd never see it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daverupert.com/2024/12/adhd/",
      "date_published": "2024-12-18T02:12:45Z",
      "date_modified": "2024-12-18T02:12:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "adhd",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-449/",
      "url": "https://go.waylonwalker.com/thought-449/",
      "title": "💭 Damn, I love dropper already",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/448\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/448\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"How to make your RSS feed pretty\n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;I love me some styled rss, it\u0026amp;#39;s how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator infl...\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;How to make your RSS feed pretty\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\" embed-card-description glightbox\"=\"\"/ data-glightbox=\"description: How to make your RSS feed pretty\n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;I love me some styled rss, it\u0026amp;#39;s how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator infl...\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;How to make your RSS feed pretty\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\"\u003e\n\u003cpre\u003e\u003ccode\u003eI love me some styled rss, it\u0026amp;#39;s how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator infl...\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/a\u003e\u003c/div\u003e\u003ca href=\"https://thoughts.waylonwalker.com/post/448\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" 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\"\u003e\n  \u003c/a\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/448\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/448\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"How to make your RSS feed pretty\n — \n  \n    I love me some styled rss, it\u0026#39;s how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator infl...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  How to make your RSS feed pretty\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\n  \n    I love me some styled rss, it\u0026#39;s how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator infl...\n  \n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn I'm loving using dropper already, I am able to copy paste images right into posts on thoughts.  This is my first post that really utilizes them heavily to show how different styled rss feeds look in the post.  These were super quick to screenshot and paste in, this is a DREAM workflow for me. \n\n![image](https://dropper.wayl.one/api/file/6b452d8c-030f-4075-93eb-a9714fa63aa5.webp)\n\nWhen I paste an image into my thoughts chrome extension it automatically uploads it to dropper, and places a markdown image tag in its place.  Ya, I know the alt text could be better, but it feels _fine_ for quick and dirty posts like this.\n\n![image](https://dropper.wayl.one/api/file/1d2da59e-5212-4a56-82f8-81b9e5356159.webp)\n\ncheck out https://thoughts.waylonwalker.com/post/448  for some sweet styled rss\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://thoughts.waylonwalker.com/post/448",
      "date_published": "2024-12-18T00:42:07Z",
      "date_modified": "2024-12-18T00:42:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "meta",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-448/",
      "url": "https://go.waylonwalker.com/thought-448/",
      "title": "💭 How to make your RSS feed pretty",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/prettify-rss/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cassidoo.co/og-image/prettify-rss.png\" alt=\"How to make your RSS feed pretty — Life is too short for ugly XML.\" loading=\"lazy\"/ data-glightbox=\"description: How to make your RSS feed pretty — Life is too short for ugly XML.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to make your RSS feed pretty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLife is too short for ugly XML.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI love me some styled rss, it’s how the \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eOG\u003c/a\u003e internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator inflating the reach of things they want you to see or suffocating things against them.  It’s just you and your internet friends.\u003c/p\u003e\n\u003ch2 id=\"cassidys-styled-rsshttpscassidoocorssxml\"\u003e\u003ca href=\"https://cassidoo.co/rss.xml\" 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’s Styled rss\u003c/a\u003e \u003ca href=\"#cassidys-styled-rsshttpscassidoocorssxml\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCassidy has a quite lovely and easy to read rss feed, with an open source style sheet, that is part of her open source blog template for astro \u003ca href=\"https://github.com/cassidoo/blahg\" 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\"\u003eblahg\u003c/a\u003e, love that name by the way!\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/f8a6c448-2a95-47e1-b128-2bd7c3865253.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/f8a6c448-2a95-47e1-b128-2bd7c3865253.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"dave-ruperts-feedhttpsdaverupertcomatomxml\"\u003e\u003ca href=\"https://daverupert.com/atom.xml\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/daverupert.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/daverupert.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eDave Rupert’s Feed\u003c/a\u003e \u003ca href=\"#dave-ruperts-feedhttpsdaverupertcomatomxml\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI first learned of styled rss feeds from shoptalkshow.com, specifically from \u003ca href=\"daverupert.com\"\u003eDave Rupert\u003c/a\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/1be6c1e1-1645-4387-9e6d-134e001c04cb.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/1be6c1e1-1645-4387-9e6d-134e001c04cb.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eDave uses a pretty bog standard styled rss feed with \u003ca href=\"https://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl\" 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\"\u003epretty-feed-v3\u003c/a\u003e.  This repo is probably the best place to start if you are looking to style your rss feed.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl\" 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\"\u003ehttps://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"my-rss-feedhttpswaylonwalkercomarchiverssxml\"\u003e\u003ca href=\"https://waylonwalker.com/archive/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\"\u003eMy RSS Feed\u003c/a\u003e \u003ca href=\"#my-rss-feedhttpswaylonwalkercomarchiverssxml\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMy feed comes from my static site generator \u003ca href=\"markata.dev\"\u003emarkata\u003c/a\u003e, a plugins all the way down static site generator written in python, made for customizing, lacking just about any and all docs so you are on your own.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/214bd66f-88e1-4907-8e47-51d22b376678.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/214bd66f-88e1-4907-8e47-51d22b376678.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cassidoo.co/post/prettify-rss/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cassidoo.co/og-image/prettify-rss.png\" alt=\"How to make your RSS feed pretty — Life is too short for ugly XML.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to make your RSS feed pretty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLife is too short for ugly XML.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecassidoo.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI love me some styled rss, it's how the OG internet was made to be.  You choose what you want to read and when.  There is no middleman aggregator inflating the reach of things they want you to see or suffocating things against them.  It's just you and your internet friends.\n\n\n## [Cassidy's Styled rss](https://cassidoo.co/rss.xml)\n\nCassidy has a quite lovely and easy to read rss feed, with an open source style sheet, that is part of her open source blog template for astro [blahg](https://github.com/cassidoo/blahg), love that name by the way!\n\n![image](https://dropper.wayl.one/api/file/f8a6c448-2a95-47e1-b128-2bd7c3865253.webp)\n\n## [Dave Rupert's Feed](https://daverupert.com/atom.xml)\n\nI first learned of styled rss feeds from shoptalkshow.com, specifically from [Dave Rupert](daverupert.com).\n\n![image](https://dropper.wayl.one/api/file/1be6c1e1-1645-4387-9e6d-134e001c04cb.webp)\n\nDave uses a pretty bog standard styled rss feed with [pretty-feed-v3](https://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl).  This repo is probably the best place to start if you are looking to style your rss feed.\n\nhttps://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl\n\n## [My RSS Feed](https://waylonwalker.com/archive/rss.xml)\n\nMy feed comes from my static site generator [markata](markata.dev), a plugins all the way down static site generator written in python, made for customizing, lacking just about any and all docs so you are on your own.\n\n![image](https://dropper.wayl.one/api/file/214bd66f-88e1-4907-8e47-51d22b376678.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cassidoo.co/post/prettify-rss/",
      "date_published": "2024-12-18T00:38:24Z",
      "date_modified": "2024-12-18T00:38:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "rss",
        "feed",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/links-rely-on-color-to-be-distiniquishable/",
      "url": "https://go.waylonwalker.com/links-rely-on-color-to-be-distiniquishable/",
      "title": "Links rely on color to be distiniquishable",
      "content_html": "\u003cp\u003eToday i got hit by this accessibility issue on my site.  Low contrast links are\nnot distiniquishable.  I had not seen this error title before it was new to me,\nmaybe I have bad memory or maybe it’s new to me.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/24b4e31f-60db-47b8-b67c-07c4d4b6fb71.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/24b4e31f-60db-47b8-b67c-07c4d4b6fb71.webp\" alt=\"screenshot-2024-12-18T02-25-53-014Z.png\"/ data-glightbox=\"description: screenshot-2024-12-18T02-25-53-014Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI ended up dropping the background color of the site down a notch as I didn’t\nreally care for the semi-dark brown anyways.  I’m liking the near black\n\u003ccode\u003ebg-zinc-950\u003c/code\u003e much better now.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/8b4f2087-3f24-4212-ad00-74f294aff114.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/8b4f2087-3f24-4212-ad00-74f294aff114.webp\" alt=\"screenshot-2024-12-18T02-45-53-807Z.png\"/ data-glightbox=\"description: screenshot-2024-12-18T02-45-53-807Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eNow I got that 100 A11y score in lighthouse.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/17497676-3730-4875-9e10-c6d121ba537a.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/17497676-3730-4875-9e10-c6d121ba537a.webp\" alt=\"screenshot-2024-12-18T03-02-18-934Z.png\"/ data-glightbox=\"description: screenshot-2024-12-18T03-02-18-934Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nToday i got hit by this accessibility issue on my site.  Low contrast links are\nnot distiniquishable.  I had not seen this error title before it was new to me,\nmaybe I have bad memory or maybe it's new to me.\n\n![screenshot-2024-12-18T02-25-53-014Z.png](https://dropper.waylonwalker.com/api/file/24b4e31f-60db-47b8-b67c-07c4d4b6fb71.webp)\n\nI ended up dropping the background color of the site down a notch as I didn't\nreally care for the semi-dark brown anyways.  I'm liking the near black\n`bg-zinc-950` much better now.\n\n![screenshot-2024-12-18T02-45-53-807Z.png](https://dropper.waylonwalker.com/api/file/8b4f2087-3f24-4212-ad00-74f294aff114.webp)\n\nNow I got that 100 A11y score in lighthouse.\n\n![screenshot-2024-12-18T03-02-18-934Z.png](https://dropper.waylonwalker.com/api/file/17497676-3730-4875-9e10-c6d121ba537a.webp)\n",
      "summary": "Today i got hit by this accessibility issue on my site. Low contrast links are not distiniquishable. I had not seen this error title before it was new to me,...",
      "date_published": "2024-12-17T20:25:12Z",
      "date_modified": "2024-12-17T20:25:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-447/",
      "url": "https://go.waylonwalker.com/thought-447/",
      "title": "💭 Dropper",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dropper.wayl.one/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"http://dropper.wayl.one/static/dropper.png\" alt=\"Dropper — Dropper is a simple file sharing service.\" loading=\"lazy\"/ data-glightbox=\"description: Dropper — Dropper is a simple file sharing service.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDropper\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDropper is a simple file sharing service.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDropper · dropper.wayl.one\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDropper is a place for me to drop files for quick posts like this.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/c3a4c39d-c9ab-4e0a-b4c1-b74362877342.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/c3a4c39d-c9ab-4e0a-b4c1-b74362877342.webp\" alt=\"image\"/ data-glightbox=\"description: image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dropper.wayl.one/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"http://dropper.wayl.one/static/dropper.png\" alt=\"Dropper — Dropper is a simple file sharing service.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDropper\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDropper is a simple file sharing service.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eDropper \u0026middot; dropper.wayl.one\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDropper is a place for me to drop files for quick posts like this.\n\n![image](https://dropper.wayl.one/api/file/c3a4c39d-c9ab-4e0a-b4c1-b74362877342.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dropper.wayl.one/",
      "date_published": "2024-12-16T22:26:59Z",
      "date_modified": "2024-12-16T22:26:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "meta",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-446/",
      "url": "https://go.waylonwalker.com/thought-446/",
      "title": "💭 Add a healthcheck to your FastAPI app | Pype.dev",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/add-a-healthcheck-to-your-fastapi-app\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"Add a healthcheck to your FastAPI app | Nic Payne — I\u0026#39;m building a few FastAPI apps to throw in docker and run on my homelab... I wanted to add healthchecks and here\u0026#39;s a simple way to do it Make sure to\" loading=\"lazy\"/ data-glightbox=\"description: Add a healthcheck to your FastAPI app | Nic Payne — I\u0026#39;m building a few FastAPI apps to throw in docker and run on my homelab... I wanted to add healthchecks and here\u0026#39;s a simple way to do it Make sure to\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAdd a healthcheck to your FastAPI app | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m building a few FastAPI apps to throw in docker and run on my homelab... I wanted to add healthchecks and here\u0026#39;s a simple way to do it Make sure to\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNice example of adding a healthcheck to \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, and integrating it with docker.  Don’t forget to include curl in the install, nice touch.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/add-a-healthcheck-to-your-fastapi-app\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"Add a healthcheck to your FastAPI app | Nic Payne — I\u0026#39;m building a few FastAPI apps to throw in docker and run on my homelab... I wanted to add healthchecks and here\u0026#39;s a simple way to do it Make sure to\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAdd a healthcheck to your FastAPI app | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m building a few FastAPI apps to throw in docker and run on my homelab... I wanted to add healthchecks and here\u0026#39;s a simple way to do it Make sure to\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNice example of adding a healthcheck to fastapi, and integrating it with docker.  Don't forget to include curl in the install, nice touch.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/add-a-healthcheck-to-your-fastapi-app",
      "date_published": "2024-12-16T19:05:50Z",
      "date_modified": "2024-12-16T19:05:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "docker",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-445/",
      "url": "https://go.waylonwalker.com/thought-445/",
      "title": "💭 casey/just: 🤖 Just a command runner",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/casey/just?tab=readme-ov-file#constants\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/02aad539d7a99bb629a08a7d76bb8271f8ad6f0467d84a4f38a956f54e5021cd/casey/just\" alt=\"GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - casey/just: 🤖 Just a command runner\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003enew versions of just now come with color variables already set.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003egroup\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;manage\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eversion:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#!/usr/bin/env bash\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eversion\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecat version\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e current version \u003cspan class=\"o\"\u003e{{\u003c/span\u003eBOLD\u003cspan class=\"o\"\u003e}}{{\u003c/span\u003eGREEN\u003cspan class=\"o\"\u003e}}\u003c/span\u003e\u003cspan class=\"nv\"\u003e$version\u003c/span\u003e\u003cspan class=\"o\"\u003e{{\u003c/span\u003eNORMAL\u003cspan class=\"o\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/casey/just?tab=readme-ov-file#constants\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/02aad539d7a99bb629a08a7d76bb8271f8ad6f0467d84a4f38a956f54e5021cd/casey/just\" alt=\"GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - casey/just: 🤖 Just a command runner\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nnew versions of just now come with color variables already set.\n\n``` bash\n[group('manage')]\nversion:\n    #!/usr/bin/env bash\n    version=$(cat version)\n    echo current version {{BOLD}}{{GREEN}}$version{{NORMAL}}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/casey/just?tab=readme-ov-file#constants",
      "date_published": "2024-12-14T17:04:06Z",
      "date_modified": "2024-12-14T17:04:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "linux",
        "just",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-444/",
      "url": "https://go.waylonwalker.com/thought-444/",
      "title": "💭 pipedream/justfile at main · thechangelog/pipedream",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/thechangelog/pipedream/blob/main/justfile\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/a8fa9047c60228f690d3fb848ea8232f236c860f28ec4c1e0fdbbef0e684d89a/thechangelog/pipely\" alt=\"pipely/justfile at main · thechangelog/pipely — I like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely\" loading=\"lazy\"/ data-glightbox=\"description: pipely/justfile at main · thechangelog/pipely — I like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epipely/justfile at main · thechangelog/pipely\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI found this nugget in thechangelogs justfile, it lets you add color to your justfile with variables quite easily.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# https://linux.101hacks.com/ps1-examples/prompt-color-using-tput/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_BOLD :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_RESET :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput sgr0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_BLACK :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_RED :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 1\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_GREEN :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 2\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_YELLOW :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 3\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_BLUE :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 4\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_MAGENTA :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 5\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_CYAN :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 6\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_WHITE :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 7\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_BLACKB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput bold\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setab 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_REDB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 1\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_GREENB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 2\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_YELLOWB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 3\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_BLUEB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 4\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_MAGENTAB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 5\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_CYANB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 6\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e_WHITEB :\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etput setab 7\u003cspan class=\"k\"\u003e)$(\u003c/span\u003etput setaf 0\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUsage\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"o\"\u003e{{\u003c/span\u003e_BOLD\u003cspan class=\"o\"\u003e}}{{\u003c/span\u003e_GREEN\u003cspan class=\"o\"\u003e}}\u003c/span\u003ehello there\u003cspan class=\"o\"\u003e{{\u003c/span\u003e_RESET\u003cspan class=\"o\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/thechangelog/pipedream/blob/main/justfile\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/a8fa9047c60228f690d3fb848ea8232f236c860f28ec4c1e0fdbbef0e684d89a/thechangelog/pipely\" alt=\"pipely/justfile at main · thechangelog/pipely — I like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epipely/justfile at main · thechangelog/pipely\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI found this nugget in thechangelogs justfile, it lets you add color to your justfile with variables quite easily.\n\n``` bash\n# https://linux.101hacks.com/ps1-examples/prompt-color-using-tput/\n\n_BOLD := \"$(tput bold)\"\n_RESET := \"$(tput sgr0)\"\n_BLACK := \"$(tput bold)$(tput setaf 0)\"\n_RED := \"$(tput bold)$(tput setaf 1)\"\n_GREEN := \"$(tput bold)$(tput setaf 2)\"\n_YELLOW := \"$(tput bold)$(tput setaf 3)\"\n_BLUE := \"$(tput bold)$(tput setaf 4)\"\n_MAGENTA := \"$(tput bold)$(tput setaf 5)\"\n_CYAN := \"$(tput bold)$(tput setaf 6)\"\n_WHITE := \"$(tput bold)$(tput setaf 7)\"\n_BLACKB := \"$(tput bold)$(tput setab 0)\"\n_REDB := \"$(tput setab 1)$(tput setaf 0)\"\n_GREENB := \"$(tput setab 2)$(tput setaf 0)\"\n_YELLOWB := \"$(tput setab 3)$(tput setaf 0)\"\n_BLUEB := \"$(tput setab 4)$(tput setaf 0)\"\n_MAGENTAB := \"$(tput setab 5)$(tput setaf 0)\"\n_CYANB := \"$(tput setab 6)$(tput setaf 0)\"\n_WHITEB := \"$(tput setab 7)$(tput setaf 0)\"\n``` \n\nUsage\n``` bash\necho:\n    echo {{_BOLD}}{{_GREEN}}hello there{{_RESET}}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/thechangelog/pipedream/blob/main/justfile",
      "date_published": "2024-12-14T16:54:34Z",
      "date_modified": "2024-12-14T16:54:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "linux",
        "just",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-443/",
      "url": "https://go.waylonwalker.com/thought-443/",
      "title": "💭 Hurl - Run and Test HTTP Requests",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hurl.dev/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/hurl.dev.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/hurl.dev.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHurl - Run and Test HTTP Requests\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHurl, run and test HTTP requests with plain text and curl. Hurl can run fast automated integration tests.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehurl.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHurl was mentioned by \u003ca href=\"https://gerhard.io/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gerhard.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gerhard.io.png\" class=\"has-avatar  has-avatar-before\"\u003e@gerhard\u003c/a\u003e on the latest \u003ca href=\"https://www.youtube.com/watch?v=mvC7497CJJs\u0026amp;t=3001s\" 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\"\u003echangelog and Friends\u003c/a\u003e.  Looks  like a feature rich easy to use testing tool that is tested via what looks like a config file.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHurl is a command line tool that runs HTTP requests defined in a simple plain text format.\nIt can chain requests, capture values and evaluate queries on headers and body response. Hurl is very versatile: it can be used for both fetching data and testing HTTP sessions.\nHurl makes it easy to work with \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 content, REST / SOAP / GraphQL APIs, or any other XML / JSON based APIs.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hurl.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHurl - Run and Test HTTP Requests\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHurl, run and test HTTP requests with plain text and curl. Hurl can run fast automated integration tests.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehurl.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHurl was mentioned by [@gerhard](https://gerhard.io/) on the latest [changelog and Friends](https://www.youtube.com/watch?v=mvC7497CJJs\u0026t=3001s).  Looks  like a feature rich easy to use testing tool that is tested via what looks like a config file.\n\n\u003e Hurl is a command line tool that runs HTTP requests defined in a simple plain text format.\n\u003e It can chain requests, capture values and evaluate queries on headers and body response. Hurl is very versatile: it can be used for both fetching data and testing HTTP sessions.\n\u003e Hurl makes it easy to work with HTML content, REST / SOAP / GraphQL APIs, or any other XML / JSON based APIs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hurl.dev/",
      "date_published": "2024-12-14T16:41:38Z",
      "date_modified": "2024-12-14T16:41:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "testing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/urllink/",
      "url": "https://go.waylonwalker.com/urllink/",
      "title": "urllink",
      "content_html": "\u003cp\u003eToday I discovered the \u003ccode\u003eUrllink\u003c/code\u003e function in bash from the ujust tool from\n\u003ca href=\"https://ublue.it\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/ublue.it.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/ublue.it.png\" class=\"has-avatar  has-avatar-before\"\u003eublue.it\u003c/a\u003e.  Seems like a cool trick, but might not work\neverywhere.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e########\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### Special text formating\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e########\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## Function to generate a clickable link, you can call this using\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# url=$(Urllink \u0026#34;https://ublue.it\u0026#34; \u0026#34;Visit the ublue website\u0026#34;)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# echo \u0026#34;${url}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e Urllink \u003cspan class=\"o\"\u003e(){\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eURL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eTEXT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Generate a clickable hyperlink\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprintf\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\\e]8;;%s\\e\\\\%s\\e]8;;\\e\\\\\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$URL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TEXT\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003en\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sb\"\u003e```\u003c/span\u003ej\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I discovered the `Urllink` function in bash from the ujust tool from\n[ublue.it](https://ublue.it).  Seems like a cool trick, but might not work\neverywhere.\n\n``` bash\n########\n### Special text formating\n########\n## Function to generate a clickable link, you can call this using\n# url=$(Urllink \"https://ublue.it\" \"Visit the ublue website\")\n# echo \"${url}\"\nfunction Urllink (){\n    URL=$1\n    TEXT=$2\n\n    # Generate a clickable hyperlink\n    printf \"\\e]8;;%s\\e\\\\%s\\e]8;;\\e\\\\\" \"$URL\" \"$TEXT${n}\"\n}\n```j\n",
      "summary": "Today I discovered the function in bash from the ujust tool from ublue.it. Seems like a cool trick, but might not work everywhere.",
      "date_published": "2024-12-14T11:11:52Z",
      "date_modified": "2024-12-14T11:11:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-442/",
      "url": "https://go.waylonwalker.com/thought-442/",
      "title": "💭 watchfiles",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://watchfiles.helpmanual.io/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/watchfiles.helpmanual.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/watchfiles.helpmanual.io.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewatchfiles\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSimple, modern and high performance file watching and code reload in python.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewatchfiles.helpmanual.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSimple, modern and high performance file watching and code reload in python.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://watchfiles.helpmanual.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewatchfiles\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSimple, modern and high performance file watching and code reload in python.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewatchfiles.helpmanual.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSimple, modern and high performance file watching and code reload in python.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://watchfiles.helpmanual.io/",
      "date_published": "2024-12-13T02:08:24Z",
      "date_modified": "2024-12-13T02:08:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tursodatabase-turso/",
      "url": "https://go.waylonwalker.com/tursodatabase-turso/",
      "title": "⭐ tursodatabase turso",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/tursodatabase/turso\" 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\"\u003eturso\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/tursodatabase\" 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\"\u003etursodatabase\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eTurso Database is a project to build the next evolution of SQLite.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [turso](https://github.com/tursodatabase/turso), an amazing project by [tursodatabase](https://github.com/tursodatabase). It's worth exploring!\n\nTurso Database is a project to build the next evolution of SQLite.\n",
      "summary": "I'm really excited about turso, an amazing project by tursodatabase. It's worth exploring!",
      "date_published": "2024-12-11T16:36:28Z",
      "date_modified": "2024-12-11T16:36:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tursodatabase-limbo/",
      "url": "https://go.waylonwalker.com/tursodatabase-limbo/",
      "title": "⭐ tursodatabase limbo",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tursodatabase/limbo\" 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\"\u003elimbo\u003c/a\u003e by \u003ca href=\"https://github.com/tursodatabase\" 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\"\u003etursodatabase\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eLimbo is a work-in-progress, in-process OLTP database management system, compatible with SQLite.\u003c/p\u003e\n",
      "content_text": "\n[limbo](https://github.com/tursodatabase/limbo) by [tursodatabase](https://github.com/tursodatabase) is a game-changer in its space. Excited to see how it evolves.\n\nLimbo is a work-in-progress, in-process OLTP database management system, compatible with SQLite.\n",
      "summary": "limbo by tursodatabase is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-12-11T16:36:28Z",
      "date_modified": "2024-12-11T16:36:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-441/",
      "url": "https://go.waylonwalker.com/thought-441/",
      "title": "💭 hostnamectl to easily change hostname | Pype.dev",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/hostnamectl-to-easily-change-hostname\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"hostnamectl to easily change hostname | Nic Payne — hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there\u0026#39;s transient and static hostnames, so that\u0026amp;\" loading=\"lazy\"/ data-glightbox=\"description: hostnamectl to easily change hostname | Nic Payne — hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there\u0026#39;s transient and static hostnames, so that\u0026amp;\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehostnamectl to easily change hostname | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there\u0026#39;s transient and static hostnames, so that\u0026amp;\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFor some reason the ublue ecosystem does not prompt you to set your hostname on install and you get a hostname like bazzite showing up.  Looks like this is the fix.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ehostnamectl –static hostname babyblue-aurora\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pype.dev/hostnamectl-to-easily-change-hostname\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png\" alt=\"hostnamectl to easily change hostname | Nic Payne — hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there\u0026#39;s transient and static hostnames, so that\u0026amp;\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehostnamectl to easily change hostname | Nic Payne\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there\u0026#39;s transient and static hostnames, so that\u0026amp;\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epype.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFor some reason the ublue ecosystem does not prompt you to set your hostname on install and you get a hostname like bazzite showing up.  Looks like this is the fix.\n\n\u003e hostnamectl --static hostname babyblue-aurora\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pype.dev/hostnamectl-to-easily-change-hostname",
      "date_published": "2024-12-06T14:30:41Z",
      "date_modified": "2024-12-06T14:30:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-440/",
      "url": "https://go.waylonwalker.com/thought-440/",
      "title": "💭 Ansible Galaxy - amazon.aws",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://galaxy.ansible.com/ui/repo/published/amazon/aws/content/module/s3_bucket/#examples\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/galaxy.ansible.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/galaxy.ansible.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAnsible Galaxy\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egalaxy.ansible.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat examples for working with s3 buckets with ansible.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://galaxy.ansible.com/ui/repo/published/amazon/aws/content/module/s3_bucket/#examples\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAnsible Galaxy\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egalaxy.ansible.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat examples for working with s3 buckets with ansible.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://galaxy.ansible.com/ui/repo/published/amazon/aws/content/module/s3_bucket/#examples",
      "date_published": "2024-12-05T00:06:23Z",
      "date_modified": "2024-12-05T00:06:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ansible",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/45drives-cockpit-identities/",
      "url": "https://go.waylonwalker.com/45drives-cockpit-identities/",
      "title": "⭐ 45Drives cockpit-identities",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/45Drives/cockpit-identities\" 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\"\u003ecockpit-identities\u003c/a\u003e from \u003ca href=\"https://github.com/45Drives\" 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\"\u003e45Drives\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eUser and group management plugin for Houston UI (Cockpit)\u003c/p\u003e\n",
      "content_text": "\nI came across [cockpit-identities](https://github.com/45Drives/cockpit-identities) from [45Drives](https://github.com/45Drives), and it's packed with great features and ideas.\n\nUser and group management plugin for Houston UI (Cockpit)\n",
      "summary": "I came across cockpit-identities from 45Drives, and it's packed with great features and ideas.",
      "date_published": "2024-12-04T18:07:16Z",
      "date_modified": "2024-12-04T18:07:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/45drives-cockpit-file-sharing/",
      "url": "https://go.waylonwalker.com/45drives-cockpit-file-sharing/",
      "title": "⭐ 45Drives cockpit-file-sharing",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/45Drives/cockpit-file-sharing\" 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\"\u003ecockpit-file-sharing\u003c/a\u003e by \u003ca href=\"https://github.com/45Drives\" 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\"\u003e45Drives\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA Cockpit plugin to easily manage samba and NFS file sharing.\u003c/p\u003e\n",
      "content_text": "\n[cockpit-file-sharing](https://github.com/45Drives/cockpit-file-sharing) by [45Drives](https://github.com/45Drives) is a game-changer in its space. Excited to see how it evolves.\n\nA Cockpit plugin to easily manage samba and NFS file sharing.\n",
      "summary": "cockpit-file-sharing by 45Drives is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-12-04T18:07:13Z",
      "date_modified": "2024-12-04T18:07:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-439/",
      "url": "https://go.waylonwalker.com/thought-439/",
      "title": "💭 Using OPNsense with Tailscale · Tailscale Docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailscale.com/kb/1097/install-opnsense\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://tailscale.com/files/images/og-image.png\" alt=\"Using OPNsense with Tailscale · Tailscale Docs — Set up a Tailscale VPN on OPNsense. Get secure communication across your devices without the need for complex configuration.\" loading=\"lazy\"/ data-glightbox=\"description: Using OPNsense with Tailscale · Tailscale Docs — Set up a Tailscale VPN on OPNsense. Get secure communication across your devices without the need for complex configuration.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing OPNsense with Tailscale · Tailscale Docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSet up a Tailscale VPN on OPNsense. Get secure communication across your devices without the need for complex configuration. \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTailscale · tailscale.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOn reboot of my opnsense router it did not tailscale up.  I’m not sure if a key expired or what happened.  The fix was to first enable ssh, then ssh in and run tailscale up.\u003c/p\u003e\n\u003ch2 id=\"enable-ssh\"\u003eenable ssh \u003ca href=\"#enable-ssh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn opnsense System \u0026gt; Settings \u0026gt; Administration \u0026gt; Secure Shell \u0026gt; Enable Secure Shell\u003c/p\u003e\n\u003ch2 id=\"tailscale-up\"\u003etailscale up \u003ca href=\"#tailscale-up\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh \u0026lt;opnsense ip\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e8\u003c/span\u003e \u003cspan class=\"c1\"\u003e# to select shell\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etailscale up\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFollow the link to log in.\u003c/p\u003e\n\u003ch2 id=\"disable-ssh\"\u003edisable ssh \u003ca href=\"#disable-ssh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003enow uncheck secure shell to lock down the opnsense machine.\u003c/p\u003e\n\u003cp\u003eIn opnsense System \u0026gt; Settings \u0026gt; Administration \u0026gt; Secure Shell \u0026gt; Enable Secure Shell\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailscale.com/kb/1097/install-opnsense\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://tailscale.com/files/images/og-image.png\" alt=\"Using OPNsense with Tailscale · Tailscale Docs — Set up a Tailscale VPN on OPNsense. Get secure communication across your devices without the need for complex configuration.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing OPNsense with Tailscale · Tailscale Docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSet up a Tailscale VPN on OPNsense. Get secure communication across your devices without the need for complex configuration. \u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTailscale \u0026middot; tailscale.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOn reboot of my opnsense router it did not tailscale up.  I'm not sure if a key expired or what happened.  The fix was to first enable ssh, then ssh in and run tailscale up.\n\n## enable ssh\n\nIn opnsense System \u003e Settings \u003e Administration \u003e Secure Shell \u003e Enable Secure Shell\n\n## tailscale up\n\n``` bash\nssh \u003copnsense ip\u003e\n8 # to select shell\ntailscale up\n```\n\nFollow the link to log in.\n\n## disable ssh\n\nnow uncheck secure shell to lock down the opnsense machine.\n\n\nIn opnsense System \u003e Settings \u003e Administration \u003e Secure Shell \u003e Enable Secure Shell\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tailscale.com/kb/1097/install-opnsense",
      "date_published": "2024-12-03T17:37:52Z",
      "date_modified": "2024-12-03T17:37:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "opnsense",
        "tailscale",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/debug-cloudflared-tunnel/",
      "url": "https://go.waylonwalker.com/debug-cloudflared-tunnel/",
      "title": "debug cloudflared tunnel",
      "content_html": "\u003cp\u003eI’ve been debugging a cloudflared tunnel issue in my \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 day today, and\ngetting really frustrated.  My issue ended up being that it was running twice,\nonce without the correct config file and another with it.  I believe that\ncacheing may have compounded the issue.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIn yesterday’s post I setup a cloudflared tunnel on my ubuntu server to\nexpose applications running on the server to the internet.  I’m setting up a\nnew server and running cloudflared in its own vm.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"/setup-cloudflared-tunnel-on-ubuntu/\" class=\"wikilink\" data-title=\"setup cloudflared tunnel on ubuntu\" data-description=\"I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I\u0026#39;m setting up a new server and running...\" data-date=\"2024-12-02\" data-preview=\"I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I\u0026#39;m setting up a new server and running...\"\u003esetup cloudflared tunnel on ubuntu\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"check-that-dns-is-pointing-to-the-correct-tunnel\"\u003eCheck that dns is pointing to the correct tunnel \u003ca href=\"#check-that-dns-is-pointing-to-the-correct-tunnel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edig subdomain.example.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etraceroute subdomain.example.com\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"check-that-the-tunnel-is-running\"\u003eCheck that the tunnel is running \u003ca href=\"#check-that-the-tunnel-is-running\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eCLOUDFLARED_TUNNEL_ID\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;my-tunnel-id\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecloudflared tunnel list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecloudflared tunnel info \u003cspan class=\"nv\"\u003e$CLOUDFLARED_TUNNEL_ID\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been debugging a cloudflared tunnel issue in my homelab all day today, and\ngetting really frustrated.  My issue ended up being that it was running twice,\nonce without the correct config file and another with it.  I believe that\ncacheing may have compounded the issue.\n\n\u003e In yesterday's post I setup a cloudflared tunnel on my ubuntu server to\n\u003e expose applications running on the server to the internet.  I'm setting up a\n\u003e new server and running cloudflared in its own vm.\n\n\u003ca href=\"/setup-cloudflared-tunnel-on-ubuntu/\" class=\"wikilink\" data-title=\"setup cloudflared tunnel on ubuntu\" data-description=\"I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I\u0026#39;m setting up a new server and running...\" data-date=\"2024-12-02\"\u003esetup cloudflared tunnel on ubuntu\u003c/a\u003e\n\n## Check that dns is pointing to the correct tunnel\n\n``` bash\ndig subdomain.example.com\ntraceroute subdomain.example.com\n```\n\n## Check that the tunnel is running\n\n``` bash\nexport CLOUDFLARED_TUNNEL_ID = \"my-tunnel-id\"\n\ncloudflared tunnel list\ncloudflared tunnel info $CLOUDFLARED_TUNNEL_ID\n```\n",
      "summary": "I've been debugging a cloudflared tunnel issue in my homelab all day today, and getting really frustrated. My issue ended up being that it was running twice,...",
      "date_published": "2024-12-03T15:36:37Z",
      "date_modified": "2024-12-03T15:36:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "networking"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/setup-cloudflared-tunnel-on-ubuntu/",
      "url": "https://go.waylonwalker.com/setup-cloudflared-tunnel-on-ubuntu/",
      "title": "setup cloudflared tunnel on ubuntu",
      "content_html": "\u003cp\u003eI run a cloudflared tunnel on my ubuntu server to expose applications running\non the server to the internet.  I’m setting up a new server and running\ncloudflared in its own vm.\u003c/p\u003e\n\u003ch2 id=\"get-the-cloudflared-binary\"\u003eGet the cloudflared binary \u003ca href=\"#get-the-cloudflared-binary\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chmod +x /usr/local/bin/cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"heading\"\u003e \u003ca href=\"#heading\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow setup the config directory.  For the systemd service to work, the config\nfile needs to be in /etc/cloudflared.  I like to give my user rights to edit\nthe config file without being sudo, we will do that here by creating a group\n\u003ccode\u003ecloudflared\u003c/code\u003e, add ourselves to the group, give ownership of \u003ccode\u003e/etc/cloudflared\u003c/code\u003e\nto the group, give group write access to the directory, and refresh groups.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo mkdir -p /etc/cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo groupadd cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo usermod -aG cloudflared \u003cspan class=\"nv\"\u003e$USER\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chown -R root:cloudflared /etc/cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chmod g+w /etc/cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enewgrp cloudflared\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"login\"\u003elogin \u003ca href=\"#login\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we can log into the domain zone with cloudflared.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecloudflared tunnel login\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis will give a url, follow it in a browser to log in.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecloudflared tunnel create \u0026lt;NAME\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.cloudflared/\u0026lt;tunnel-id\u0026gt;.json /etc/cloudflared/\u0026lt;tunnel-id\u0026gt;.json\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"config\"\u003econfig \u003ca href=\"#config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow setup config.  For the systemd service to work, the config file needs to be\nin /etc/cloudflared.  The config that I have provided below will expose\nlocalhost:8000 to tester.example.com\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eCLOUDFLARED_TUNNEL_ID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003els /etc/cloudflared/*.json \u003cspan class=\"p\"\u003e|\u003c/span\u003e xargs -n \u003cspan class=\"m\"\u003e1\u003c/span\u003e basename \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/\\.json$//\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.cloudflared/\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eCLOUDFLARED_TUNNEL_ID\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e.json /etc/cloudflared/\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eCLOUDFLARED_TUNNEL_ID\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e.json\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003etunnel: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003eCLOUDFLARED_TUNNEL_ID\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003ecredentials-file: /etc/cloudflared/\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003eCLOUDFLARED_TUNNEL_ID\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e.json\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eingress:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  - hostname: tester.example.com\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    service: http://localhost:8000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  - service: \u0026#39;http_status:404\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; /etc/cloudflared/config.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"dns\"\u003edns \u003ca href=\"#dns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow to get a dns record for tester.example.com to point to the cloudflared\ntunnel.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecloudflared tunnel route dns \u003cspan class=\"k\"\u003e$(\u003c/span\u003eCLOUDFLARED_TUNNEL_ID\u003cspan class=\"k\"\u003e)\u003c/span\u003e tester.example.com\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"systemd\"\u003esystemd \u003ca href=\"#systemd\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow install the systemd service.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo cloudflared service install\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl status cloudflared.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# if its not running\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl start cloudflared.service\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI run a cloudflared tunnel on my ubuntu server to expose applications running\non the server to the internet.  I'm setting up a new server and running\ncloudflared in its own vm.\n\n## Get the cloudflared binary\n\n```bash\nsudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared\n\nsudo chmod +x /usr/local/bin/cloudflared\n```\n\n##\n\nNow setup the config directory.  For the systemd service to work, the config\nfile needs to be in /etc/cloudflared.  I like to give my user rights to edit\nthe config file without being sudo, we will do that here by creating a group\n`cloudflared`, add ourselves to the group, give ownership of `/etc/cloudflared`\nto the group, give group write access to the directory, and refresh groups.\n\n``` bash\nsudo mkdir -p /etc/cloudflared\nsudo groupadd cloudflared\nsudo usermod -aG cloudflared $USER\nsudo chown -R root:cloudflared /etc/cloudflared\nsudo chmod g+w /etc/cloudflared\nnewgrp cloudflared\n```\n\n## login\n\nNow we can log into the domain zone with cloudflared.\n\n```bash\ncloudflared tunnel login\n```\n\nThis will give a url, follow it in a browser to log in.\n\n``` bash\ncloudflared tunnel create \u003cNAME\u003e\nmv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem\nmv ~/.cloudflared/\u003ctunnel-id\u003e.json /etc/cloudflared/\u003ctunnel-id\u003e.json\n```\n\n## config\n\nNow setup config.  For the systemd service to work, the config file needs to be\nin /etc/cloudflared.  The config that I have provided below will expose\nlocalhost:8000 to tester.example.com\n\n``` bash\nexport CLOUDFLARED_TUNNEL_ID=$(ls /etc/cloudflared/*.json | xargs -n 1 basename | sed 's/\\.json$//')\nmv ~/.cloudflared/${CLOUDFLARED_TUNNEL_ID}.json /etc/cloudflared/${CLOUDFLARED_TUNNEL_ID}.json\nmv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem\necho \"\ntunnel: $(CLOUDFLARED_TUNNEL_ID)\ncredentials-file: /etc/cloudflared/$(CLOUDFLARED_TUNNEL_ID).json\ningress:\n  - hostname: tester.example.com\n    service: http://localhost:8000\n  - service: 'http_status:404'\n\" \u003e\u003e /etc/cloudflared/config.yaml\n```\n\n## dns\n\nNow to get a dns record for tester.example.com to point to the cloudflared\ntunnel.\n\n```bash\ncloudflared tunnel route dns $(CLOUDFLARED_TUNNEL_ID) tester.example.com\n```\n\n## systemd\n\nNow install the systemd service.\n\n``` bash\nsudo cloudflared service install\n```\n\n```bash\nsudo systemctl status cloudflared.service\n# if its not running\nsudo systemctl start cloudflared.service\n```\n",
      "summary": "I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I'm setting up a new server and running...",
      "date_published": "2024-12-02T15:43:45Z",
      "date_modified": "2024-12-02T15:43:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "networking"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-438/",
      "url": "https://go.waylonwalker.com/thought-438/",
      "title": "💭 Fitting two hard drives and an SSD in a Dell OptiPlex 7010 SFF",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willj.net/posts/fitting-two-hard-drives-and-an-ssd-in-a-dell-optiplex-7010-usff/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/willj.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/willj.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFitting two hard drives and an SSD in a Dell OptiPlex 7010 SFF\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe Dell OptiPlex 7010 SFF officially only has room for one 2.5\u0026#34; hard drive internally, I fitted two 3.25\u0026#34; hard drives and a 2.5\u0026#34; SSD in one.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewillj.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis guy fit 2 3.5\u0026#34; drives and an sdd in a dell 7050 SFF.  It looks tight, and there it probably not much airflow running in it, but its an impressive project.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://willj.net/posts/fitting-two-hard-drives-and-an-ssd-in-a-dell-optiplex-7010-usff/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFitting two hard drives and an SSD in a Dell OptiPlex 7010 SFF\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe Dell OptiPlex 7010 SFF officially only has room for one 2.5\u0026#34; hard drive internally, I fitted two 3.25\u0026#34; hard drives and a 2.5\u0026#34; SSD in one.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewillj.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis guy fit 2 3.5\" drives and an sdd in a dell 7050 SFF.  It looks tight, and there it probably not much airflow running in it, but its an impressive project.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://willj.net/posts/fitting-two-hard-drives-and-an-ssd-in-a-dell-optiplex-7010-usff/",
      "date_published": "2024-11-27T16:53:53Z",
      "date_modified": "2024-11-27T16:53:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-437/",
      "url": "https://go.waylonwalker.com/thought-437/",
      "title": "💭 How To Fix An Office Chair Popping Noise? With Root Causes - T...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://toergonomics.com/office-chair-popping-noise/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://toergonomics.com/wp-content/uploads/2020/04/a-young-technician-fix-a-black-office-chair-popping-noise.jpg\" alt=\"How To Fix An Office Chair Popping Noise? With Root Causes — If you hear a popping noise from under your office chair when you move around or when you spin it, it’s time to repair your office chair. Read more.\" loading=\"lazy\"/ data-glightbox=\"description: How To Fix An Office Chair Popping Noise? With Root Causes — If you hear a popping noise from under your office chair when you move around or when you spin it, it’s time to repair your office chair. Read more.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow To Fix An Office Chair Popping Noise? With Root Causes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you hear a popping noise from under your office chair when you move around or when you spin it, it’s time to repair your office chair. Read more.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eToErgonomics · toergonomics.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI tried this fix on my secretlabs chair, but unfortunately it did nothing for me.  Mine ended up being an issue in the tilt mechanism and not the hydraulic piston.  I greased the crap out of it, it can only help the longevity.  I did notice that the two washers on either side of my bearing were quite worn in.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://toergonomics.com/office-chair-popping-noise/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://toergonomics.com/wp-content/uploads/2020/04/a-young-technician-fix-a-black-office-chair-popping-noise.jpg\" alt=\"How To Fix An Office Chair Popping Noise? With Root Causes — If you hear a popping noise from under your office chair when you move around or when you spin it, it’s time to repair your office chair. Read more.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow To Fix An Office Chair Popping Noise? With Root Causes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you hear a popping noise from under your office chair when you move around or when you spin it, it’s time to repair your office chair. Read more.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eToErgonomics \u0026middot; toergonomics.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI tried this fix on my secretlabs chair, but unfortunately it did nothing for me.  Mine ended up being an issue in the tilt mechanism and not the hydraulic piston.  I greased the crap out of it, it can only help the longevity.  I did notice that the two washers on either side of my bearing were quite worn in.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://toergonomics.com/office-chair-popping-noise/",
      "date_published": "2024-11-25T22:30:19Z",
      "date_modified": "2024-11-25T22:30:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "office",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-436/",
      "url": "https://go.waylonwalker.com/thought-436/",
      "title": "💭 If anyone else is having sound clicking with chair : here is t...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/secretlab/comments/s6ayop/if_anyone_else_is_having_sound_clicking_with/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.reddit.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.reddit.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIf anyone else is having sound clicking with chair : here is the document admitting it’s manufacturer defect.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf anyone else is having sound clicking with chair : here is the document admitting it’s manufacturer defect.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit · reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is definitely happening to my secretlabs chair.  I did the fix this morning, its still not perfect, but it’s better now than it has been in a long time.  Mine use to be so bad that it would pop and creak every time I sat down or moved the smallest bit.  It’s now quiet through the mid range of its motion with the occasional pop when I sit down.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/secretlab/comments/s6ayop/if_anyone_else_is_having_sound_clicking_with/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIf anyone else is having sound clicking with chair : here is the document admitting it’s manufacturer defect.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf anyone else is having sound clicking with chair : here is the document admitting it’s manufacturer defect.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit \u0026middot; reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is definitely happening to my secretlabs chair.  I did the fix this morning, its still not perfect, but it's better now than it has been in a long time.  Mine use to be so bad that it would pop and creak every time I sat down or moved the smallest bit.  It's now quiet through the mid range of its motion with the occasional pop when I sit down.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reddit.com/r/secretlab/comments/s6ayop/if_else_having_clicking_with/",
      "date_published": "2024-11-25T22:28:46Z",
      "date_modified": "2024-11-25T22:28:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "office",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-435/",
      "url": "https://go.waylonwalker.com/thought-435/",
      "title": "💭 Changelog on X: \"🗣️@dhh on Kubernetes' migration pitch: “Oh, w...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/changelog/status/1860697708463378497\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eswitching cloud providers, theres no easy way.  K8s was supposed to get us there, haha, the deep integrations with each vendor just keep locking us in\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/changelog/status/1860697708463378497\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nswitching cloud providers, theres no easy way.  K8s was supposed to get us there, haha, the deep integrations with each vendor just keep locking us in\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/changelog/status/1860697708463378497",
      "date_published": "2024-11-25T02:30:44Z",
      "date_modified": "2024-11-25T02:30:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cloud",
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-434/",
      "url": "https://go.waylonwalker.com/thought-434/",
      "title": "💭 How to make a good first impression in business #dewalt #tools...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"dq0p_APdNME\" title=\"How to make a good first impression in business #dewalt #tools #smallbusiness\" playlabel=\"Play: How to make a good first impression in business #dewalt #tools #smallbusiness\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDang, love this guys branding.  Hooks to get stuff offDaBench, what a freaking cool name.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"dq0p_APdNME\" title=\"How to make a good first impression in business #dewalt #tools #smallbusiness\" playlabel=\"Play: How to make a good first impression in business #dewalt #tools #smallbusiness\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDang, love this guys branding.  Hooks to get stuff offDaBench, what a freaking cool name.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/dq0p_APdNME",
      "date_published": "2024-11-24T20:39:24Z",
      "date_modified": "2024-11-24T20:39:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/syllo-nvtop/",
      "url": "https://go.waylonwalker.com/syllo-nvtop/",
      "title": "⭐ Syllo nvtop",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/Syllo/nvtop\" 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\"\u003envtop\u003c/a\u003e by \u003ca href=\"https://github.com/Syllo\" 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\"\u003eSyllo\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eGPU \u0026amp; Accelerator process monitoring for AMD, Apple, Huawei, Intel, NVIDIA and Qualcomm\u003c/p\u003e\n",
      "content_text": "\nJust starred [nvtop](https://github.com/Syllo/nvtop) by [Syllo](https://github.com/Syllo). It's an exciting project with a lot to offer.\n\nGPU \u0026 Accelerator process monitoring for AMD, Apple, Huawei, Intel, NVIDIA and Qualcomm\n",
      "summary": "Just starred nvtop by Syllo. It's an exciting project with a lot to offer.",
      "date_published": "2024-11-24T16:26:01Z",
      "date_modified": "2024-11-24T16:26:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-433/",
      "url": "https://go.waylonwalker.com/thought-433/",
      "title": "💭 Inside Argo: Automating the Future - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ox3Gx3eCTCs\" title=\"Inside Argo: Automating the Future\" playlabel=\"Play: Inside Argo: Automating the Future\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a really amazing documentary of argocd.  I got into k8s pretty late in the game.  Which is pretty typical for me.  As I went to use k8s for the first time i was using workflows, then cd.  both of these tools had a level of polish that made them seem like they had been there forever and not quite as young as they actually are.\u003c/p\u003e\n\u003cp\u003eI thought it was interesting how they focused on how the name must be two syllables or less, start with a or b, logo needs to be cutesy funny and recognizable seemed interesting, but puts them at the top of lists and makes them look like they’ve been there forever.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ox3Gx3eCTCs\" title=\"Inside Argo: Automating the Future\" playlabel=\"Play: Inside Argo: Automating the Future\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is a really amazing documentary of argocd.  I got into k8s pretty late in the game.  Which is pretty typical for me.  As I went to use k8s for the first time i was using workflows, then cd.  both of these tools had a level of polish that made them seem like they had been there forever and not quite as young as they actually are.\n\nI thought it was interesting how they focused on how the name must be two syllables or less, start with a or b, logo needs to be cutesy funny and recognizable seemed interesting, but puts them at the top of lists and makes them look like they've been there forever.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ox3Gx3eCTCs",
      "date_published": "2024-11-22T02:29:00Z",
      "date_modified": "2024-11-22T02:29:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "argo",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/devfile-kubectl-debug-ide/",
      "url": "https://go.waylonwalker.com/devfile-kubectl-debug-ide/",
      "title": "⭐ devfile kubectl-debug-ide",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/devfile/kubectl-debug-ide\" 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\"\u003ekubectl-debug-ide\u003c/a\u003e from \u003ca href=\"https://github.com/devfile\" 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\"\u003edevfile\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA kubectl plugin to debug Pods from an IDE rather than the CLI\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [kubectl-debug-ide](https://github.com/devfile/kubectl-debug-ide) from [devfile](https://github.com/devfile).\n\nA kubectl plugin to debug Pods from an IDE rather than the CLI\n",
      "summary": "I'm impressed by kubectl-debug-ide from devfile.",
      "date_published": "2024-11-21T19:39:30Z",
      "date_modified": "2024-11-21T19:39:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-432/",
      "url": "https://go.waylonwalker.com/thought-432/",
      "title": "💭 Introduction - bootc",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://containers.github.io/bootc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003econtainers.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ebootc is the underlying technology that enables OS’s like bazzite, and Aurora from the uBlue ecosystem.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://containers.github.io/bootc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003econtainers.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nbootc is the underlying technology that enables OS's like bazzite, and Aurora from the uBlue ecosystem.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://containers.github.io/bootc/",
      "date_published": "2024-11-21T01:45:34Z",
      "date_modified": "2024-11-21T01:45:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-431/",
      "url": "https://go.waylonwalker.com/thought-431/",
      "title": "💭 Saghen/blink.cmp: Performant, batteries-included completion pl...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/Saghen/blink.cmp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/Saghen/blink.cmp\" alt=\"https://github.com/Saghen/blink.cmp\"/ data-glightbox=\"description: https://github.com/Saghen/blink.cmp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eA new completion plugin that I might give a try.  Readme makes it sound like its built on some fast teck that allows them to handle a lot of items and run more frequently.  The videos look like they don’t have some of the same issues cmp does for me.  Maybe its my configuration, but I’m pretty sure it does not update when you backspace and things like that.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/Saghen/blink.cmp](/static/https://github.com/Saghen/blink.cmp)\n\nA new completion plugin that I might give a try.  Readme makes it sound like its built on some fast teck that allows them to handle a lot of items and run more frequently.  The videos look like they don't have some of the same issues cmp does for me.  Maybe its my configuration, but I'm pretty sure it does not update when you backspace and things like that.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/Saghen/blink.cmp",
      "date_published": "2024-11-19T14:45:06Z",
      "date_modified": "2024-11-19T14:45:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-430/",
      "url": "https://go.waylonwalker.com/thought-430/",
      "title": "💭 Wes Bos on X: \"CSS Anchors: flip a tooltip to the bottom when ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/wesbos/status/1856724739336859713\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThese css anchors are crazy that you can do this with \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 and not a bunch of js, probably requiring a library or framework.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://x.com/i/status/1856724739336859713\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://x.com/i/status/1856724739336859713\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/wesbos/status/1856724739336859713\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThese css anchors are crazy that you can do this with html and not a bunch of js, probably requiring a library or framework.\n\n![](https://x.com/i/status/1856724739336859713)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/wesbos/status/1856724739336859713",
      "date_published": "2024-11-19T14:39:36Z",
      "date_modified": "2024-11-19T14:39:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "html",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/price-an-stl-print-on-slant3d/",
      "url": "https://go.waylonwalker.com/price-an-stl-print-on-slant3d/",
      "title": "price an stl print on slant3d",
      "content_html": "\u003cp\u003eI’ve been playing with 3d printing some items through the slant3d api.  I’ve\nbeen pricing out different prints by running a slice request through their api.\u003c/p\u003e\n\u003ch2 id=\"make-a-project\"\u003emake a project \u003ca href=\"#make-a-project\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve been using uv for project management. It’s been working well for quick\nprojects like this while making it reproducible, I’m still all in on hatch for\nlibraries.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir slantproject\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e slantproject\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv venv\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e. ./.venv/bin/activate\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv add httpx rich python-dotenv\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"get-an-api-key\"\u003eGet an api key \u003ca href=\"#get-an-api-key\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need an api key from the slant api, which currently requires a google\naccount and a credit card to create.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# .env\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#  replace with your api key from https://api-fe-two.vercel.app/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSLANT_API_KEY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esl-**\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"slicing-an-stl-with-teh-slant-api\"\u003eslicing an stl with teh slant api \u003ca href=\"#slicing-an-stl-with-teh-slant-api\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThen you can run the python script to price out your print.  I’m not exactly\nsure how this compares to an order, especially when you add in different\nmaterials.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003edotenv\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eload_dotenv\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ehttpx\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eload_dotenv\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estl_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapi_key\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenviron\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;SLANT_API_KEY\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapi\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehttpx\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eClient\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebase_url\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://www.slant3dapi.com/api/slicer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehttpx\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;https://www.slant3dapi.com/api/slicer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ejson\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;fileURL\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003estl_url\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;api-key\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eapi_key\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Content-Type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;application/json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etimeout\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e60\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejson\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been playing with 3d printing some items through the slant3d api.  I've\nbeen pricing out different prints by running a slice request through their api.\n\n## make a project\n\nI've been using uv for project management. It's been working well for quick\nprojects like this while making it reproducible, I'm still all in on hatch for\nlibraries.\n\n``` bash\nmkdir slantproject\ncd slantproject\nuv init\nuv venv\n. ./.venv/bin/activate\nuv add httpx rich python-dotenv\n```\n\n## Get an api key\n\nYou will need an api key from the slant api, which currently requires a google\naccount and a credit card to create.\n\n``` env\n# .env\n#  replace with your api key from https://api-fe-two.vercel.app/\nSLANT_API_KEY=sl-**\n```\n\n## slicing an stl with teh slant api\n\nThen you can run the python script to price out your print.  I'm not exactly\nsure how this compares to an order, especially when you add in different\nmaterials.\n\n``` python\nfrom dotenv import load_dotenv\nimport httpx\nimport os\n\nload_dotenv()\n\nstl_url = ''\napi_key = os.environ[\"SLANT_API_KEY\"]\n\napi = httpx.Client(base_url=\"https://www.slant3dapi.com/api/slicer\")\n\nres = httpx.post(\n    \"https://www.slant3dapi.com/api/slicer\",\n    json={\"fileURL\": stl_url},\n    headers={\"api-key\": api_key, \"Content-Type\": \"application/json\"},\n    timeout=60,\n)\n\n\nprint(res.json())\n```\n",
      "summary": "I've been playing with 3d printing some items through the slant3d api. I've been pricing out different prints by running a slice request through their api.",
      "date_published": "2024-11-18T15:29:30Z",
      "date_modified": "2024-11-18T15:29:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-429/",
      "url": "https://go.waylonwalker.com/thought-429/",
      "title": "💭 statically makes OG images **easy**",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cdn.statically.io/og/statically%20makes%20OG%20images%20**easy**\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/cdn.statically.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/cdn.statically.io.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecdn.statically.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eStaically makes creating \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eOG\u003c/a\u003e images so easy, you can just pop this in your  section with some og tags.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;og:image\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;og:image\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://cdn.statically.io/og/{{post.title}}\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;twitter:image\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;twitter:image\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://cdn.statically.io/og/{{post.title}}\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;og:image:height\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;640\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;og:image:width\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;1280\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cdn.statically.io/og/statically%20makes%20OG%20images%20**easy**\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecdn.statically.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nStaically makes creating OG images so easy, you can just pop this in your \u003chead\u003e section with some og tags.\n\n``` html\n    \u003cmeta name=\"og:image\" name=\"og:image\"\n        content=\"https://cdn.statically.io/og/{{post.title}}\" /\u003e\n    \u003cmeta name=\"twitter:image\" name=\"twitter:image\"\n        content=\"https://cdn.statically.io/og/{{post.title}}\" /\u003e\n    \u003cmeta name=\"og:image:height\" content=\"640\" /\u003e\n    \u003cmeta name=\"og:image:width\" content=\"1280\" /\u003e\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cdn.statically.io/og/statically%20makes%20OG%20images%20**",
      "date_published": "2024-11-17T21:48:04Z",
      "date_modified": "2024-11-17T21:48:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/willmcgugan-terminal-tree/",
      "url": "https://go.waylonwalker.com/willmcgugan-terminal-tree/",
      "title": "⭐ willmcgugan terminal-tree",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/willmcgugan/terminal-tree\" 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\"\u003eterminal-tree\u003c/a\u003e by \u003ca href=\"https://github.com/willmcgugan\" 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\"\u003ewillmcgugan\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [terminal-tree](https://github.com/willmcgugan/terminal-tree) by [willmcgugan](https://github.com/willmcgugan). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out terminal-tree by willmcgugan. It's a well-crafted project with great potential.",
      "date_published": "2024-11-17T17:58:43Z",
      "date_modified": "2024-11-17T17:58:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-428/",
      "url": "https://go.waylonwalker.com/thought-428/",
      "title": "💭 E576: Error while reading ShaDa file: there is an item at posi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/neovim/neovim/issues/6875\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/30733477464d3aa180e08454ece292f48c3b6f32cfe5254ed22b64b5c7eeafbc/neovim/neovim/issues/6875\" alt=\"E576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim — v0.2.0 Vim 8.0 works well. macOS Sierra 10.12.5 (16F73) iTerm2 v3.0.15 $TERM: screen-256color Actual behaviour When I start neovim by nvim, it prints an error message which is E576: Error while rea...\" loading=\"lazy\"/ data-glightbox=\"description: E576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim — v0.2.0 Vim 8.0 works well. macOS Sierra 10.12.5 (16F73) iTerm2 v3.0.15 $TERM: screen-256color Actual behaviour When I start neovim by nvim, it prints an error message which is E576: Error while rea...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eE576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ev0.2.0 Vim 8.0 works well. macOS Sierra 10.12.5 (16F73) iTerm2 v3.0.15 $TERM: screen-256color Actual behaviour When I start neovim by nvim, it prints an error message which is E576: Error while rea...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI hit an interesting error after updating my nvim plugins today.  I’m sti not even quite sure what a ShaDa file is, but I found min in my nvim state directory, unlike this issue that mentions it being in share.\u003c/p\u003e\n\u003cp\u003eThe Error.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eError while reading ShaDa file:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThe Fix\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.local/state/nvim/shada/main.shada ~/.local/state/nvim/shada/main.shada.bak\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/neovim/neovim/issues/6875\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/30733477464d3aa180e08454ece292f48c3b6f32cfe5254ed22b64b5c7eeafbc/neovim/neovim/issues/6875\" alt=\"E576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim — v0.2.0 Vim 8.0 works well. macOS Sierra 10.12.5 (16F73) iTerm2 v3.0.15 $TERM: screen-256color Actual behaviour When I start neovim by nvim, it prints an error message which is E576: Error while rea...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eE576: Error while reading ShaDa file: there is an item at position 270498 that must not be there: Missing itemsare for internal uses only · Issue #6875 · neovim/neovim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ev0.2.0 Vim 8.0 works well. macOS Sierra 10.12.5 (16F73) iTerm2 v3.0.15 $TERM: screen-256color Actual behaviour When I start neovim by nvim, it prints an error message which is E576: Error while rea...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI hit an interesting error after updating my nvim plugins today.  I'm sti not even quite sure what a ShaDa file is, but I found min in my nvim state directory, unlike this issue that mentions it being in share.\n\nThe Error.\n\n\u003e Error while reading ShaDa file:\n\nThe Fix\n\n``` bash\nmv ~/.local/state/nvim/shada/main.shada ~/.local/state/nvim/shada/main.shada.bak\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/neovim/neovim/issues/6875",
      "date_published": "2024-11-16T16:04:27Z",
      "date_modified": "2024-11-16T16:04:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-427/",
      "url": "https://go.waylonwalker.com/thought-427/",
      "title": "💭 Production-ready Python Docker Containers with uv",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hynek.me/articles/docker-uv/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.hynek.me/cards/docker-uv.png?c764cb8\" alt=\"Production-ready Python Docker Containers with uv — Starting with 0.3.0, Astral’s uv brought many great features, including support for cross-platform lock files uv.lock. Together with subsequent fixes, it has become Python’s finest workflow tool for my (non-scientific) use cases. Here’s how I build production-ready containers, as fast as possible.\" loading=\"lazy\"/ data-glightbox=\"description: Production-ready Python Docker Containers with uv — Starting with 0.3.0, Astral’s uv brought many great features, including support for cross-platform lock files uv.lock. Together with subsequent fixes, it has become Python’s finest workflow tool for my (non-scientific) use cases. Here’s how I build production-ready containers, as fast as possible.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProduction-ready Python Docker Containers with uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarting with 0.3.0, Astral’s uv brought many great features, including support for cross-platform lock files uv.lock. Together with subsequent fixes, it has become Python’s finest workflow too...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHynek Schlawack · hynek.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHynek has a sick dockerfile setup for using uv in python projects.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hynek.me/articles/docker-uv/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.hynek.me/cards/docker-uv.png?c764cb8\" alt=\"Production-ready Python Docker Containers with uv — Starting with 0.3.0, Astral’s uv brought many great features, including support for cross-platform lock files uv.lock. Together with subsequent fixes, it has become Python’s finest workflow tool for my (non-scientific) use cases. Here’s how I build production-ready containers, as fast as possible.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProduction-ready Python Docker Containers with uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarting with 0.3.0, Astral’s uv brought many great features, including support for cross-platform lock files uv.lock. Together with subsequent fixes, it has become Python’s finest workflow too...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHynek Schlawack \u0026middot; hynek.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHynek has a sick dockerfile setup for using uv in python projects.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hynek.me/articles/docker-uv/",
      "date_published": "2024-11-15T14:34:10Z",
      "date_modified": "2024-11-15T14:34:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "docker",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ironcalc-ironcalc/",
      "url": "https://go.waylonwalker.com/ironcalc-ironcalc/",
      "title": "⭐ ironcalc IronCalc",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/ironcalc/IronCalc\" 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\"\u003eIronCalc\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/ironcalc\" 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\"\u003eironcalc\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eMain engine of the IronCalc ecosystem\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [IronCalc](https://github.com/ironcalc/IronCalc), an amazing project by [ironcalc](https://github.com/ironcalc). It's worth exploring!\n\nMain engine of the IronCalc ecosystem\n",
      "summary": "I'm really excited about IronCalc, an amazing project by ironcalc. It's worth exploring!",
      "date_published": "2024-11-12T13:31:56Z",
      "date_modified": "2024-11-12T13:31:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-426/",
      "url": "https://go.waylonwalker.com/thought-426/",
      "title": "💭 Proper handling of None in WHERE condition · Issue #109 · fast...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/fastapi/sqlmodel/issues/109#issuecomment-1046223225\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/4ff8c5e0c53534cd26b8f6dfcad14ae1a8ae0fceb183a0517a84de53aa07b8d5/fastapi/sqlmodel/issues/109\" alt=\"Proper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel — First Check I added a very descriptive title to this issue. I used the GitHub search to find a similar issue and didn\u0026#39;t find it. I searched the SQLModel documentation, with the integrated search. I...\" loading=\"lazy\"/ data-glightbox=\"description: Proper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel — First Check I added a very descriptive title to this issue. I used the GitHub search to find a similar issue and didn\u0026#39;t find it. I searched the SQLModel documentation, with the integrated search. I...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFirst Check I added a very descriptive title to this issue. I used the GitHub search to find a similar issue and didn\u0026#39;t find it. I searched the SQLModel documentation, with the integrated search. I...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSQLModel models ship with an \u003ccode\u003eis_\u003c/code\u003e, and \u003ccode\u003eis_not\u003c/code\u003e that you can use to compare to None without pesky linters complaining.\u003c/p\u003e\n\u003cp\u003eThis comment summed it up quite well.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI believe this is concerned entirely with SQLAlchemy, not with SQLModel, and has to do with the required semantics to construct a BinaryExpression object.\nHero.age == None evaluates to a BinaryExpression object which is eventually used to construct the SQL query that the SQLAlchemy engine issues to your DBMS.\nHero.age is None evaluates to False immediately, and not a BinaryExpression, which short-circuits the query no matter the value of age in a row.\nFrom a cursory search, it does not seem that the is operator can be overridden in Python. This could help explain why the only possibility is by using the == operator, which can be overridden.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eso rather than using \u003ccode\u003eTeam.heros == None\u003c/code\u003e we can use \u003ccode\u003eTeam.seros.is_(None)\u003c/code\u003e which checks for itentity not equality.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/fastapi/sqlmodel/issues/109#issuecomment-1046223225\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4ff8c5e0c53534cd26b8f6dfcad14ae1a8ae0fceb183a0517a84de53aa07b8d5/fastapi/sqlmodel/issues/109\" alt=\"Proper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel — First Check I added a very descriptive title to this issue. I used the GitHub search to find a similar issue and didn\u0026#39;t find it. I searched the SQLModel documentation, with the integrated search. I...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProper handling of None in WHERE condition · Issue #109 · fastapi/sqlmodel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFirst Check I added a very descriptive title to this issue. I used the GitHub search to find a similar issue and didn\u0026#39;t find it. I searched the SQLModel documentation, with the integrated search. I...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSQLModel models ship with an `is_`, and `is_not` that you can use to compare to None without pesky linters complaining.\n\nThis comment summed it up quite well.\n\n\u003e I believe this is concerned entirely with SQLAlchemy, not with SQLModel, and has to do with the required semantics to construct a BinaryExpression object.\n\u003e Hero.age == None evaluates to a BinaryExpression object which is eventually used to construct the SQL query that the SQLAlchemy engine issues to your DBMS.\n\u003e Hero.age is None evaluates to False immediately, and not a BinaryExpression, which short-circuits the query no matter the value of age in a row.\n\u003e From a cursory search, it does not seem that the is operator can be overridden in Python. This could help explain why the only possibility is by using the == operator, which can be overridden.\n\n\nso rather than using `Team.heros == None` we can use `Team.seros.is_(None)` which checks for itentity not equality.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/fastapi/sqlmodel/issues/109#issuecomment-1046223225",
      "date_published": "2024-11-08T13:36:30Z",
      "date_modified": "2024-11-08T13:36:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "sqlmodel",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-424/",
      "url": "https://go.waylonwalker.com/thought-424/",
      "title": "💭 Rugged Storage Box, Parametric and Customizable by bulbasaur0 ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/637028-rugged-storage-box-parametric-and-customizable\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://media.printables.com/media/prints/637028/images/5907746_fa32cbb7-dff9-4cd2-8e7b-8b2792970d2c_c75eec5e-19a2-4506-a735-ad781334c8ac/thumbs/cover/1200x630/gif/photo-demo-inset.gif\" alt=\"Rugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com\" loading=\"lazy\"/ data-glightbox=\"description: Rugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePrintables.com · printables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNon Gridfinity Rugged boxes\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/637028-rugged-storage-box-parametric-and-customizable\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media.printables.com/media/prints/637028/images/5907746_fa32cbb7-dff9-4cd2-8e7b-8b2792970d2c_c75eec5e-19a2-4506-a735-ad781334c8ac/thumbs/cover/1200x630/gif/photo-demo-inset.gif\" alt=\"Rugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRugged Storage Box, Parametric and Customizable by bulbasaur0 | Download free STL model | Printables.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePrintables.com \u0026middot; printables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNon Gridfinity Rugged boxes\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.printables.com/model/637028-rugged-storage-box-parametric-and-customizable",
      "date_published": "2024-11-06T20:58:54Z",
      "date_modified": "2024-11-06T20:58:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gridfinity",
        "3d printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-423/",
      "url": "https://go.waylonwalker.com/thought-423/",
      "title": "💭 Gridfinity Rugged Storage Box, Parametric and Customizable by ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/757297-gridfinity-rugged-storage-box-parametric-and-custo/files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eprintables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003egridfinity rugged box openscad\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/757297-gridfinity-rugged-storage-box-parametric-and-custo/files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eprintables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ngridfinity rugged box openscad\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.printables.com/model/757297-gridfinity-rugged-storage-box-parametric-and-custo/files",
      "date_published": "2024-11-06T20:33:58Z",
      "date_modified": "2024-11-06T20:33:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/saghen-blink-cmp/",
      "url": "https://go.waylonwalker.com/saghen-blink-cmp/",
      "title": "⭐ saghen blink.cmp",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/saghen/blink.cmp\" 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\"\u003eblink.cmp\u003c/a\u003e, created by \u003ca href=\"https://github.com/saghen\" 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\"\u003esaghen\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePerformant, batteries-included completion plugin for Neovim\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [blink.cmp](https://github.com/saghen/blink.cmp), created by [saghen](https://github.com/saghen).\n\nPerformant, batteries-included completion plugin for Neovim \n",
      "summary": "If you're into interesting projects, don't miss out on blink.cmp, created by saghen.",
      "date_published": "2024-11-05T13:11:54Z",
      "date_modified": "2024-11-05T13:11:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-422/",
      "url": "https://go.waylonwalker.com/thought-422/",
      "title": "💭 Cluster API book",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cluster-api.sigs.k8s.io/reference/providers\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/cluster-api.sigs.k8s.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/cluster-api.sigs.k8s.io.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProvider List - The Cluster API Book\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecluster-api.sigs.k8s.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCluster API book\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cluster-api.sigs.k8s.io/reference/providers\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProvider List - The Cluster API Book\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecluster-api.sigs.k8s.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCluster API book\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cluster-api.sigs.k8s.io/reference/providers",
      "date_published": "2024-11-05T04:17:37Z",
      "date_modified": "2024-11-05T04:17:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/k3s-io-cluster-api-k3s/",
      "url": "https://go.waylonwalker.com/k3s-io-cluster-api-k3s/",
      "title": "⭐ k3s-io cluster-api-k3s",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/k3s-io/cluster-api-k3s\" 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\"\u003ecluster-api-k3s\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/k3s-io\" 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\"\u003ek3s-io\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eCluster API k3s\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [cluster-api-k3s](https://github.com/k3s-io/cluster-api-k3s), an amazing project by [k3s-io](https://github.com/k3s-io). It's worth exploring!\n\nCluster API k3s\n",
      "summary": "I'm really excited about cluster-api-k3s, an amazing project by k3s-io. It's worth exploring!",
      "date_published": "2024-11-05T04:14:53Z",
      "date_modified": "2024-11-05T04:14:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-421/",
      "url": "https://go.waylonwalker.com/thought-421/",
      "title": "💭 Gridfinity Generator",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gridfinity.perplexinglabs.com/pr/gridfinity-extended/0/0\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gridfinity.perplexinglabs.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gridfinity.perplexinglabs.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGridfinity Generator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egridfinity.perplexinglabs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGridfinity generator uses open scad, so you can make rugged boxes, bins and base plates with form input.  not fully custom fit to things, but you can custom size square bins, hole cut out sides and all.  From what I can tell, no bento box either. so as long as what you are looking for is square this generator has you pretty well covered.  I’m definitely using this for simple bins and rugged boxes.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gridfinity.perplexinglabs.com/pr/gridfinity-extended/0/0\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGridfinity Generator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egridfinity.perplexinglabs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGridfinity generator uses open scad, so you can make rugged boxes, bins and base plates with form input.  not fully custom fit to things, but you can custom size square bins, hole cut out sides and all.  From what I can tell, no bento box either. so as long as what you are looking for is square this generator has you pretty well covered.  I'm definitely using this for simple bins and rugged boxes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gridfinity.perplexinglabs.com/pr/gridfinity-extended/0/0",
      "date_published": "2024-11-04T16:29:57Z",
      "date_modified": "2024-11-04T16:29:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gridfinity",
        "3d printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-420/",
      "url": "https://go.waylonwalker.com/thought-420/",
      "title": "💭 Framework Portable handheld Case (Beth Deck) by Beth Le | Down...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/1051411-framework-portable-handheld-case-beth-deck\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://media.printables.com/media/prints/1051411/images/8072621_18985dc2-c9e6-4887-bce5-da5930a79af6_00e08a5b-4489-46cf-b9ac-a37c67ebe705/thumbs/cover/1200x630/jpg/pxl_20241109_032139964.jpg\" alt=\"Framework Portable handheld Case (Beth Deck rev. 1.5) by Beth Le | Download free STL model | Printables.com\" loading=\"lazy\"/ data-glightbox=\"description: Framework Portable handheld Case (Beth Deck rev. 1.5) by Beth Le | Download free STL model | Printables.com\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFramework Portable handheld Case (Beth Deck rev. 1.5) by Beth Le | Download free STL model | Printables.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePrintables.com · printables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe BethDeck is a sick looking DIY steam deck \u003cem\u003ecompetitor\u003c/em\u003e built on top of the framework 13\u0026#34; mainboard.  No soldering needed, lt with all off the shelf parts.  Controllers appear to be an off the shelf controller with the shell removed and plugged into a usb hub.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://media.printables.com/media/prints/1051411/images/7965723_09c13004-58b9-4868-b078-e3a66073d740_3b514c55-bb6b-4448-a216-842d7de48955/thumbs/inside/1600x1200/jpg/pxl_20240910_005549812.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://media.printables.com/media/prints/1051411/images/7965723_09c13004-58b9-4868-b078-e3a66073d740_3b514c55-bb6b-4448-a216-842d7de48955/thumbs/inside/1600x1200/jpg/pxl_20240910_005549812.webp\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/1051411-framework-portable-handheld-case-beth-deck\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media.printables.com/media/prints/1051411/images/8072621_18985dc2-c9e6-4887-bce5-da5930a79af6_00e08a5b-4489-46cf-b9ac-a37c67ebe705/thumbs/cover/1200x630/jpg/pxl_20241109_032139964.jpg\" alt=\"Framework Portable handheld Case (Beth Deck rev. 1.5) by Beth Le | Download free STL model | Printables.com\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFramework Portable handheld Case (Beth Deck rev. 1.5) by Beth Le | Download free STL model | Printables.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePrintables.com \u0026middot; printables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe BethDeck is a sick looking DIY steam deck _competitor_ built on top of the framework 13\" mainboard.  No soldering needed, lt with all off the shelf parts.  Controllers appear to be an off the shelf controller with the shell removed and plugged into a usb hub.\n\n![](https://media.printables.com/media/prints/1051411/images/7965723_09c13004-58b9-4868-b078-e3a66073d740_3b514c55-bb6b-4448-a216-842d7de48955/thumbs/inside/1600x1200/jpg/pxl_20240910_005549812.webp)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.printables.com/model/1051411-framework-portable-handheld-case-beth-deck",
      "date_published": "2024-11-01T15:44:26Z",
      "date_modified": "2024-11-01T15:44:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "steamdeck",
        "pc",
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-419/",
      "url": "https://go.waylonwalker.com/thought-419/",
      "title": "💭 My Favorite Fingerboard Obstacles \u0026 WHY - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"fDCmiL3qaL0\" title=\"My Favorite Fingerboard Obstacles \u0026amp; WHY\" playlabel=\"Play: My Favorite Fingerboard Obstacles \u0026amp; WHY\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e    I really like how Spencer walked through how to make quite a few unique setups with only a few simple obstacles.  It does not take anything fancy to have a cool setup.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"fDCmiL3qaL0\" title=\"My Favorite Fingerboard Obstacles \u0026amp; WHY\" playlabel=\"Play: My Favorite Fingerboard Obstacles \u0026amp; WHY\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n        I really like how Spencer walked through how to make quite a few unique setups with only a few simple obstacles.  It does not take anything fancy to have a cool setup.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=fDCmiL3qaL0",
      "date_published": "2024-10-31T01:27:56Z",
      "date_modified": "2024-10-31T01:27:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fingerboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-418/",
      "url": "https://go.waylonwalker.com/thought-418/",
      "title": "💭 Document how to provide a negative number as an argument · fas...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/fastapi/typer/discussions/798\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/2b48b76b8e15f361c37084d34fa4151bc54fda7ca95e0b320b739bd0f6075316/fastapi/typer/discussions/798\" alt=\"Document how to provide a negative number as an argument · fastapi typer · Discussion #798 — First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn\u0026#39;t find it. I searched the Typer documentation, with the integrated search. I already ...\" loading=\"lazy\"/ data-glightbox=\"description: Document how to provide a negative number as an argument · fastapi typer · Discussion #798 — First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn\u0026#39;t find it. I searched the Typer documentation, with the integrated search. I already ...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDocument how to provide a negative number as an argument · fastapi typer · Discussion #798\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFirst Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn\u0026#39;t find it. I searched the Typer documentation, with the integrated search. I already ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned that you cannot pass negative integers as values to typer.  in this case \u003ccode\u003econtext_settings={\u0026#34;ignore_unknown_options\u0026#34;: True}\u003c/code\u003e is required so that the \u003ccode\u003e-\u003c/code\u003e does not look like a flag.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# script name: main.py\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etyper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etyper\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTyper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.command\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003efailing\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003efloat\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"si\"\u003e=}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.command\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003econtext_settings\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ignore_unknown_options\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eworking_good\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003efloat\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"si\"\u003e=}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/fastapi/typer/discussions/798\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/2b48b76b8e15f361c37084d34fa4151bc54fda7ca95e0b320b739bd0f6075316/fastapi/typer/discussions/798\" alt=\"Document how to provide a negative number as an argument · fastapi typer · Discussion #798 — First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn\u0026#39;t find it. I searched the Typer documentation, with the integrated search. I already ...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDocument how to provide a negative number as an argument · fastapi typer · Discussion #798\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFirst Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn\u0026#39;t find it. I searched the Typer documentation, with the integrated search. I already ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned that you cannot pass negative integers as values to typer.  in this case `context_settings={\"ignore_unknown_options\": True}` is required so that the `-` does not look like a flag.\n\n``` python\n# script name: main.py\n\nimport typer\n\napp = typer.Typer()\n\n\n@app.command()\ndef failing(value: float):\n    print(f\"{value=}\")\n    \n\n@app.command(\n    context_settings={\"ignore_unknown_options\": True}\n)\ndef working_good(value: float):\n    print(f\"{value=}\")\n    \n    \nif __name__ == \"__main__\":\n    app()\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/fastapi/typer/discussions/798",
      "date_published": "2024-10-30T01:28:56Z",
      "date_modified": "2024-10-30T01:28:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "typer",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rommapp-romm/",
      "url": "https://go.waylonwalker.com/rommapp-romm/",
      "title": "⭐ rommapp romm",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rommapp\" 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\"\u003erommapp\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/rommapp/romm\" 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\"\u003eromm\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA beautiful, powerful, \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 rom manager\u003c/p\u003e\n",
      "content_text": "\n[rommapp](https://github.com/rommapp) has done a fantastic job with [romm](https://github.com/rommapp/romm). Highly recommend taking a look.\n\nA beautiful, powerful, self-hosted rom manager\n",
      "summary": "rommapp has done a fantastic job with romm. Highly recommend taking a look.",
      "date_published": "2024-10-29T16:14:11Z",
      "date_modified": "2024-10-29T16:14:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cz-nic-pz/",
      "url": "https://go.waylonwalker.com/cz-nic-pz/",
      "title": "⭐ CZ-NIC pz",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/CZ-NIC/pz\" 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\"\u003epz\u003c/a\u003e from \u003ca href=\"https://github.com/CZ-NIC\" 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\"\u003eCZ-NIC\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eEasily handle day to day CLI operation via Python instead of regular Bash programs. 🇺🇦 #supporting\u003c/p\u003e\n",
      "content_text": "\nI came across [pz](https://github.com/CZ-NIC/pz) from [CZ-NIC](https://github.com/CZ-NIC), and it's packed with great features and ideas.\n\nEasily handle day to day CLI operation via Python instead of regular Bash programs. 🇺🇦 #supporting\n",
      "summary": "I came across pz from CZ-NIC, and it's packed with great features and ideas.",
      "date_published": "2024-10-29T16:12:48Z",
      "date_modified": "2024-10-29T16:12:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-textual-demo/",
      "url": "https://go.waylonwalker.com/textualize-textual-demo/",
      "title": "⭐ Textualize textual-demo",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/Textualize/textual-demo\" 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\"\u003etextual-demo\u003c/a\u003e by \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eQuick access to the Textual demo\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [textual-demo](https://github.com/Textualize/textual-demo) by [Textualize](https://github.com/Textualize).\n\nQuick access to the Textual demo\n",
      "summary": "Looking for inspiration? textual-demo by Textualize.",
      "date_published": "2024-10-29T16:09:13Z",
      "date_modified": "2024-10-29T16:09:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fynnfluegge-rocketnotes/",
      "url": "https://go.waylonwalker.com/fynnfluegge-rocketnotes/",
      "title": "⭐ fynnfluegge rocketnotes",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/fynnfluegge/rocketnotes\" 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\"\u003erocketnotes\u003c/a\u003e from \u003ca href=\"https://github.com/fynnfluegge\" 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\"\u003efynnfluegge\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAI-powered markdown editor - leverage vector embeddings and LLMs with your personal notes - 100% local or in the cloud\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [rocketnotes](https://github.com/fynnfluegge/rocketnotes) from [fynnfluegge](https://github.com/fynnfluegge).\n\nAI-powered markdown editor - leverage vector embeddings and LLMs with your personal notes - 100% local or in the cloud\n",
      "summary": "I'm impressed by rocketnotes from fynnfluegge.",
      "date_published": "2024-10-29T16:04:58Z",
      "date_modified": "2024-10-29T16:04:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/airtai-faststream/",
      "url": "https://go.waylonwalker.com/airtai-faststream/",
      "title": "⭐ airtai faststream",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/airtai/faststream\" 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\"\u003efaststream\u003c/a\u003e by \u003ca href=\"https://github.com/airtai\" 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\"\u003eairtai\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eFastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis.\u003c/p\u003e\n",
      "content_text": "\n[faststream](https://github.com/airtai/faststream) by [airtai](https://github.com/airtai) is a game-changer in its space. Excited to see how it evolves.\n\nFastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis.\n",
      "summary": "faststream by airtai is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-10-29T15:15:21Z",
      "date_modified": "2024-10-29T15:15:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ag2ai-faststream/",
      "url": "https://go.waylonwalker.com/ag2ai-faststream/",
      "title": "⭐ ag2ai faststream",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/ag2ai/faststream\" 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\"\u003efaststream\u003c/a\u003e from \u003ca href=\"https://github.com/ag2ai\" 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\"\u003eag2ai\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eFastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis.\u003c/p\u003e\n",
      "content_text": "\nI came across [faststream](https://github.com/ag2ai/faststream) from [ag2ai](https://github.com/ag2ai), and it's packed with great features and ideas.\n\nFastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis.\n",
      "summary": "I came across faststream from ag2ai, and it's packed with great features and ideas.",
      "date_published": "2024-10-29T15:15:21Z",
      "date_modified": "2024-10-29T15:15:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/usememos-memos/",
      "url": "https://go.waylonwalker.com/usememos-memos/",
      "title": "⭐ usememos memos",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/usememos/memos\" 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\"\u003ememos\u003c/a\u003e by \u003ca href=\"https://github.com/usememos\" 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\"\u003eusememos\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn open-source, lightweight note-taking solution. The pain-less way to create your meaningful notes. Your Notes, Your Way.\u003c/p\u003e\n",
      "content_text": "\nThe work on [memos](https://github.com/usememos/memos) by [usememos](https://github.com/usememos).\n\nAn open-source, lightweight note-taking solution. The pain-less way to create your meaningful notes. Your Notes, Your Way.\n",
      "summary": "The work on memos by usememos.",
      "date_published": "2024-10-29T15:12:46Z",
      "date_modified": "2024-10-29T15:12:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-learn-kestra/",
      "url": "https://go.waylonwalker.com/pypeaday-learn-kestra/",
      "title": "⭐ pypeaday learn-kestra",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pypeaday/learn-kestra\" 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\"\u003elearn-kestra\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[pypeaday](https://github.com/pypeaday) has done a fantastic job with [learn-kestra](https://github.com/pypeaday/learn-kestra). Highly recommend taking a look.\n\nNo description available.\n",
      "summary": "pypeaday has done a fantastic job with learn-kestra. Highly recommend taking a look.",
      "date_published": "2024-10-29T15:08:43Z",
      "date_modified": "2024-10-29T15:08:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-learn-n8n/",
      "url": "https://go.waylonwalker.com/pypeaday-learn-n8n/",
      "title": "⭐ pypeaday learn-n8n",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pypeaday/learn-n8n\" 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\"\u003elearn-n8n\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[pypeaday](https://github.com/pypeaday) has done a fantastic job with [learn-n8n](https://github.com/pypeaday/learn-n8n). Highly recommend taking a look.\n\nNo description available.\n",
      "summary": "pypeaday has done a fantastic job with learn-n8n. Highly recommend taking a look.",
      "date_published": "2024-10-29T15:08:39Z",
      "date_modified": "2024-10-29T15:08:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-417/",
      "url": "https://go.waylonwalker.com/thought-417/",
      "title": "💭 Aaron Francis on X: \"📣 We're excited to announce Mastering Pos...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/aarondfrancis/status/1833533150674268469\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAaron Francis is a database master, pumped for thsi dude and all that he is able to accomplish.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/aarondfrancis/status/1833533150674268469\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAaron Francis is a database master, pumped for thsi dude and all that he is able to accomplish. \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/aarondfrancis/status/1833533150674268469",
      "date_published": "2024-10-27T02:52:38Z",
      "date_modified": "2024-10-27T02:52:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "database",
        "postgres",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-416/",
      "url": "https://go.waylonwalker.com/thought-416/",
      "title": "💭 Will McGugan on X: \"New Version of #Textual released! 😎🤓🦾 The ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/willmcgugan/status/1849831271289012463\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis new demo of textual is wildly awesome, so many widgets and features being added into the main library.  The themes and animations are on point and far surpass my expectations of a tui.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/willmcgugan/status/1849831271289012463\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis new demo of textual is wildly awesome, so many widgets and features being added into the main library.  The themes and animations are on point and far surpass my expectations of a tui.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/willmcgugan/status/1849831271289012463",
      "date_published": "2024-10-27T02:51:07Z",
      "date_modified": "2024-10-27T02:51:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "tui",
        "textual",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-415/",
      "url": "https://go.waylonwalker.com/thought-415/",
      "title": "💭 ticklemykeys on X: \"Porta john got some pink caps https://t.co...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1850361138791195069\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eLoving this 6 pink with blueforward multicolor combo the porta john has going right now.  Also my son printed me a cute black pumpkin.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1850361138791195069\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLoving this 6 pink with blueforward multicolor combo the porta john has going right now.  Also my son printed me a cute black pumpkin.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/XTicklemykeys/status/1850361138791195069",
      "date_published": "2024-10-27T02:20:51Z",
      "date_modified": "2024-10-27T02:20:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "ticklemykeys",
        "3dprinting",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joshmedeski-sesh/",
      "url": "https://go.waylonwalker.com/joshmedeski-sesh/",
      "title": "⭐ joshmedeski sesh",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/joshmedeski\" 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\"\u003ejoshmedeski’s\u003c/a\u003e project \u003ca href=\"https://github.com/joshmedeski/sesh\" 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\"\u003esesh\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSmart session manager for the terminal\u003c/p\u003e\n",
      "content_text": "\nI like [joshmedeski's](https://github.com/joshmedeski) project [sesh](https://github.com/joshmedeski/sesh).\n\nSmart session manager for the terminal\n",
      "summary": "I like joshmedeski's project sesh.",
      "date_published": "2024-10-25T19:20:23Z",
      "date_modified": "2024-10-25T19:20:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvzone-menu/",
      "url": "https://go.waylonwalker.com/nvzone-menu/",
      "title": "⭐ nvzone menu",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/nvzone/menu\" 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\"\u003emenu\u003c/a\u003e by \u003ca href=\"https://github.com/nvzone\" 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\"\u003envzone\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMenu plugin for neovim ( supports nested menus ) made using volt\u003c/p\u003e\n",
      "content_text": "\nThe work on [menu](https://github.com/nvzone/menu) by [nvzone](https://github.com/nvzone).\n\nMenu plugin for neovim ( supports nested menus ) made using volt\n",
      "summary": "The work on menu by nvzone.",
      "date_published": "2024-10-20T16:40:43Z",
      "date_modified": "2024-10-20T16:40:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-414/",
      "url": "https://go.waylonwalker.com/thought-414/",
      "title": "💭 Not a split keyboard, but perhaps a companion to one: the Ploo...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/ErgoMechKeyboards/comments/1g5phts/not_a_split_keyboard_but_perhaps_a_companion_to/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.reddit.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.reddit.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNot a split keyboard, but perhaps a companion to one: the Ploopy Trackpad. An open-source trackpad powered by QMK. All design files available for free. Complete assembly instructions. See comments for details.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNot a split keyboard, but perhaps a companion to one: the Ploopy Trackpad. An open-source trackpad powered by QMK. All design files available for free. Complete assembly instructions. See comments ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit · reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eploopy just dropped a trackpad that runs qmk.  This sounds so cool.  I’m excited to see some videos on it.  It would be sick to get this incorporated into a porta john running zmk, one bluetooth device to run all the peripherals.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/ErgoMechKeyboards/comments/1g5phts/not_a_split_keyboard_but_perhaps_a_companion_to/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNot a split keyboard, but perhaps a companion to one: the Ploopy Trackpad. An open-source trackpad powered by QMK. All design files available for free. Complete assembly instructions. See comments for details.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNot a split keyboard, but perhaps a companion to one: the Ploopy Trackpad. An open-source trackpad powered by QMK. All design files available for free. Complete assembly instructions. See comments ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit \u0026middot; reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nploopy just dropped a trackpad that runs qmk.  This sounds so cool.  I'm excited to see some videos on it.  It would be sick to get this incorporated into a porta john running zmk, one bluetooth device to run all the peripherals.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reddit.com/r/ErgoMechKeyboards/comments/1g5phts/not_split_but_a_to/",
      "date_published": "2024-10-20T00:02:57Z",
      "date_modified": "2024-10-20T00:02:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "qmk",
        "keyboard",
        "trackpad",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-413/",
      "url": "https://go.waylonwalker.com/thought-413/",
      "title": "💭 Install a Zulip server — Zulip 9.2 documentation",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://zulip.readthedocs.io/en/stable/production/install.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://zulip.readthedocs.io/en/stable/production/install.html\" alt=\"https://zulip.readthedocs.io/en/stable/production/install.html\"/ data-glightbox=\"description: https://zulip.readthedocs.io/en/stable/production/install.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eZulip was just featured on a changelog clip as a \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 chat offering.  I’m interested to give this a go and see how it compares to matrix.  glancing at it, it looks a lot like slack.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://zulip.readthedocs.io/en/stable/production/install.html](/static/https://zulip.readthedocs.io/en/stable/production/install.html)\n\nZulip was just featured on a changelog clip as a self-hosted chat offering.  I'm interested to give this a go and see how it compares to matrix.  glancing at it, it looks a lot like slack.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://zulip.readthedocs.io/en/stable/production/install.html",
      "date_published": "2024-10-16T15:12:47Z",
      "date_modified": "2024-10-16T15:12:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "zulip",
        "chat",
        "self-hosted",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/exafunction-windsurf-nvim/",
      "url": "https://go.waylonwalker.com/exafunction-windsurf-nvim/",
      "title": "⭐ Exafunction windsurf.nvim",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/Exafunction/windsurf.nvim\" 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\"\u003ewindsurf.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/Exafunction\" 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\"\u003eExafunction\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA native neovim extension for Codeium\u003c/p\u003e\n",
      "content_text": "\nJust starred [windsurf.nvim](https://github.com/Exafunction/windsurf.nvim) by [Exafunction](https://github.com/Exafunction). It's an exciting project with a lot to offer.\n\nA native neovim extension for Codeium\n",
      "summary": "Just starred windsurf.nvim by Exafunction. It's an exciting project with a lot to offer.",
      "date_published": "2024-10-15T22:07:25Z",
      "date_modified": "2024-10-15T22:07:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/exafunction-codeium-nvim/",
      "url": "https://go.waylonwalker.com/exafunction-codeium-nvim/",
      "title": "⭐ Exafunction codeium.nvim",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/Exafunction/codeium.nvim\" 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\"\u003ecodeium.nvim\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/Exafunction\" 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\"\u003eExafunction\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA native neovim extension for Codeium\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [codeium.nvim](https://github.com/Exafunction/codeium.nvim), an amazing project by [Exafunction](https://github.com/Exafunction). It's worth exploring!\n\nA native neovim extension for Codeium\n",
      "summary": "I'm really excited about codeium.nvim, an amazing project by Exafunction. It's worth exploring!",
      "date_published": "2024-10-15T22:07:25Z",
      "date_modified": "2024-10-15T22:07:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-412/",
      "url": "https://go.waylonwalker.com/thought-412/",
      "title": "💭 Pin versions of dependencies · Issue #2200 · Kozea/WeasyPrint",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/Kozea/WeasyPrint/issues/2200\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/52ff13e577e4566fde50e9480a0dcaa7d42e48d98c94622c49fdf908ecb6d961/Kozea/WeasyPrint/issues/2200\" alt=\"Pin versions of dependencies · Issue #2200 · Kozea/WeasyPrint — Stack trace: pdf = HTML(file_obj=html, base_url=\u0026#39;/\u0026#39;).write_pdf() File \u0026#34;/service/venv/lib/python3.9/site-packages/weasyprint/__init__.py\u0026#34;, line 252, in write_pdf self.render(font_config, counter_sty...\" loading=\"lazy\"/ data-glightbox=\"description: Pin versions of dependencies · Issue #2200 · Kozea/WeasyPrint — Stack trace: pdf = HTML(file_obj=html, base_url=\u0026#39;/\u0026#39;).write_pdf() File \u0026#34;/service/venv/lib/python3.9/site-packages/weasyprint/__init__.py\u0026#34;, line 252, in write_pdf self.render(font_config, counter_sty...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePin versions of dependencies · Issue #2200 · Kozea/WeasyPrint\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStack trace: pdf = HTML(file_obj=html, base_url=\u0026#39;/\u0026#39;).write_pdf() File \u0026#34;/service/venv/lib/python3.9/site-packages/weasyprint/__init__.py\u0026#34;, line 252, in write_pdf self.render(font_config, counter_sty...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eweazyprint was throwing me some errors, turns out that it’s currently not compatible with the latest pydyf package.\u003c/p\u003e\n\u003cp\u003emy error\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eTypeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003etakes\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"n\"\u003epositional\u003c/span\u003e \u003cspan class=\"n\"\u003eargument\u003c/span\u003e \u003cspan class=\"n\"\u003ebut\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e \u003cspan class=\"n\"\u003ewere\u003c/span\u003e \u003cspan class=\"n\"\u003egive\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI fixed it by locking in pydyf at 0.8.0\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epydyf==0.8.0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/Kozea/WeasyPrint/issues/2200\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/52ff13e577e4566fde50e9480a0dcaa7d42e48d98c94622c49fdf908ecb6d961/Kozea/WeasyPrint/issues/2200\" alt=\"Pin versions of dependencies · Issue #2200 · Kozea/WeasyPrint — Stack trace: pdf = HTML(file_obj=html, base_url=\u0026#39;/\u0026#39;).write_pdf() File \u0026#34;/service/venv/lib/python3.9/site-packages/weasyprint/__init__.py\u0026#34;, line 252, in write_pdf self.render(font_config, counter_sty...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePin versions of dependencies · Issue #2200 · Kozea/WeasyPrint\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStack trace: pdf = HTML(file_obj=html, base_url=\u0026#39;/\u0026#39;).write_pdf() File \u0026#34;/service/venv/lib/python3.9/site-packages/weasyprint/__init__.py\u0026#34;, line 252, in write_pdf self.render(font_config, counter_sty...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nweazyprint was throwing me some errors, turns out that it's currently not compatible with the latest pydyf package.\n\nmy error\n\n``` python\nTypeError: __init__() takes 1 positional argument but 3 were give\n```\n\nI fixed it by locking in pydyf at 0.8.0\n\n``` txt\npydyf==0.8.0\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/Kozea/WeasyPrint/issues/2200",
      "date_published": "2024-10-11T13:36:19Z",
      "date_modified": "2024-10-11T13:36:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-411/",
      "url": "https://go.waylonwalker.com/thought-411/",
      "title": "💭 These are SICK, gonna be using this a lot. (Thanks @evantraver...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jesseleite/dotfiles/commit/49794006cbc9dc0e743925ec1a7122514d7148be\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/bd31a4bee1259919d900145e419dcfd6877bf185aeed1d9876984fb32ac8bd04/jesseleite/dotfiles/commit/49794006cbc9dc0e743925ec1a7122514d7148be\" alt=\"These are SICK, gonna be using this a lot. (Thanks @evantravers 🥰.) · jesseleite/dotfiles@4979400 — My dotfiles 💾. Contribute to jesseleite/dotfiles development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: These are SICK, gonna be using this a lot. (Thanks @evantravers 🥰.) · jesseleite/dotfiles@4979400 — My dotfiles 💾. Contribute to jesseleite/dotfiles development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThese are SICK, gonna be using this a lot. (Thanks @evantravers 🥰.) · jesseleite/dotfiles@4979400\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMy dotfiles 💾. Contribute to jesseleite/dotfiles development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ehelix inspired treesitter select outwards and select inwards.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jesseleite/dotfiles/commit/49794006cbc9dc0e743925ec1a7122514d7148be\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/bd31a4bee1259919d900145e419dcfd6877bf185aeed1d9876984fb32ac8bd04/jesseleite/dotfiles/commit/49794006cbc9dc0e743925ec1a7122514d7148be\" alt=\"These are SICK, gonna be using this a lot. (Thanks @evantravers 🥰.) · jesseleite/dotfiles@4979400 — My dotfiles 💾. Contribute to jesseleite/dotfiles development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThese are SICK, gonna be using this a lot. (Thanks @evantravers 🥰.) · jesseleite/dotfiles@4979400\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMy dotfiles 💾. Contribute to jesseleite/dotfiles development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nhelix inspired treesitter select outwards and select inwards.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/jesseleite/dotfiles/commit/49794006cbc9dc0e743925ec1a7122514d7148be",
      "date_published": "2024-10-11T01:09:17Z",
      "date_modified": "2024-10-11T01:09:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-410/",
      "url": "https://go.waylonwalker.com/thought-410/",
      "title": "💭 add helix · WaylonWalker/devtainer@71b9b29",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/71b9b29baf14f3714601d022ca12c3417437395b\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/fd1687e75f5d7b4f4cbf56811cf735b18459df46b99be7418d115c9ac332f56a/WaylonWalker/devtainer/commit/71b9b29baf14f3714601d022ca12c3417437395b\" alt=\"add helix · WaylonWalker/devtainer@71b9b29 — 🐳 (dotfiles) My personal development docker container base image - add helix · WaylonWalker/devtainer@71b9b29\" loading=\"lazy\"/ data-glightbox=\"description: add helix · WaylonWalker/devtainer@71b9b29 — 🐳 (dotfiles) My personal development docker container base image - add helix · WaylonWalker/devtainer@71b9b29\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eadd helix · WaylonWalker/devtainer@71b9b29\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🐳 (dotfiles) My personal development docker container base image - add helix · WaylonWalker/devtainer@71b9b29\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHelix officially made it in my devtainer.   I am installing the binary right out of the github release with wget and tar.  I can’t use installer because their release format does not match what installer is looking for.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003e:\u003c/p\u003e\n\u003cp\u003eI also move the runtime over to /usr/local/share/helix/runtime.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003e:\u003c/p\u003e\n\u003cp\u003eI use /usr/local/bin rather than my home directory as it works better with distrobox.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/71b9b29baf14f3714601d022ca12c3417437395b\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/fd1687e75f5d7b4f4cbf56811cf735b18459df46b99be7418d115c9ac332f56a/WaylonWalker/devtainer/commit/71b9b29baf14f3714601d022ca12c3417437395b\" alt=\"add helix · WaylonWalker/devtainer@71b9b29 — 🐳 (dotfiles) My personal development docker container base image - add helix · WaylonWalker/devtainer@71b9b29\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eadd helix · WaylonWalker/devtainer@71b9b29\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🐳 (dotfiles) My personal development docker container base image - add helix · WaylonWalker/devtainer@71b9b29\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHelix officially made it in my devtainer.   I am installing the binary right out of the github release with wget and tar.  I can't use installer because their release format does not match what installer is looking for.  \n\n!!! note: \n   I also move the runtime over to /usr/local/share/helix/runtime.\n\n!!! note: \n   I use /usr/local/bin rather than my home directory as it works better with distrobox.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/devtainer/commit/71b9b29baf14f3714601d022ca12c3417437395b",
      "date_published": "2024-10-11T01:05:03Z",
      "date_modified": "2024-10-11T01:05:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-409/",
      "url": "https://go.waylonwalker.com/thought-409/",
      "title": "💭 helix-vim/config.toml at master · LGUG2Z/helix-vim",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/LGUG2Z/helix-vim/blob/master/config.toml\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/LGUG2Z/helix-vim/blob/master/config.toml\" alt=\"https://github.com/LGUG2Z/helix-vim/blob/master/config.toml\"/ data-glightbox=\"description: https://github.com/LGUG2Z/helix-vim/blob/master/config.toml\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eHere are some really great keybinds to make helix vim-like.  It feels very antithetical to use this whole sale and forego the helix motion-verb language, but there are some nuggets like G in here that I find useful.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/LGUG2Z/helix-vim/blob/master/config.toml](/static/https://github.com/LGUG2Z/helix-vim/blob/master/config.toml)\n\nHere are some really great keybinds to make helix vim-like.  It feels very antithetical to use this whole sale and forego the helix motion-verb language, but there are some nuggets like G in here that I find useful.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/LGUG2Z/helix-vim/blob/master/config.toml",
      "date_published": "2024-10-09T15:37:18Z",
      "date_modified": "2024-10-09T15:37:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-408/",
      "url": "https://go.waylonwalker.com/thought-408/",
      "title": "💭 Support regex substitution command · Issue #2232 · helix-edito...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232#issuecomment-1250371051\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"/ data-glightbox=\"description: Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ehelix multicursor has the ability to do what vims \u003ccode\u003e:s/hello/world/gc\u003c/code\u003e does by using \u003ccode\u003e)\u003c/code\u003e to cycle through cursors, and \u003ccode\u003en\u003c/code\u003e to discard unwanted cursors.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232#issuecomment-1250371051\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nhelix multicursor has the ability to do what vims `:s/hello/world/gc` does by using `)` to cycle through cursors, and `n` to discard unwanted cursors.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/helix-editor/helix/issues/2232#issuecomment-1250371051",
      "date_published": "2024-10-08T13:39:41Z",
      "date_modified": "2024-10-08T13:39:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-407/",
      "url": "https://go.waylonwalker.com/thought-407/",
      "title": "💭 Support regex substitution command · Issue #2232 · helix-edito...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232#issuecomment-1228632218\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"/ data-glightbox=\"description: Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHere is a really good vim substitute with regex capture groups, saving this one for a rainy day.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e Reading 1: This is a title to a link\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e Reading 2: This is another title\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003e:%s/\\v(: )(.+)$/\\1\\[\\2\\]\\(\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e Reading 1: [This is a title to a link](\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e Reading 2: [This is another title](\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232#issuecomment-1228632218\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHere is a really good vim substitute with regex capture groups, saving this one for a rainy day.\n\n\n``` md\n* Reading 1: This is a title to a link\n* Reading 2: This is another title\n```\n\n`:%s/\\v(: )(.+)$/\\1\\[\\2\\]\\(`\n\n``` md\n* Reading 1: [This is a title to a link](\n* Reading 2: [This is another title](\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/helix-editor/helix/issues/2232#issuecomment-1228632218",
      "date_published": "2024-10-08T13:36:25Z",
      "date_modified": "2024-10-08T13:36:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "regex",
        "refactoring",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-406/",
      "url": "https://go.waylonwalker.com/thought-406/",
      "title": "💭 Support regex substitution command · Issue #2232 · helix-edito...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232#issuecomment-1107644740\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"/ data-glightbox=\"description: Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting take on refactoring the whole codebase from your editor.  In this thread the-mikedavis suggests multicursor as a replacement for substitute, and later in the thread takes the side that larger workspace wide edits are outside the scope of helix and he would reach for a refactoring tool like \u003ca href=\"https://github.com/facebookincubator/fastmod?tab=readme-ov-file\" 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\"\u003efastmod\u003c/a\u003e to do the job.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232#issuecomment-1107644740\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting take on refactoring the whole codebase from your editor.  In this thread the-mikedavis suggests multicursor as a replacement for substitute, and later in the thread takes the side that larger workspace wide edits are outside the scope of helix and he would reach for a refactoring tool like [fastmod](https://github.com/facebookincubator/fastmod?tab=readme-ov-file) to do the job.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/helix-editor/helix/issues/2232#issuecomment-1107644740",
      "date_published": "2024-10-08T13:33:44Z",
      "date_modified": "2024-10-08T13:33:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "refactoring",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/facebookincubator-fastmod/",
      "url": "https://go.waylonwalker.com/facebookincubator-fastmod/",
      "title": "⭐ facebookincubator fastmod",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/facebookincubator\" 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\"\u003efacebookincubator’s\u003c/a\u003e project \u003ca href=\"https://github.com/facebookincubator/fastmod\" 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\"\u003efastmod\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA fast partial replacement for the codemod tool\u003c/p\u003e\n",
      "content_text": "\nI like [facebookincubator's](https://github.com/facebookincubator) project [fastmod](https://github.com/facebookincubator/fastmod).\n\nA fast partial replacement for the codemod tool\n",
      "summary": "I like facebookincubator's project fastmod.",
      "date_published": "2024-10-08T13:16:32Z",
      "date_modified": "2024-10-08T13:16:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-405/",
      "url": "https://go.waylonwalker.com/thought-405/",
      "title": "💭 Support regex substitution command · Issue #2232 · helix-edito...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"/ data-glightbox=\"description: Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI am a heavy user off substitutions in vim, helix does not substitutions built in, rather it leans on multicursor support.\u003c/p\u003e\n\u003cp\u003eto replace every instance of hello with world in vim\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e:%s/hello/world/g\u0026lt;CR\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eand in helix you would\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e%shello\u0026lt;CR\u0026gt;cworld\u0026lt;ESC\u0026gt;,\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/2232\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6070a27597ac258b977bcb6e14aad6075dc9a5bba312a6b515fc74353a5b7731/helix-editor/helix/issues/2232\" alt=\"Support regex substitution command  · Issue #2232 · helix-editor/helix — Support regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSupport regex substitution command  · Issue #2232 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSupport regex substitution, comparable to vim :s or VSCode search \u0026amp; replace. I propose supporting regex replacements for selection s, files/, and the workspace scopes \u0026lt;space\u0026gt; + /. This could be acc...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI am a heavy user off substitutions in vim, helix does not substitutions built in, rather it leans on multicursor support.\n\nto replace every instance of hello with world in vim\n\n``` text\n:%s/hello/world/g\u003cCR\u003e\n```\n\nand in helix you would\n\n``` text\n%shello\u003cCR\u003ecworld\u003cESC\u003e,\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/helix-editor/helix/issues/2232",
      "date_published": "2024-10-08T13:12:24Z",
      "date_modified": "2024-10-08T13:12:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-404/",
      "url": "https://go.waylonwalker.com/thought-404/",
      "title": "💭 Background Image | Wallpaper · Issue #3059 · helix-editor/helix",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/3059\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/50aa0ae7f1ef9a5a82fb25876a3c27bf548b77347c730bc66182681ebc4ea221/helix-editor/helix/issues/3059\" alt=\"Background Image | Wallpaper · Issue #3059 · helix-editor/helix — Describe your feature request Hey ! It\u0026#39;d be cool to have the ability to set a background-image on supported terminals (like kitty). Like on IntelliJ: Here is an example of what it\u0026#39;d be on helix:\" loading=\"lazy\"/ data-glightbox=\"description: Background Image | Wallpaper · Issue #3059 · helix-editor/helix — Describe your feature request Hey ! It\u0026#39;d be cool to have the ability to set a background-image on supported terminals (like kitty). Like on IntelliJ: Here is an example of what it\u0026#39;d be on helix:\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackground Image | Wallpaper · Issue #3059 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDescribe your feature request Hey ! It\u0026#39;d be cool to have the ability to set a background-image on supported terminals (like kitty). Like on IntelliJ: Here is an example of what it\u0026#39;d be on helix:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHow to make helix themes transparent.  You can make any built-in theme transparent in helix with one line, a few extras and you can make all the pop ups, help menus and status line trransparant as well.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p ~/.config/helix/themes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehx\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003e:o ~/.config/helix/themes/dracula_transparant.toml\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ~/.config/helix/themes/dracula_transparant.toml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003einherits\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;dracula\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.background\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;foreground\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.menu\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;white\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.popup\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;white\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.window\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;white\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.help\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;light-gray\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.statusline\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gray\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ui.statusline.inactive\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003efg\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;black\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003e:config-edit\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ~/.config/helix/config.toml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etheme\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;dracula_transparant\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/issues/3059\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/50aa0ae7f1ef9a5a82fb25876a3c27bf548b77347c730bc66182681ebc4ea221/helix-editor/helix/issues/3059\" alt=\"Background Image | Wallpaper · Issue #3059 · helix-editor/helix — Describe your feature request Hey ! It\u0026#39;d be cool to have the ability to set a background-image on supported terminals (like kitty). Like on IntelliJ: Here is an example of what it\u0026#39;d be on helix:\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackground Image | Wallpaper · Issue #3059 · helix-editor/helix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDescribe your feature request Hey ! It\u0026#39;d be cool to have the ability to set a background-image on supported terminals (like kitty). Like on IntelliJ: Here is an example of what it\u0026#39;d be on helix:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHow to make helix themes transparent.  You can make any built-in theme transparent in helix with one line, a few extras and you can make all the pop ups, help menus and status line trransparant as well.\n\n``` bash\nmkdir -p ~/.config/helix/themes\nhx\n```\n\n`:o ~/.config/helix/themes/dracula_transparant.toml`\n\n``` toml\n# ~/.config/helix/themes/dracula_transparant.toml\ninherits = \"dracula\"\n\"ui.background\" = { fg = \"foreground\" }\n\"ui.menu\" = { fg = \"white\" }\n\"ui.popup\" = { fg = \"white\" }\n\"ui.window\" = { fg = \"white\" }\n\"ui.help\" = { fg = \"light-gray\" }\n\n\"ui.statusline\" = { fg = \"gray\" }\n\"ui.statusline.inactive\" = { fg = \"black\" }\n```\n\n`:config-edit`\n\n``` toml\n# ~/.config/helix/config.toml\ntheme=\"dracula_transparant\"\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/helix-editor/helix/issues/3059",
      "date_published": "2024-10-08T13:02:53Z",
      "date_modified": "2024-10-08T13:02:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-403/",
      "url": "https://go.waylonwalker.com/thought-403/",
      "title": "💭 help on setting up ruff formatter + ruff + pyright please : r/...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/HelixEditor/comments/17gglgm/help_on_setting_up_ruff_formatter_ruff_pyright/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.reddit.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.reddit.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehelp on setting up ruff formatter + ruff + pyright please\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehelp on setting up ruff formatter + ruff + pyright please\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit · reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis post shows how to set up multiple LSP’s in helix, the example uses pyright and ruff-lsp for python.\u003c/p\u003e\n\u003cp\u003eAdd this to your \u003ccode\u003e~/.config/helix/languages.toml\u003c/code\u003e\na\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003elanguage\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;python\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eauto-format\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elanguage-servers\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pyright\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ruff-lsp\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003elanguage-server\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epyright\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecommand\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pyright-langserver\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eargs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--stdio\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003econfig\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003elanguage-server\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eruff-lsp\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecommand\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ruff-lsp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eargs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003econfig\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/HelixEditor/comments/17gglgm/help_on_setting_up_ruff_formatter_ruff_pyright/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehelp on setting up ruff formatter + ruff + pyright please\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehelp on setting up ruff formatter + ruff + pyright please\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit \u0026middot; reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis post shows how to set up multiple LSP's in helix, the example uses pyright and ruff-lsp for python.\n\nAdd this to your `~/.config/helix/languages.toml`\na\n``` toml\n[[language]]\nname = \"python\"\nauto-format = true\nlanguage-servers = [\n    {name = \"pyright\"},\n    {name = \"ruff-lsp\"},\n]\n\n[language-server.pyright]\ncommand = \"pyright-langserver\"\nargs = [\"--stdio\"]\nconfig = {}\n\n[language-server.ruff-lsp]\ncommand = \"ruff-lsp\"\nargs = []\nconfig = {}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reddit.com/r/HelixEditor/comments/17gglgm/help_setting_ruff_ruff_pyright/",
      "date_published": "2024-10-08T02:25:37Z",
      "date_modified": "2024-10-08T02:25:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-402/",
      "url": "https://go.waylonwalker.com/thought-402/",
      "title": "💭 configuring pylsp · helix-editor/helix · Discussion #6623",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/discussions/6623\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/1ba4c03690ca8a923b94a9be9e0f2a4bdf547127428cf443bf525cf93b4bb3d6/helix-editor/helix/discussions/6623\" alt=\"configuring pylsp · helix-editor helix · Discussion #6623 — Hi, I\u0026#39;m trying to make some modifications to the default pylsp settings as I do not strictly follow PEP in my personal projects. I googled some examples but I cannot get them to work, so I am wonde...\" loading=\"lazy\"/ data-glightbox=\"description: configuring pylsp · helix-editor helix · Discussion #6623 — Hi, I\u0026#39;m trying to make some modifications to the default pylsp settings as I do not strictly follow PEP in my personal projects. I googled some examples but I cannot get them to work, so I am wonde...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003econfiguring pylsp · helix-editor helix · Discussion #6623\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHi, I\u0026#39;m trying to make some modifications to the default pylsp settings as I do not strictly follow PEP in my personal projects. I googled some examples but I cannot get them to work, so I am wonde...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHow to set your python formatter to black with helix.  The following snippet lays out how to set the helix editor to auto-format on save with the black formatter.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003elanguage\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;python\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elanguage-servers\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pylsp\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003elanguage-server\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epylsp\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epylsp\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eplugins\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epyls_mypy\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eenabled\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eplugins\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epyls_mypy\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003elive_mode\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eplugins\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eflake8\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003emaxLineLength\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e88\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eplugins\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epycodestyle\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003emaxLineLength\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e88\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003elanguage\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eformatter\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecommand\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;black\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eargs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--line-length\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;88\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;--quiet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;-\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/helix-editor/helix/discussions/6623\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/1ba4c03690ca8a923b94a9be9e0f2a4bdf547127428cf443bf525cf93b4bb3d6/helix-editor/helix/discussions/6623\" alt=\"configuring pylsp · helix-editor helix · Discussion #6623 — Hi, I\u0026#39;m trying to make some modifications to the default pylsp settings as I do not strictly follow PEP in my personal projects. I googled some examples but I cannot get them to work, so I am wonde...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003econfiguring pylsp · helix-editor helix · Discussion #6623\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHi, I\u0026#39;m trying to make some modifications to the default pylsp settings as I do not strictly follow PEP in my personal projects. I googled some examples but I cannot get them to work, so I am wonde...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHow to set your python formatter to black with helix.  The following snippet lays out how to set the helix editor to auto-format on save with the black formatter.\n\n``` toml\n[[language]]\nname = \"python\"\nlanguage-servers = [\"pylsp\"]\n\n[language-server.pylsp.config.pylsp]\nplugins.pyls_mypy.enabled = true\nplugins.pyls_mypy.live_mode = true\nplugins.flake8.maxLineLength = 88\nplugins.pycodestyle.maxLineLength = 88\n\n[language.formatter]\ncommand = \"black\"\nargs = [\"--line-length\", \"88\", \"--quiet\", \"-\"]\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/helix-editor/helix/discussions/6623",
      "date_published": "2024-10-08T02:23:03Z",
      "date_modified": "2024-10-08T02:23:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "helix",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-401/",
      "url": "https://go.waylonwalker.com/thought-401/",
      "title": "💭 Database Remote-Copy Tool For SQLite (draft)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Oct/4/sqlite-rsync/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDatabase Remote-Copy Tool For SQLite (draft)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeat new SQLite utilities often show up in branches of the SQLite repository. Here\u0026#39;s a new one from last month: sqlite3-rsync, providing tools for efficiently creating and updating copies of …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSimon shared a really cool new utility tool for sqlite ispired by rsync.  It checks hashes of each sqlite page and syncs pages.  So if nothing in the database has changed it will only require 0.5% the bandwidth as a copy would.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Oct/4/sqlite-rsync/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDatabase Remote-Copy Tool For SQLite (draft)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeat new SQLite utilities often show up in branches of the SQLite repository. Here\u0026#39;s a new one from last month: sqlite3-rsync, providing tools for efficiently creating and updating copies of …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSimon shared a really cool new utility tool for sqlite ispired by rsync.  It checks hashes of each sqlite page and syncs pages.  So if nothing in the database has changed it will only require 0.5% the bandwidth as a copy would.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/Oct/4/sqlite-rsync/",
      "date_published": "2024-10-05T20:56:49Z",
      "date_modified": "2024-10-05T20:56:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-400/",
      "url": "https://go.waylonwalker.com/thought-400/",
      "title": "💭 ticklemykeys on X: \"working on a new model. * seams less visib...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1840104423508312273\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eporta-john design update, working on moving the seams to line up with an edge to eliminate long noticable seams.  These seams are required because I don’t have a printer big enough to print this in one shot.\u003c/p\u003e\n\u003cp\u003ehotswaps are going in.  I’m getting really excited for hotswaps as they will make keebs more repairable, and users can self change out the switches if they want.  I can also pre-build them ready to go, and drop in switches at the time of order.  I did learn today that these are hyper specific to gateron, damn all these switch manufacturers and their special pinouts.\u003c/p\u003e\n\u003cp\u003eLast thing I gotta make more room for wiring the microcontroller and running wires out to the rows and columns, my first prototype build took waay to long to build.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1840104423508312273\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nporta-john design update, working on moving the seams to line up with an edge to eliminate long noticable seams.  These seams are required because I don't have a printer big enough to print this in one shot.\n\nhotswaps are going in.  I'm getting really excited for hotswaps as they will make keebs more repairable, and users can self change out the switches if they want.  I can also pre-build them ready to go, and drop in switches at the time of order.  I did learn today that these are hyper specific to gateron, damn all these switch manufacturers and their special pinouts.\n\nLast thing I gotta make more room for wiring the microcontroller and running wires out to the rows and columns, my first prototype build took waay to long to build.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/XTicklemykeys/status/1840104423508312273",
      "date_published": "2024-10-04T01:49:28Z",
      "date_modified": "2024-10-04T01:49:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-399/",
      "url": "https://go.waylonwalker.com/thought-399/",
      "title": "💭 Elwin Ransom 👽 on X: \"Help, I'm being Helix pilled by my own f...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/jesseleite85/status/1841547565575086448\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIs Jesse going to get sniped by the helix community?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/jesseleite85/status/1841547565575086448\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIs Jesse going to get sniped by the helix community?\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/jesseleite85/status/1841547565575086448",
      "date_published": "2024-10-04T01:42:50Z",
      "date_modified": "2024-10-04T01:42:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "editor",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-398/",
      "url": "https://go.waylonwalker.com/thought-398/",
      "title": "💭 ticklemykeys on X: \"New cap of my own design https://t.co/j63q...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1841646323939864871\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis low profile design almost made it to 9.  I think blending together the custom brim to make them all one piece really made the final difference here.  The custom brim is two layers thick, only touching on the top layer making it very easy to peel off, but gives better adhesion to the bed, and does not loose one like this print did.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1841646323939864871\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis low profile design almost made it to 9.  I think blending together the custom brim to make them all one piece really made the final difference here.  The custom brim is two layers thick, only touching on the top layer making it very easy to peel off, but gives better adhesion to the bed, and does not loose one like this print did.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/XTicklemykeys/status/1841646323939864871",
      "date_published": "2024-10-04T01:42:01Z",
      "date_modified": "2024-10-04T01:42:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-397/",
      "url": "https://go.waylonwalker.com/thought-397/",
      "title": "💭 ticklemykeys on X: \"Full size MX caps, printing flawlessly wit...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1841860763960377732\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ereally excited for how these caps of my own design are working out.  Having the extra control is the first time I’ve been able to print more than one at a time without some hacky gcode.  I’ve got a set of nine here that I have printed 4 times without a single failure.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/XTicklemykeys/status/1841860763960377732\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nreally excited for how these caps of my own design are working out.  Having the extra control is the first time I've been able to print more than one at a time without some hacky gcode.  I've got a set of nine here that I have printed 4 times without a single failure.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/XTicklemykeys/status/1841860763960377732",
      "date_published": "2024-10-04T01:39:38Z",
      "date_modified": "2024-10-04T01:39:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wyattbubbylee-zmk-config-wyatt-3x5/",
      "url": "https://go.waylonwalker.com/wyattbubbylee-zmk-config-wyatt-3x5/",
      "title": "⭐ wyattbubbylee zmk-config-wyatt-3x5",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/wyattbubbylee/zmk-config-wyatt-3x5\" 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\"\u003ezmk-config-wyatt-3x5\u003c/a\u003e by \u003ca href=\"https://github.com/wyattbubbylee\" 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\"\u003ewyattbubbylee\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ewyatt-3x5\u003c/p\u003e\n",
      "content_text": "\nThe work on [zmk-config-wyatt-3x5](https://github.com/wyattbubbylee/zmk-config-wyatt-3x5) by [wyattbubbylee](https://github.com/wyattbubbylee).\n\nwyatt-3x5\n",
      "summary": "The work on zmk-config-wyatt-3x5 by wyattbubbylee.",
      "date_published": "2024-10-03T13:41:32Z",
      "date_modified": "2024-10-03T13:41:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-396/",
      "url": "https://go.waylonwalker.com/thought-396/",
      "title": "💭 Cherry 8 mm keycap mount",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz\" alt=\"https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz\"/ data-glightbox=\"description: https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eMX keycap stem dimensions.  I used these to create my new caps and all these dimensions worked great.  The one dimension I had issues with was the outer diameter off the cap stem, not shown here.  5.3mm ended up being a good outer diameter for me.  I print them at an angle and the bottom of the stem can get a bit of sag, pressing out on the outer wall of the switch and can actually stick the key.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz](/static/https://telcontar.net/KBK/Cherry/images/MX/Cherry_8_mm_mount.svgz)\n\nMX keycap stem dimensions.  I used these to create my new caps and all these dimensions worked great.  The one dimension I had issues with was the outer diameter off the cap stem, not shown here.  5.3mm ended up being a good outer diameter for me.  I print them at an angle and the bottom of the stem can get a bit of sag, pressing out on the outer wall of the switch and can actually stick the key.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://telcontar.net/KBK/Cherry/images/MX/Cherry_mm_mount.svgz",
      "date_published": "2024-10-02T12:58:55Z",
      "date_modified": "2024-10-02T12:58:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-394/",
      "url": "https://go.waylonwalker.com/thought-394/",
      "title": "💭 distrobox/docs/usage/distrobox-assemble.md at main · 89luca89/...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md\" alt=\"https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md\"/ data-glightbox=\"description: https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis page is gold.  It lays out all of the distrobox assemble api with some good examples  of how to get access to things like podman and kind from inside of containers.\u003c/p\u003e\n\u003cp\u003eEspecially this example.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[tumbleweed_distrobox]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eregistry.opensuse.org/opensuse/distrobox\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003epull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;acpi bash-completion findutils iproute iputils sensors inotify-tools unzip\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;net-tools nmap openssl procps psmisc rsync man tig tmux tree vim htop xclip yt-dlp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;git git-credential-libsecret\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;patterns-devel-base-devel_basis\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ShellCheck ansible-lint clang clang-tools codespell ctags desktop-file-utils gcc golang jq python3\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;python3-bashate python3-flake8 python3-mypy python3-pipx python3-pycodestyle python3-pyflakes python3-pylint python3-python-lsp-server python3-rstcheck python3-yapf python3-yamllint rustup shfmt\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eadditional_packages\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;kubernetes-client helm\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eGOPATH=\u0026#34;${HOME}/.local/share/system-go\u0026#34; GOBIN=/usr/local/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eGOPATH=\u0026#34;${HOME}/.local/share/system-go\u0026#34; GOBIN=/usr/local/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eGOPATH=\u0026#34;${HOME}/.local/share/system-go\u0026#34; GOBIN=/usr/local/bin go install golang.org/x/tools/cmd/goimports@latest;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eGOPATH=\u0026#34;${HOME}/.local/share/system-go\u0026#34; GOBIN=/usr/local/bin go install golang.org/x/tools/gopls@latest;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eGOPATH=\u0026#34;${HOME}/.local/share/system-go\u0026#34; GOBIN=/usr/local/bin go install sigs.k8s.io/kind@latest;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/conmon;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/crun;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker-compose;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/flatpak;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eexported_apps\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;htop\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eexported_bins\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/usr/bin/htop /usr/bin/git\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eexported_bins_path\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;~/.local/bin\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md](/static/https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md)\n\nThis page is gold.  It lays out all of the distrobox assemble api with some good examples  of how to get access to things like podman and kind from inside of containers.\n\nEspecially this example.\n\n``` ini\n[tumbleweed_distrobox]\nimage=registry.opensuse.org/opensuse/distrobox\npull=true\nadditional_packages=\"acpi bash-completion findutils iproute iputils sensors inotify-tools unzip\"\nadditional_packages=\"net-tools nmap openssl procps psmisc rsync man tig tmux tree vim htop xclip yt-dlp\"\nadditional_packages=\"git git-credential-libsecret\"\nadditional_packages=\"patterns-devel-base-devel_basis\"\nadditional_packages=\"ShellCheck ansible-lint clang clang-tools codespell ctags desktop-file-utils gcc golang jq python3\"\nadditional_packages=\"python3-bashate python3-flake8 python3-mypy python3-pipx python3-pycodestyle python3-pyflakes python3-pylint python3-python-lsp-server python3-rstcheck python3-yapf python3-yamllint rustup shfmt\"\nadditional_packages=\"kubernetes-client helm\"\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install golang.org/x/tools/cmd/goimports@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install golang.org/x/tools/gopls@latest;\ninit_hooks=GOPATH=\"${HOME}/.local/share/system-go\" GOBIN=/usr/local/bin go install sigs.k8s.io/kind@latest;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/conmon;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/crun;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker-compose;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/flatpak;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman;\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open;\nexported_apps=\"htop\"\nexported_bins=\"/usr/bin/htop /usr/bin/git\"\nexported_bins_path=\"~/.local/bin\"\n````\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md",
      "date_published": "2024-09-30T15:49:25Z",
      "date_modified": "2024-09-30T15:49:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "podman",
        "distrobox",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-393/",
      "url": "https://go.waylonwalker.com/thought-393/",
      "title": "💭 urob/zmk-config: Personal ZMK firmware configuration for vario...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/urob/zmk-config?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/501412238/e20df667-a18d-4530-9ebe-03157a92069f\" alt=\"GitHub - urob/zmk-config: Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) — Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) - urob/zmk-config\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - urob/zmk-config: Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) — Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) - urob/zmk-config\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - urob/zmk-config: Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePersonal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) - urob/zmk-config\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a very well thought out zmk config featuring many macros, numword, and timeless homerow mods. The build system to build locally looks on point, I really need to give that a try!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/urob/zmk-config?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/501412238/e20df667-a18d-4530-9ebe-03157a92069f\" alt=\"GitHub - urob/zmk-config: Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) — Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) - urob/zmk-config\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - urob/zmk-config: Personal ZMK firmware configuration for various boards (34-keys, Glove80, Planck)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePersonal ZMK firmware configuration for various boards (34-keys, Glove80, Planck) - urob/zmk-config\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a very well thought out zmk config featuring many macros, numword, and timeless homerow mods. The build system to build locally looks on point, I really need to give that a try!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/urob/zmk-config?tab=readme-ov-file",
      "date_published": "2024-09-29T16:50:30Z",
      "date_modified": "2024-09-29T16:50:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "zmk",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-392/",
      "url": "https://go.waylonwalker.com/thought-392/",
      "title": "💭 add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938#diff-38878343c551520f8af2a3986e5f6085b03df197a56a92abc42a44b200f0264aR19\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6b12b2c44f61b6aae41530a61e77341635725a79e7c39eb6c5c4f15082d4c174/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938\" alt=\"add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da — 🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\" loading=\"lazy\"/ data-glightbox=\"description: add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da — 🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eadd init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned that you can use init_hooks to access host machine commands from inside a distrobox container.  This is super handy for things that you cannot get to from inside the container and need ran outside (docker, podman, flatpak, xdg-open).\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003einit_hooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938#diff-38878343c551520f8af2a3986e5f6085b03df197a56a92abc42a44b200f0264aR19\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6b12b2c44f61b6aae41530a61e77341635725a79e7c39eb6c5c4f15082d4c174/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938\" alt=\"add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da — 🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eadd init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned that you can use init_hooks to access host machine commands from inside a distrobox container.  This is super handy for things that you cannot get to from inside the container and need ran outside (docker, podman, flatpak, xdg-open).\n\n``` bash\ninit_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman;\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938#diff-38878343c551520f8af2a3986e5f6085b03df197a56a92abc42a44b200f02...",
      "date_published": "2024-09-28T01:34:08Z",
      "date_modified": "2024-09-28T01:34:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "podman",
        "distrobox",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/manyfold3d-manyfold/",
      "url": "https://go.waylonwalker.com/manyfold3d-manyfold/",
      "title": "⭐ manyfold3d manyfold",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/manyfold3d/manyfold\" 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\"\u003emanyfold\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/manyfold3d\" 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\"\u003emanyfold3d\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA \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 digital asset manager for 3d print files.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [manyfold](https://github.com/manyfold3d/manyfold), an amazing project by [manyfold3d](https://github.com/manyfold3d). It's worth exploring!\n\nA self-hosted digital asset manager for 3d print files.\n",
      "summary": "I'm really excited about manyfold, an amazing project by manyfold3d. It's worth exploring!",
      "date_published": "2024-09-27T16:15:53Z",
      "date_modified": "2024-09-27T16:15:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-391/",
      "url": "https://go.waylonwalker.com/thought-391/",
      "title": "💭 Taildrop · Tailscale Docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailscale.com/kb/1106/taildrop?tab=linux\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://tailscale.com/files/images/og-image.png\" alt=\"Taildrop · Tailscale Docs — Send files between your personal devices on a Tailscale network.\" loading=\"lazy\"/ data-glightbox=\"description: Taildrop · Tailscale Docs — Send files between your personal devices on a Tailscale network.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTaildrop · Tailscale Docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSend files between your personal devices on a Tailscale network.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTailscale · tailscale.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTailscale comes with a feature called taildrop that lets you \u003cem\u003eeasily\u003c/em\u003e share files between machines on your tailnet.  If you have tailscale on ios/android it shows up as a share target when you try to share something, and you can pick the machine to share with.\u003c/p\u003e\n\u003cp\u003eWhat was not obvious to me was how to receive the file on linux.  The linux tailscale service does not automatically receive the file, which can be kinda nice that you can put it where you want, but was not obvious to me at first.  Use this command to receive files.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo tailscale file get .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailscale.com/kb/1106/taildrop?tab=linux\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://tailscale.com/files/images/og-image.png\" alt=\"Taildrop · Tailscale Docs — Send files between your personal devices on a Tailscale network.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTaildrop · Tailscale Docs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSend files between your personal devices on a Tailscale network.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTailscale \u0026middot; tailscale.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTailscale comes with a feature called taildrop that lets you _easily_ share files between machines on your tailnet.  If you have tailscale on ios/android it shows up as a share target when you try to share something, and you can pick the machine to share with.\n\nWhat was not obvious to me was how to receive the file on linux.  The linux tailscale service does not automatically receive the file, which can be kinda nice that you can put it where you want, but was not obvious to me at first.  Use this command to receive files.\n\n``` bash\nsudo tailscale file get .\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tailscale.com/kb/1106/taildrop?tab=linux",
      "date_published": "2024-09-24T13:19:09Z",
      "date_modified": "2024-09-24T13:19:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tailscale",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/valberg-django-admin-tui/",
      "url": "https://go.waylonwalker.com/valberg-django-admin-tui/",
      "title": "⭐ valberg django-admin-tui",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/valberg/django-admin-tui\" 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\"\u003edjango-admin-tui\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/valberg\" 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\"\u003evalberg\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eDjango Admin in the terminal!\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [django-admin-tui](https://github.com/valberg/django-admin-tui), an amazing project by [valberg](https://github.com/valberg). It's worth exploring!\n\nDjango Admin in the terminal!\n",
      "summary": "I'm really excited about django-admin-tui, an amazing project by valberg. It's worth exploring!",
      "date_published": "2024-09-23T16:50:12Z",
      "date_modified": "2024-09-23T16:50:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-390/",
      "url": "https://go.waylonwalker.com/thought-390/",
      "title": "💭 triliu/Heawood42: Files for the Heawood42 ortholinear split ke...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/triliu/Heawood42\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/4a025709b0f7f6e1cab008d0006cb024705ae5e977265d052b0eace5e97d576c/triliu/Heawood42\" alt=\"GitHub - triliu/Heawood42: Files for the Heawood42 ortholinear split keyboard — Files for the Heawood42 ortholinear split keyboard - triliu/Heawood42\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - triliu/Heawood42: Files for the Heawood42 ortholinear split keyboard — Files for the Heawood42 ortholinear split keyboard - triliu/Heawood42\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - triliu/Heawood42: Files for the Heawood42 ortholinear split keyboard\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFiles for the Heawood42 ortholinear split keyboard - triliu/Heawood42\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe Heawood42 is an interesting diodeless keyboard that is not direct wired. According to the repo this is the only keyboard to be diodeless and not direct wired.  It does this through the use of a graph.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/triliu/Heawood42\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4a025709b0f7f6e1cab008d0006cb024705ae5e977265d052b0eace5e97d576c/triliu/Heawood42\" alt=\"GitHub - triliu/Heawood42: Files for the Heawood42 ortholinear split keyboard — Files for the Heawood42 ortholinear split keyboard - triliu/Heawood42\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - triliu/Heawood42: Files for the Heawood42 ortholinear split keyboard\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFiles for the Heawood42 ortholinear split keyboard - triliu/Heawood42\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe Heawood42 is an interesting diodeless keyboard that is not direct wired. According to the repo this is the only keyboard to be diodeless and not direct wired.  It does this through the use of a graph.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/triliu/Heawood42",
      "date_published": "2024-09-18T22:57:30Z",
      "date_modified": "2024-09-18T22:57:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/triliu-heawood42/",
      "url": "https://go.waylonwalker.com/triliu-heawood42/",
      "title": "⭐ triliu Heawood42",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/triliu/Heawood42\" 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\"\u003eHeawood42\u003c/a\u003e from \u003ca href=\"https://github.com/triliu\" 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\"\u003etriliu\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eFiles for the Heawood42 ortholinear split keyboard\u003c/p\u003e\n",
      "content_text": "\nI came across [Heawood42](https://github.com/triliu/Heawood42) from [triliu](https://github.com/triliu), and it's packed with great features and ideas.\n\nFiles for the Heawood42 ortholinear split keyboard\n",
      "summary": "I came across Heawood42 from triliu, and it's packed with great features and ideas.",
      "date_published": "2024-09-18T22:55:53Z",
      "date_modified": "2024-09-18T22:55:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-389/",
      "url": "https://go.waylonwalker.com/thought-389/",
      "title": "💭 Leveret v2 \u0026 lever keycaps",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://kbd.news/Leveret-v2-lever-keycaps-2380.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://kbd.news/Leveret-v2-lever-keycaps-2380.html\" alt=\"https://kbd.news/Leveret-v2-lever-keycaps-2380.html\"/ data-glightbox=\"description: https://kbd.news/Leveret-v2-lever-keycaps-2380.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is a wild key cap that uses a lever to convert horizontal key presses to vertically press the switch down.  The leveret v2 uses two of these on thumbs, one to press outward, and what appears to be one straight forward which feels like it would have to be a wrist motion, but who am I to judge without having it in person.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://kbd.news/Leveret-v2-lever-keycaps-2380.html](/static/https://kbd.news/Leveret-v2-lever-keycaps-2380.html)\n\nThis is a wild key cap that uses a lever to convert horizontal key presses to vertically press the switch down.  The leveret v2 uses two of these on thumbs, one to press outward, and what appears to be one straight forward which feels like it would have to be a wrist motion, but who am I to judge without having it in person.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kbd.news/Leveret-v2-lever-keycaps-2380.html",
      "date_published": "2024-09-16T23:53:23Z",
      "date_modified": "2024-09-16T23:53:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/k3s-config-after-first-install/",
      "url": "https://go.waylonwalker.com/k3s-config-after-first-install/",
      "title": "k3s config after first install",
      "content_html": "\u003cp\u003eAfter first setting up a new k3s instance your kubeconfig file will be located\nin /etc/rancher/k3s/k3s.yaml.\u003c/p\u003e\n\u003cp\u003eYou cans use it from here by setting $KUBECONFIG to that file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eKUBECONFIG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/etc/rancher/k3s/k3s.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr you can copy it to \u003ccode\u003e~/.kube/config\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp /etc/rancher/k3s/k3s.yaml ~/.kube/config\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you have installed k3s on a remote server and need the config on your local\nmachine then you will need to modify the server address to reflect the remote\nserver.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escp user@\u0026lt;server-ip\u0026gt;:/etc/rancher/k3s/k3s.yaml ~/.kube/config\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition warning\"\u003e\n\u003cp class=\"admonition-title\"\u003eWarning\u003c/p\u003e\n\u003cp\u003eonly do this if you don’t already have a ~/.kube/config file, otherwise copy\nit to a new file and set your $KUBECONFIG env variable to use it.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eNow you will need to open that file and change the server address, making sure\nto keep the port number.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eclusters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ecluster\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ecertificate-authority-data\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"cp\"\u003e****\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eserver\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://\u0026lt;server-ip\u0026gt;:6443\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nAfter first setting up a new k3s instance your kubeconfig file will be located\nin /etc/rancher/k3s/k3s.yaml.\n\nYou cans use it from here by setting $KUBECONFIG to that file.\n\n```bash\nexport KUBECONFIG=/etc/rancher/k3s/k3s.yaml\n```\n\nOr you can copy it to `~/.kube/config`\n\n``` bash\ncp /etc/rancher/k3s/k3s.yaml ~/.kube/config\n```\n\nIf you have installed k3s on a remote server and need the config on your local\nmachine then you will need to modify the server address to reflect the remote\nserver.\n\n``` bash\nscp user@\u003cserver-ip\u003e:/etc/rancher/k3s/k3s.yaml ~/.kube/config\n```\n\n!!! warning\n  only do this if you don't already have a ~/.kube/config file, otherwise copy\n  it to a new file and set your $KUBECONFIG env variable to use it.\n\nNow you will need to open that file and change the server address, making sure\nto keep the port number.\n\n``` yaml\napiVersion: v1\nclusters:\n  - cluster:\n      certificate-authority-data: ****\n      server: https://\u003cserver-ip\u003e:6443\n    name: default\n```\n",
      "summary": "After first setting up a new k3s instance your kubeconfig file will be located in /etc/rancher/k3s/k3s.yaml.",
      "date_published": "2024-09-15T16:57:41Z",
      "date_modified": "2024-09-15T16:57:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "k3s",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-388/",
      "url": "https://go.waylonwalker.com/thought-388/",
      "title": "💭 Alternatives to Using Pure Black (#000000) for Text and Backgr...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://uxplanet.org/alternatives-to-using-pure-black-000000-for-text-and-backgrounds-54ef0e733cdb\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/uxplanet.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/uxplanet.org.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003euxplanet.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA nice set of blacks to use in web design. Subtle variants off of black or white like this can really make your design look nice and modern.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://uxplanet.org/alternatives-to-using-pure-black-000000-for-text-and-backgrounds-54ef0e733cdb\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003euxplanet.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA nice set of blacks to use in web design. Subtle variants off of black or white like this can really make your design look nice and modern.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://uxplanet.org/alternatives-to-using-pure-black-000000-for-text-and-backgrounds-54ef0e733cdb",
      "date_published": "2024-09-13T15:47:25Z",
      "date_modified": "2024-09-13T15:47:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-387/",
      "url": "https://go.waylonwalker.com/thought-387/",
      "title": "💭 Wes Bos on X: \"Are you using position: absolute; to overlap el...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/wesbos/status/1834242925401694490\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty incredible use of css grid to overlay items overtop of each other without needing to resort to \u003ccode\u003eposition: absolute\u003c/code\u003e and the side effects that it brings.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ewrap\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003edisplay\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003egrid\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"err\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"err\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003egrid-row\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003egrid-column\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/wesbos/status/1834242925401694490\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a pretty incredible use of css grid to overlay items overtop of each other without needing to resort to `position: absolute` and the side effects that it brings.\n\n\n``` css\n.wrap {\n  display: grid;\n  \u0026 \u003e * {\n    grid-row: 1;\n    grid-column: 1;\n  }\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/wesbos/status/1834242925401694490",
      "date_published": "2024-09-13T15:43:03Z",
      "date_modified": "2024-09-13T15:43:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-386/",
      "url": "https://go.waylonwalker.com/thought-386/",
      "title": "💭 Buttery icons",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.buttery.so/icons\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.buttery.so/opengraph-image.png?e89682da2c73e61f\" alt=\"Buttery.so — Buttery smooth, minimal icons for interfaces.\" loading=\"lazy\"/ data-glightbox=\"description: Buttery.so — Buttery smooth, minimal icons for interfaces.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eButtery.so\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eButtery smooth, minimal icons for interfaces.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebuttery.so\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSome sick looking icons no attribution needed.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.buttery.so/icons\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.buttery.so/opengraph-image.png?e89682da2c73e61f\" alt=\"Buttery.so — Buttery smooth, minimal icons for interfaces.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eButtery.so\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eButtery smooth, minimal icons for interfaces.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebuttery.so\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSome sick looking icons no attribution needed.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.buttery.so/icons",
      "date_published": "2024-09-07T21:04:18Z",
      "date_modified": "2024-09-07T21:04:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "Webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pifi-org-pifi-openwrt-raspberry-pi/",
      "url": "https://go.waylonwalker.com/pifi-org-pifi-openwrt-raspberry-pi/",
      "title": "⭐ pifi-org pifi-openwrt-raspberry-pi",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/pifi-org/pifi-openwrt-raspberry-pi\" 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\"\u003epifi-openwrt-raspberry-pi\u003c/a\u003e from \u003ca href=\"https://github.com/pifi-org\" 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\"\u003epifi-org\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFirmware Files for Raspberry Pi (PiFI)\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pifi-openwrt-raspberry-pi](https://github.com/pifi-org/pifi-openwrt-raspberry-pi) from [pifi-org](https://github.com/pifi-org).\n\nFirmware Files for Raspberry Pi (PiFI)\n",
      "summary": "I'm impressed by pifi-openwrt-raspberry-pi from pifi-org.",
      "date_published": "2024-09-07T18:05:56Z",
      "date_modified": "2024-09-07T18:05:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/trying-n8n/",
      "url": "https://go.waylonwalker.com/trying-n8n/",
      "title": "Trying-n8n",
      "content_html": "\u003cp\u003eToday I gave n8n a try using podman, their docs gave me docker commands, but it\nran fine on my machine using podman.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epodman volume create n8n_data\npodman run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nToday I gave n8n a try using podman, their docs gave me docker commands, but it\nran fine on my machine using podman.\n\n```\npodman volume create n8n_data\npodman run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n\n```\n",
      "summary": "Today I gave n8n a try using podman, their docs gave me docker commands, but it ran fine on my machine using podman.",
      "date_published": "2024-09-03T11:24:00Z",
      "date_modified": "2024-09-03T11:24:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-385/",
      "url": "https://go.waylonwalker.com/thought-385/",
      "title": "💭 NOT - LTT Screwdriver - Fancy by Erer2001 | Download free STL ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/580045/files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eprintables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSomeone has created a knock off of the ltt screwdriver and made it printable, and it works really well.  I have one printed with 6 different bitholders.  I popped some labels on them in bambu studio as I printed to mark them for metric/inch and so on.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/a10f10c7-973a-4dde-bd92-ef37b596fb85.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/a10f10c7-973a-4dde-bd92-ef37b596fb85.png\" alt=\"screenshot-2025-08-02T01-43-02-980Z.png\"/ data-glightbox=\"description: screenshot-2025-08-02T01-43-02-980Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI’ve had mine for about a year now, and I use it quite often.  I used to be a dedicated screwdriver kind of guy, but as life has changed I’m not working out of a shop with tools at reach as much, I’m grabbing a couple of items and heading to a job in the house or a neighbors house.  It’s not 30s to grab just the right dedicated screwdriver anymore.  Also having some setup with hex and torx is a game changer.  It’s also super handy that you can just pop the bits right into a drill or impact.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/778afc97-eaff-4524-97b1-a54c76af2e8d.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/778afc97-eaff-4524-97b1-a54c76af2e8d.png\" alt=\"screenshot-2025-08-02T01-43-17-610Z.png\"/ data-glightbox=\"description: screenshot-2025-08-02T01-43-17-610Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eHighly recommended print.  Sorry for not buying the real deal Linux, I got kids to feed here.  I owe you a t-shirt order or something.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.wayl.one/api/file/c09f9f15-e9af-405c-b1bc-41c9759156ce.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.wayl.one/api/file/c09f9f15-e9af-405c-b1bc-41c9759156ce.png\" alt=\"screenshot-2025-08-02T01-43-36-796Z.png\"/ data-glightbox=\"description: screenshot-2025-08-02T01-43-36-796Z.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.printables.com/model/580045/files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eprintables.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSomeone has created a knock off of the ltt screwdriver and made it printable, and it works really well.  I have one printed with 6 different bitholders.  I popped some labels on them in bambu studio as I printed to mark them for metric/inch and so on.\n\n![screenshot-2025-08-02T01-43-02-980Z.png](https://dropper.wayl.one/api/file/a10f10c7-973a-4dde-bd92-ef37b596fb85.png)\n\nI've had mine for about a year now, and I use it quite often.  I used to be a dedicated screwdriver kind of guy, but as life has changed I'm not working out of a shop with tools at reach as much, I'm grabbing a couple of items and heading to a job in the house or a neighbors house.  It's not 30s to grab just the right dedicated screwdriver anymore.  Also having some setup with hex and torx is a game changer.  It's also super handy that you can just pop the bits right into a drill or impact.\n\n![screenshot-2025-08-02T01-43-17-610Z.png](https://dropper.wayl.one/api/file/778afc97-eaff-4524-97b1-a54c76af2e8d.png)\n\nHighly recommended print.  Sorry for not buying the real deal Linux, I got kids to feed here.  I owe you a t-shirt order or something.\n\n![screenshot-2025-08-02T01-43-36-796Z.png](https://dropper.wayl.one/api/file/c09f9f15-e9af-405c-b1bc-41c9759156ce.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.printables.com/model/580045/files",
      "date_published": "2024-08-27T02:13:03Z",
      "date_modified": "2024-08-27T02:13:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-384/",
      "url": "https://go.waylonwalker.com/thought-384/",
      "title": "💭 Installing Python - uv",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.astral.sh/uv/guides/install-python/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.astral.sh.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.astral.sh.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eInstalling and managing Python | uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA guide to using uv to install Python, including requesting specific versions, automatic installation, viewing installed versions, and more.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.astral.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode\u003euv\u003c/code\u003e now can install python for you.  \u003ccode\u003euv\u003c/code\u003e is inspired by rust’s cargo, an all in one fast package and installation manager. \u003ccode\u003euv\u003c/code\u003e is so fast and becoming feature complete, it’s really changing the python packaging ecosystem.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv python install\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv python install 3.12\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euv python list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.astral.sh/uv/guides/install-python/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eInstalling and managing Python | uv\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA guide to using uv to install Python, including requesting specific versions, automatic installation, viewing installed versions, and more.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.astral.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n`uv` now can install python for you.  `uv` is inspired by rust's cargo, an all in one fast package and installation manager. `uv` is so fast and becoming feature complete, it's really changing the python packaging ecosystem.\n\n\n``` bash\nuv python install\nuv python install 3.12\nuv python list\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.astral.sh/uv/guides/install-python/",
      "date_published": "2024-08-23T14:55:10Z",
      "date_modified": "2024-08-23T14:55:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "uv",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tjdevries-kickstart-css/",
      "url": "https://go.waylonwalker.com/tjdevries-kickstart-css/",
      "title": "⭐ tjdevries kickstart.css",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/tjdevries/kickstart.css\" 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\"\u003ekickstart.css\u003c/a\u003e by \u003ca href=\"https://github.com/tjdevries\" 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\"\u003etjdevries\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eKickstart.nvim alternative written in pure CSS. Requires failwind.nvim\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [kickstart.css](https://github.com/tjdevries/kickstart.css) by [tjdevries](https://github.com/tjdevries), and it's truly impressive.\n\nKickstart.nvim alternative written in pure CSS. Requires failwind.nvim\n",
      "summary": "I recently discovered kickstart.css by tjdevries, and it's truly impressive.",
      "date_published": "2024-08-21T12:59:49Z",
      "date_modified": "2024-08-21T12:59:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-383/",
      "url": "https://go.waylonwalker.com/thought-383/",
      "title": "💭 Switching Configs in Neovim • Michael Uloth",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://michaeluloth.com/neovim-switch-configs/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://res.cloudinary.com/ooloth/image/upload/c_fill,w_1200,h_630/v1694064460/mu/ratchet-set.jpg\" alt=\"Switching configs in Neovim — How to maintain multiple Neovim configurations and switch between them\" loading=\"lazy\"/ data-glightbox=\"description: Switching configs in Neovim — How to maintain multiple Neovim configurations and switch between them\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSwitching configs in Neovim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to maintain multiple Neovim configurations and switch between them\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMichael Uloth · michaeluloth.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSwitching between nvim configs can be really easy to do since they implemented the \u003ccode\u003eNVIM_APPNAME\u003c/code\u003e Environment Variable.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNVIM_APPNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003envim-lazyvim nvim\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow config will be loaded from \u003ccode\u003e~/.config/nvim-lazyvim\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eMichael lays out some aliases in the full article.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003ev\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;nvim\u0026#39;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# default Neovim config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003evz\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;NVIM_APPNAME=nvim-lazyvim nvim\u0026#39;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# LazyVim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003evc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;NVIM_APPNAME=nvim-nvchad nvim\u0026#39;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# NvChad\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003evk\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;NVIM_APPNAME=nvim-kickstart nvim\u0026#39;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Kickstart\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003eva\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;NVIM_APPNAME=nvim-astrovim nvim\u0026#39;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# AstroVim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003evl\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;NVIM_APPNAME=nvim-lunarvim nvim\u0026#39;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# LunarVim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://michaeluloth.com/neovim-switch-configs/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://res.cloudinary.com/ooloth/image/upload/c_fill,w_1200,h_630/v1694064460/mu/ratchet-set.jpg\" alt=\"Switching configs in Neovim — How to maintain multiple Neovim configurations and switch between them\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSwitching configs in Neovim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to maintain multiple Neovim configurations and switch between them\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMichael Uloth \u0026middot; michaeluloth.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSwitching between nvim configs can be really easy to do since they implemented the `NVIM_APPNAME` Environment Variable.\n\n``` bash\nNVIM_APPNAME=nvim-lazyvim nvim\n```\n\nNow config will be loaded from `~/.config/nvim-lazyvim`\n\nMichael lays out some aliases in the full article.\n\n``` bash\nalias v='nvim' # default Neovim config\nalias vz='NVIM_APPNAME=nvim-lazyvim nvim' # LazyVim\nalias vc='NVIM_APPNAME=nvim-nvchad nvim' # NvChad\nalias vk='NVIM_APPNAME=nvim-kickstart nvim' # Kickstart\nalias va='NVIM_APPNAME=nvim-astrovim nvim' # AstroVim\nalias vl='NVIM_APPNAME=nvim-lunarvim nvim' # LunarVim\n````\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://michaeluloth.com/neovim-switch-configs/",
      "date_published": "2024-08-21T12:57:56Z",
      "date_modified": "2024-08-21T12:57:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/print-in-place-nuts-with-cura/",
      "url": "https://go.waylonwalker.com/print-in-place-nuts-with-cura/",
      "title": "Print in place nuts with cura",
      "date_published": "2024-08-12T08:54:00Z",
      "date_modified": "2024-08-12T08:54:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/",
      "url": "https://go.waylonwalker.com/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/",
      "title": "⭐ infused-kim kb_zmk_ps2_mouse_trackpoint_driver",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/infused-kim\" 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\"\u003einfused-kim\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/infused-kim/kb_zmk_ps2_mouse_trackpoint_driver\" 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\"\u003ekb_zmk_ps2_mouse_trackpoint_driver\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA PS/2 mouse \u0026amp; trackpoint driver module for keyboards running the zmk firmware\u003c/p\u003e\n",
      "content_text": "\n[infused-kim](https://github.com/infused-kim) has done a fantastic job with [kb_zmk_ps2_mouse_trackpoint_driver](https://github.com/infused-kim/kb_zmk_ps2_mouse_trackpoint_driver). Highly recommend taking a look.\n\nA PS/2 mouse \u0026 trackpoint driver module for keyboards running the zmk firmware\n",
      "summary": "infused-kim has done a fantastic job with kb_ps2_trackpoint_driver. Highly recommend taking a look.",
      "date_published": "2024-08-12T03:41:28Z",
      "date_modified": "2024-08-12T03:41:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tjdevries-failwind-nvim/",
      "url": "https://go.waylonwalker.com/tjdevries-failwind-nvim/",
      "title": "⭐ tjdevries failwind.nvim",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/tjdevries/failwind.nvim\" 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\"\u003efailwind.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/tjdevries\" 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\"\u003etjdevries\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eKEKW\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [failwind.nvim](https://github.com/tjdevries/failwind.nvim) by [tjdevries](https://github.com/tjdevries), and it's truly impressive.\n\nKEKW\n",
      "summary": "I recently discovered failwind.nvim by tjdevries, and it's truly impressive.",
      "date_published": "2024-08-07T18:06:05Z",
      "date_modified": "2024-08-07T18:06:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-382/",
      "url": "https://go.waylonwalker.com/thought-382/",
      "title": "💭 Keyboard Build Log | Halfwit’s Dev Blog",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://halfwit.github.io/2017/05/08/keyboardblog.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://halfwit.github.io/2017/05/08/keyboardblog.html\" alt=\"https://halfwit.github.io/2017/05/08/keyboardblog.html\"/ data-glightbox=\"description: https://halfwit.github.io/2017/05/08/keyboardblog.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is the coolest scrappy build, no printer or modeling required, no fancy tools, just straight chisel and claw hammer in soft pine.  Im here for it, create the thing that you want to create.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://halfwit.github.io/2017/05/08/keyboardblog.html](/static/https://halfwit.github.io/2017/05/08/keyboardblog.html)\n\nThis is the coolest scrappy build, no printer or modeling required, no fancy tools, just straight chisel and claw hammer in soft pine.  Im here for it, create the thing that you want to create.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://halfwit.github.io/2017/05/08/keyboardblog.html",
      "date_published": "2024-08-05T13:39:15Z",
      "date_modified": "2024-08-05T13:39:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-gq/",
      "url": "https://go.waylonwalker.com/vim-gq/",
      "title": "Vim-gq",
      "content_html": "\u003cp\u003eVim has a handy feature to format text with \u003ccode\u003egq\u003c/code\u003e.  You can use it in visual\nmode, give it a motion, or if you give it \u003ccode\u003egqq\u003c/code\u003e it will format the current line.\nI use this quite often while writing in markdown, I do not use softwraps in vim,\nso \u003ccode\u003egqq\u003c/code\u003e quickly formats my current line into a paragraph.    Once I have done\nthis for a single line one time I typically switch to the motion for around\nparagraph \u003ccode\u003egqap\u003c/code\u003e to format the whole paragraph and not just the current line.\u003c/p\u003e\n\u003ch2 id=\"before-formatting\"\u003ebefore formatting \u003ca href=\"#before-formatting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/01c19159-c0b5-4920-b73c-774284b09940.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/01c19159-c0b5-4920-b73c-774284b09940.webp\" alt=\"vim-gq-20240805122634078.webp\"/ data-glightbox=\"description: vim-gq-20240805122634078.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"after-formattting\"\u003eafter formattting \u003ca href=\"#after-formattting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/e068e445-43e0-4e27-ac30-ac11e9cb9088.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/e068e445-43e0-4e27-ac30-ac11e9cb9088.webp\" alt=\"vim-gq-20240805122700026.webp\"/ data-glightbox=\"description: vim-gq-20240805122700026.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\n\nVim has a handy feature to format text with `gq`.  You can use it in visual\nmode, give it a motion, or if you give it `gqq` it will format the current line.\nI use this quite often while writing in markdown, I do not use softwraps in vim,\nso `gqq` quickly formats my current line into a paragraph.    Once I have done\nthis for a single line one time I typically switch to the motion for around\nparagraph `gqap` to format the whole paragraph and not just the current line.\n\n## before formatting\n\n![vim-gq-20240805122634078.webp](https://dropper.waylonwalker.com/api/file/01c19159-c0b5-4920-b73c-774284b09940.webp)\n\n## after formattting\n\n![vim-gq-20240805122700026.webp](https://dropper.waylonwalker.com/api/file/e068e445-43e0-4e27-ac30-ac11e9cb9088.webp)\n",
      "summary": "Vim has a handy feature to format text with . You can use it in visual mode, give it a motion, or if you give it it will format the current line. I use this...",
      "date_published": "2024-08-05T12:22:00Z",
      "date_modified": "2024-08-05T12:22:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "neovim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/slug/",
      "url": "https://go.waylonwalker.com/slug/",
      "title": "Slug",
      "content_html": "\u003cp\u003eA slug is the part of the url that comes after the domain.  Commonly matches the file name of a markdown file many blogging systems.  These are typically human readable, unique identifiers for pages within the site.\u003c/p\u003e\n",
      "content_text": "\nA slug is the part of the url that comes after the domain.  Commonly matches the file name of a markdown file many blogging systems.  These are typically human readable, unique identifiers for pages within the site.\n",
      "summary": "A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...",
      "date_published": "2024-08-05T11:45:00Z",
      "date_modified": "2024-08-05T11:45:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/obsidian-new-file/",
      "url": "https://go.waylonwalker.com/obsidian-new-file/",
      "title": "Obsidian-new-file",
      "content_html": "\u003cp\u003eWikilinks are a core concept within obsidian to link to documents by \u003ca href=\"/slug/\" class=\"wikilink\" data-title=\"Slug\" data-description=\"A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...\" data-date=\"2024-08-05\" data-preview=\"A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...\"\u003eSlug\u003c/a\u003e wrapped in double square brackets.  These are commonly used within wiki site generators.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[[slug]]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eObsidian gives you a keybinding \u003ccode\u003ealt+enter\u003c/code\u003e to go to that file, but if it does not exist it will create the file for you in the root of the project.  It’s a nice way to quickly make new documents.\u003c/p\u003e\n",
      "content_text": "Wikilinks are a core concept within obsidian to link to documents by \u003ca href=\"/slug/\" class=\"wikilink\" data-title=\"Slug\" data-description=\"A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...\" data-date=\"2024-08-05\"\u003eSlug\u003c/a\u003e wrapped in double square brackets.  These are commonly used within wiki site generators.\n\n``` markdown\n[[slug]]\n```\n\nObsidian gives you a keybinding `alt+enter` to go to that file, but if it does not exist it will create the file for you in the root of the project.  It's a nice way to quickly make new documents.\n",
      "summary": "Wikilinks are a core concept within obsidian to link to documents by slug wrapped in double square brackets. These are commonly used within wiki site...",
      "date_published": "2024-08-05T11:44:00Z",
      "date_modified": "2024-08-05T11:44:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "obsidian"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-381/",
      "url": "https://go.waylonwalker.com/thought-381/",
      "title": "💭 Hotkey to open link under at the text cursor position while ty...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://forum.obsidian.md/t/hotkey-to-open-link-under-at-the-text-cursor-position-while-typing-in-edit-mode/8144\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://forum.obsidian.md/uploads/default/original/3X/b/a/ba1a1301f580d34a881803aa5ed8cf7ff3cdf0ef.png\" alt=\"Hotkey to open link under at the text cursor position while typing in edit mode — I find myself not wanting to leave the keyboard for navigation and think a keyboard-only shortcut that could open a link at the text cursor position is at would be really handy for this case.\" loading=\"lazy\"/ data-glightbox=\"description: Hotkey to open link under at the text cursor position while typing in edit mode — I find myself not wanting to leave the keyboard for navigation and think a keyboard-only shortcut that could open a link at the text cursor position is at would be really handy for this case.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHotkey to open link under at the text cursor position while typing in edit mode\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI find myself not wanting to leave the keyboard for navigation and think a keyboard-only shortcut that could open a link at the text cursor position is at would be really handy for this case.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eObsidian Forum · forum.obsidian.md\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eObsidian has a go to definition like feature, the keybind is alt+enter, I would have never guessed this one.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://forum.obsidian.md/t/hotkey-to-open-link-under-at-the-text-cursor-position-while-typing-in-edit-mode/8144\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://forum.obsidian.md/uploads/default/original/3X/b/a/ba1a1301f580d34a881803aa5ed8cf7ff3cdf0ef.png\" alt=\"Hotkey to open link under at the text cursor position while typing in edit mode — I find myself not wanting to leave the keyboard for navigation and think a keyboard-only shortcut that could open a link at the text cursor position is at would be really handy for this case.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHotkey to open link under at the text cursor position while typing in edit mode\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI find myself not wanting to leave the keyboard for navigation and think a keyboard-only shortcut that could open a link at the text cursor position is at would be really handy for this case.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eObsidian Forum \u0026middot; forum.obsidian.md\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nObsidian has a go to definition like feature, the keybind is alt+enter, I would have never guessed this one.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://forum.obsidian.md/t/hotkey-to-open-link-under-at-the-text-cursor-position-while-typing-in-edit-mode/8144",
      "date_published": "2024-08-05T01:46:22Z",
      "date_modified": "2024-08-05T01:46:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "obsidian",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/obsidian-go-to-definition/",
      "url": "https://go.waylonwalker.com/obsidian-go-to-definition/",
      "title": "Obsidian-go-to-definition",
      "content_html": "\u003cp\u003eIt was not obvious to me, but if you have a wikilink such as \u003ca href=\"/trying-obsidian/\" class=\"wikilink\" data-title=\"Trying Obsidian\" data-description=\"I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don\u0026#39;t include a...\" data-date=\"2024-07-31\" data-preview=\"I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don\u0026#39;t include a...\"\u003eTrying Obsidian\u003c/a\u003e, you can jump to the file in obsidian, just like you can with lsp go to definition, the keybinding is alt + enter.\u003c/p\u003e\n",
      "content_text": "\nIt was not obvious to me, but if you have a wikilink such as \u003ca href=\"/trying-obsidian/\" class=\"wikilink\" data-title=\"Trying Obsidian\" data-description=\"I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don\u0026#39;t include a...\" data-date=\"2024-07-31\"\u003eTrying Obsidian\u003c/a\u003e, you can jump to the file in obsidian, just like you can with lsp go to definition, the keybinding is alt + enter.\n",
      "summary": "It was not obvious to me, but if you have a wikilink such as trying-obsidian, you can jump to the file in obsidian, just like you can with lsp go to...",
      "date_published": "2024-08-04T20:35:00Z",
      "date_modified": "2024-08-04T20:35:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "obsidian"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/braindefender-klp-lame-keycaps/",
      "url": "https://go.waylonwalker.com/braindefender-klp-lame-keycaps/",
      "title": "⭐ braindefender KLP-Lame-Keycaps",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/braindefender/KLP-Lame-Keycaps\" 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\"\u003eKLP-Lame-Keycaps\u003c/a\u003e by \u003ca href=\"https://github.com/braindefender\" 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\"\u003ebraindefender\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSculpted and curved keycaps for Kailh Choc and MX switches\u003c/p\u003e\n",
      "content_text": "\nThe work on [KLP-Lame-Keycaps](https://github.com/braindefender/KLP-Lame-Keycaps) by [braindefender](https://github.com/braindefender).\n\nSculpted and curved keycaps for Kailh Choc and MX switches\n",
      "summary": "The work on KLP-Lame-Keycaps by braindefender.",
      "date_published": "2024-08-02T20:33:32Z",
      "date_modified": "2024-08-02T20:33:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-379/",
      "url": "https://go.waylonwalker.com/thought-379/",
      "title": "💭 Make your own luck (do this to stand out in a crowded industry...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YKeVeG6h4AA\" title=\"Make your own luck (do this to stand out in a crowded industry, filmed at @RenderATL)\" playlabel=\"Play: Make your own luck (do this to stand out in a crowded industry, filmed at @RenderATL)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eVery inspiring video Jason, these people faced adversity and crushed it.  The market is so hard right now, its not easy to get a job, move around, and recover from a layoff.  Everyone in this video just showed that you can make it in this industry right now, you just have to be willing to work harder than the rest.  The bar is raising, a lot of great people are already putting in hard work to make it.\u003c/p\u003e\n\u003cp\u003eCommunity is Key,  Theo mentioned that a lot of the companies he works with don’t even post openings, they go to their community first and are often filling spots through lower risk community hires.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YKeVeG6h4AA\" title=\"Make your own luck (do this to stand out in a crowded industry, filmed at @RenderATL)\" playlabel=\"Play: Make your own luck (do this to stand out in a crowded industry, filmed at @RenderATL)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nVery inspiring video Jason, these people faced adversity and crushed it.  The market is so hard right now, its not easy to get a job, move around, and recover from a layoff.  Everyone in this video just showed that you can make it in this industry right now, you just have to be willing to work harder than the rest.  The bar is raising, a lot of great people are already putting in hard work to make it.\n\nCommunity is Key,  Theo mentioned that a lot of the companies he works with don't even post openings, they go to their community first and are often filling spots through lower risk community hires.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=YKeVeG6h4AA",
      "date_published": "2024-08-02T13:08:44Z",
      "date_modified": "2024-08-02T13:08:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "career",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-378/",
      "url": "https://go.waylonwalker.com/thought-378/",
      "title": "💭 I Invented Airless Cornhole Bags - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"lLNfJb3OG9Y\" title=\"I Invented Airless Cornhole Bags\" playlabel=\"Play: I Invented Airless Cornhole Bags\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is such a cool 3d printed cornhole game.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"lLNfJb3OG9Y\" title=\"I Invented Airless Cornhole Bags\" playlabel=\"Play: I Invented Airless Cornhole Bags\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is such a cool 3d printed cornhole game.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/lLNfJb3OG9Y",
      "date_published": "2024-08-01T12:34:12Z",
      "date_modified": "2024-08-01T12:34:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d-printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-377/",
      "url": "https://go.waylonwalker.com/thought-377/",
      "title": "💭 The Tank - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"6Wo4brRqkz0\" title=\"The Tank\" playlabel=\"Play: The Tank\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThor always comes in hard with fire takes in his shorts.   Especially if you are early in our career take this in.  If you dont yet have kids, but plan to, double take this in.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"6Wo4brRqkz0\" title=\"The Tank\" playlabel=\"Play: The Tank\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThor always comes in hard with fire takes in his shorts.   Especially if you are early in our career take this in.  If you dont yet have kids, but plan to, double take this in.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/6Wo4brRqkz0",
      "date_published": "2024-08-01T12:31:52Z",
      "date_modified": "2024-08-01T12:31:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/obsidian-using-templater-like-copier/",
      "url": "https://go.waylonwalker.com/obsidian-using-templater-like-copier/",
      "title": "Obsidian Using Templater Like Copier",
      "content_html": "\u003cp\u003eI’ve long used copier to create all of my posts for my blog, and it works\nreally well for my workflow.  I think of a title, call a template, and give it\na title.  out of the box obsidian did not seem to work this way.  It seems like\nit wants me to right click a file tree and make a new file using the tree, this\nis not my jam.\u003c/p\u003e\n\u003cp\u003eHere is what I came up with to replace my til template.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e---\ndate: \u0026lt;% tp.file.creation_date() %\u0026gt;\ntemplateKey: til\ntitle: \u0026lt;%*\n  const originalFileName = await tp.system.prompt(\u0026#34;Enter file name\u0026#34;);\n  const toTitleCase = str =\u0026gt; str.replace(\n    /\\w\\S*/g,\n    txt =\u0026gt; txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n  );\n  const title = toTitleCase(originalFileName);\n  tR += title + \u0026#39;\\n\u0026#39;; // Add the title to the template result\n-%\u0026gt;\npublished: true\ntags:\n  -\n---\n\u0026lt;%*\nconst fileName = originalFileName.toLowerCase().replace(/\\s+/g, \u0026#39;-\u0026#39;);\nconst newFilePath = `pages/til/${fileName}`;\nawait tp.file.move(newFilePath);\n-%\u0026gt;\n\n\u0026lt;% tp.file.cursor() %\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003etR\u003c/code\u003e is a return value, and it gets placed directly into the place it is in the file\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eto.file.cursor()\u003c/code\u003e creates a tab-index point so I can tab into the content\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nI've long used copier to create all of my posts for my blog, and it works\nreally well for my workflow.  I think of a title, call a template, and give it\na title.  out of the box obsidian did not seem to work this way.  It seems like\nit wants me to right click a file tree and make a new file using the tree, this\nis not my jam.\n\nHere is what I came up with to replace my til template.\n\n```\n---\ndate: \u003c% tp.file.creation_date() %\u003e\ntemplateKey: til\ntitle: \u003c%*\n  const originalFileName = await tp.system.prompt(\"Enter file name\");\n  const toTitleCase = str =\u003e str.replace(\n    /\\w\\S*/g,\n    txt =\u003e txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n  );\n  const title = toTitleCase(originalFileName);\n  tR += title + '\\n'; // Add the title to the template result\n-%\u003e\npublished: true\ntags:\n  -\n---\n\u003c%*\nconst fileName = originalFileName.toLowerCase().replace(/\\s+/g, '-');\nconst newFilePath = `pages/til/${fileName}`;\nawait tp.file.move(newFilePath);\n-%\u003e\n\n\u003c% tp.file.cursor() %\u003e\n```\n\n* `tR` is a return value, and it gets placed directly into the place it is in the file\n* `to.file.cursor()` creates a tab-index point so I can tab into the content\n",
      "summary": "I've long used copier to create all of my posts for my blog, and it works really well for my workflow. I think of a title, call a template, and give it a...",
      "date_published": "2024-07-31T13:34:00Z",
      "date_modified": "2024-07-31T13:34:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "obsidian",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/obsidian-image-converter/",
      "url": "https://go.waylonwalker.com/obsidian-image-converter/",
      "title": "Obsidian Image Converter",
      "content_html": "\u003cp\u003eI’m giving obsidian a go as an editor for my blog and one of the main things I\nwant to fix in my workflow is the ability to quickly drop in images.  on first\nlook through the community plugins I found Image Converter.  I set it up to\nconvert to webp and drop them in a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e submodule.  I may make it something\nother than a git repo in the future, but I’ve learned that adding images to my\nblog repo quickly makes it heavy and hard to clone on other machines.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/626d85b1-5588-45c4-a4f4-c372dc7c8ff3.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/626d85b1-5588-45c4-a4f4-c372dc7c8ff3.webp\" alt=\"obsidian-image-converter-20240731211310793.webp\"/ data-glightbox=\"description: obsidian-image-converter-20240731211310793.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eOnce the images are there they are pushed and deployed as their own site to\ncloudflare pages.  I made a quick edit to my \u003ca href=\"/sick-wikilink-hover/\" class=\"wikilink\" data-title=\"sick wikilink hover\" data-description=\"Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...\" data-date=\"2024-05-30\" data-preview=\"Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...\"\u003esick wikilink hover\u003c/a\u003e plugin for\nmy blog.  if it sees a wikilink ending in webp, convert the domain over to\nobsidian-assets.waylonwalker.com, and clean up the remaining \u003ccode\u003e\u0026#34;!  \u0026#34;\u003c/code\u003e that the\npython md-it library leaves behind.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eafter first try I needed to increase the width from 600 to 1400, the image in this post was unreadable.\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is part of me getting set up and \u003ca href=\"/trying-obsidian/\" class=\"wikilink\" data-title=\"Trying Obsidian\" data-description=\"I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don\u0026#39;t include a...\" data-date=\"2024-07-31\" data-preview=\"I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don\u0026#39;t include a...\"\u003eTrying Obsidian\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI'm giving obsidian a go as an editor for my blog and one of the main things I\nwant to fix in my workflow is the ability to quickly drop in images.  on first\nlook through the community plugins I found Image Converter.  I set it up to\nconvert to webp and drop them in a git submodule.  I may make it something\nother than a git repo in the future, but I've learned that adding images to my\nblog repo quickly makes it heavy and hard to clone on other machines.\n\n![obsidian-image-converter-20240731211310793.webp](https://dropper.waylonwalker.com/api/file/626d85b1-5588-45c4-a4f4-c372dc7c8ff3.webp)\n\nOnce the images are there they are pushed and deployed as their own site to\ncloudflare pages.  I made a quick edit to my \u003ca href=\"/sick-wikilink-hover/\" class=\"wikilink\" data-title=\"sick wikilink hover\" data-description=\"Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...\" data-date=\"2024-05-30\"\u003esick wikilink hover\u003c/a\u003e plugin for\nmy blog.  if it sees a wikilink ending in webp, convert the domain over to\nobsidian-assets.waylonwalker.com, and clean up the remaining `\"!  \"` that the\npython md-it library leaves behind.\n\n!!! note\n    after first try I needed to increase the width from 600 to 1400, the image in this post was unreadable.\n\nThis is part of me getting set up and \u003ca href=\"/trying-obsidian/\" class=\"wikilink\" data-title=\"Trying Obsidian\" data-description=\"I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don\u0026#39;t include a...\" data-date=\"2024-07-31\"\u003eTrying Obsidian\u003c/a\u003e\n",
      "summary": "I'm giving obsidian a go as an editor for my blog and one of the main things I want to fix in my workflow is the ability to quickly drop in images. on first...",
      "date_published": "2024-07-30T21:09:35Z",
      "date_modified": "2024-07-30T21:09:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "obsidian",
        "blog"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-374/",
      "url": "https://go.waylonwalker.com/thought-374/",
      "title": "💭 How Fly.io uses Docker (without Docker) - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"7iypMRKniPU\" title=\"How Fly.io uses Docker (without Docker)\" playlabel=\"Play: How Fly.io uses Docker (without Docker)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDocker no Docker, what!!!\u003c/p\u003e\n\u003cp\u003eSo fly.io uses Dockerfiles to deploy your app, but no docker.  They use containerd to download your docker images into firecracker microvms to run your app.  Firecracker is the same tech that runs aws lambda functions.\u003c/p\u003e\n\u003cp\u003eFascinating short post on the beans under the hood at fly.io and how they scale your app globally.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"7iypMRKniPU\" title=\"How Fly.io uses Docker (without Docker)\" playlabel=\"Play: How Fly.io uses Docker (without Docker)\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDocker no Docker, what!!!\n\n\nSo fly.io uses Dockerfiles to deploy your app, but no docker.  They use containerd to download your docker images into firecracker microvms to run your app.  Firecracker is the same tech that runs aws lambda functions.\n\nFascinating short post on the beans under the hood at fly.io and how they scale your app globally.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=7iypMRKniPU\u0026t=3s",
      "date_published": "2024-07-27T01:14:21Z",
      "date_modified": "2024-07-27T01:14:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "vm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-373/",
      "url": "https://go.waylonwalker.com/thought-373/",
      "title": "💭 Ultimate Modular Macro Keyboard \"Kibly\" : r/MechanicalKeyboards",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/MechanicalKeyboards/comments/1dyf0d8/ultimate_modular_macro_keyboard_kibly/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://preview.redd.it/n9h52bg90cbd1.jpeg?auto=webp\u0026amp;s=f378c96ef81d7688ef82969538e31127b2e3638b\" alt=\"Ultimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34; — Ultimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\" loading=\"lazy\"/ data-glightbox=\"description: Ultimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34; — Ultimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUltimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUltimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit · reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty sick design, touch screen macropad, trackball, ring, and knobs for days.  I just want to play with it and see what I can make it do.\u003c/p\u003e\n\u003cp\u003eAs I’m typing I think I just realized that its modular, each rectangle is it’s own section!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/MechanicalKeyboards/comments/1dyf0d8/ultimate_modular_macro_keyboard_kibly/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://preview.redd.it/n9h52bg90cbd1.jpeg?auto=webp\u0026amp;s=f378c96ef81d7688ef82969538e31127b2e3638b\" alt=\"Ultimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34; — Ultimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUltimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUltimate Modular Macro Keyboard \u0026#34;Kibly\u0026#34;\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit \u0026middot; reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a pretty sick design, touch screen macropad, trackball, ring, and knobs for days.  I just want to play with it and see what I can make it do.\n\nAs I'm typing I think I just realized that its modular, each rectangle is it's own section!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reddit.com/r/MechanicalKeyboards/comments/1dyf0d8/ultimate_macro_kibly/",
      "date_published": "2024-07-26T22:32:43Z",
      "date_modified": "2024-07-26T22:32:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-372/",
      "url": "https://go.waylonwalker.com/thought-372/",
      "title": "💭 This is Goodbye? - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YfwlM-fw-aw\" title=\"This is Goodbye?\" playlabel=\"Play: This is Goodbye?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn Johnny is always such a positive vibe, just getting steamrolled by this braille shit.  WTF are these brand sleeping on.  Happy to hear that Andy and Brian are supporting him well.\u003c/p\u003e\n\u003cp\u003eAlso kinds shows what shoes are good when he goes to buy shoes cause no one will send him any and he goes with Etnies.\u003c/p\u003e\n\u003cp\u003eJohnny keep it going!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"YfwlM-fw-aw\" title=\"This is Goodbye?\" playlabel=\"Play: This is Goodbye?\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn Johnny is always such a positive vibe, just getting steamrolled by this braille shit.  WTF are these brand sleeping on.  Happy to hear that Andy and Brian are supporting him well.\n\nAlso kinds shows what shoes are good when he goes to buy shoes cause no one will send him any and he goes with Etnies.\n\nJohnny keep it going!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=YfwlM-fw-aw",
      "date_published": "2024-07-26T19:03:00Z",
      "date_modified": "2024-07-26T19:03:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "skate",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-369/",
      "url": "https://go.waylonwalker.com/thought-369/",
      "title": "💭 he's back again",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/368\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/368\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"im back again \n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;yooooooooo its me...\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;im back again\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\" embed-card-description glightbox\"=\"\"/ data-glightbox=\"description: im back again \n — \n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;yooooooooo its me...\u0026#34; loading=\u0026#34;lazy\u0026#34;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026#34;embed-card-content\u0026#34;\u0026gt;\n  \u0026lt;div class=\u0026#34;embed-card-title\u0026#34;\u0026gt;\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;p\u0026gt;im back again\u0026lt;/p\u0026gt;\n\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\"\u003e\n\u003cpre\u003e\u003ccode\u003eyooooooooo its me...\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/a\u003e\u003c/div\u003e\u003ca href=\"https://thoughts.waylonwalker.com/post/368\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" 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\"\u003e\n  \u003c/a\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post/368\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://shots.wayl.one/shot/?url=https://thoughts.waylonwalker.com/post/368\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=1200\u0026amp;scaled_height=600\" alt=\"im back again \n — \n  \n    yooooooooo its me...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\n  im back again \n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e\n  \n    yooooooooo its me...\n  \n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWyatt is again inspired to leave his thoughts on the world while watching me take notes on the zettelkasten method.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://thoughts.waylonwalker.com/post/368",
      "date_published": "2024-07-25T23:09:50Z",
      "date_modified": "2024-07-25T23:09:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "zettelkasten",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-361/",
      "url": "https://go.waylonwalker.com/thought-361/",
      "title": "💭 Note-taking with Zettelkasten - An Introduction - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"o1NJYnZCfmY\" title=\"Note-taking with Zettelkasten - An Introduction\" playlabel=\"Play: Note-taking with Zettelkasten - An Introduction\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eNiklas Luhmann created the Zettelkasten method of notetaking, He was the Da Vinci of writing, holding a high standard that we can take inspiration from even today in this digital era.\u003c/p\u003e\n\u003cp\u003eAs many times as I have seem the Zettelkasten covered, I never knew that it roughly translated to little cards in a box.\u003c/p\u003e\n\u003ch2 id=\"four-principles\"\u003eFour Principles \u003ca href=\"#four-principles\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMischa lays out four principles of Zettelkasten.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAtomic - \u003cem\u003eeach card conains one idea\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eLink - \u003cem\u003ecards are linked together\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eStructure - \u003cem\u003ecomes from the links\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eOwn Words - \u003cem\u003eYou write the note in your own words\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMy blog, tils, and thoughts make up my own zettelkasten.  I am not going to say that mine is a perfect representation of his method, but the components are here.  rather than building books, my thoughts and tils build up to blog posts.   The rate of blog posts I write definitely changes with the seasons of life, as seasons change it becomes a bigger or smaller part of the season.\u003c/p\u003e\n\u003cp\u003eI really like Mischa’s most important note to Write in your own words, this is what really promotes learning, and proves to yourself that you can form a thought around the topic.  Up until recently I’ve wrote everything, but lately I’ve taken to copy pasting some quotes into my thoughts posts, but I think this is fine, because generally its used to build on the narrative and give me a place to talk about the linked post.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"o1NJYnZCfmY\" title=\"Note-taking with Zettelkasten - An Introduction\" playlabel=\"Play: Note-taking with Zettelkasten - An Introduction\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nNiklas Luhmann created the Zettelkasten method of notetaking, He was the Da Vinci of writing, holding a high standard that we can take inspiration from even today in this digital era.\n\nAs many times as I have seem the Zettelkasten covered, I never knew that it roughly translated to little cards in a box.\n\n\n## Four Principles\n\nMischa lays out four principles of Zettelkasten.\n\n* Atomic - _each card conains one idea_\n* Link - _cards are linked together_\n* Structure - _comes from the links_\n* Own Words - _You write the note in your own words_\n\nMy blog, tils, and thoughts make up my own zettelkasten.  I am not going to say that mine is a perfect representation of his method, but the components are here.  rather than building books, my thoughts and tils build up to blog posts.   The rate of blog posts I write definitely changes with the seasons of life, as seasons change it becomes a bigger or smaller part of the season.\n\nI really like Mischa's most important note to Write in your own words, this is what really promotes learning, and proves to yourself that you can form a thought around the topic.  Up until recently I've wrote everything, but lately I've taken to copy pasting some quotes into my thoughts posts, but I think this is fine, because generally its used to build on the narrative and give me a place to talk about the linked post.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=o1NJYnZCfmY",
      "date_published": "2024-07-25T23:06:28Z",
      "date_modified": "2024-07-25T23:06:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blog",
        "zettelkasten",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-360/",
      "url": "https://go.waylonwalker.com/thought-360/",
      "title": "💭 add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/cb2cda4cf7b3776995dbc2e8608b60670a2cf8b2\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/cc60401e4af0cb25f811f9cb4f9325edbc78ade433ecfe21b5f9871e0fd01770/WaylonWalker/zmk-config-42block/commit/cb2cda4cf7b3776995dbc2e8608b60670a2cf8b2\" alt=\"add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-config-42block@cb2cda4 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-config-42block@cb2cda4 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eadd quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-config-42block@cb2cda4\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eEven after switching to my hm and ht behaviors I am running into some issues where sometimes I am still accidentally hitting mods(\u0026amp;hm) and layers(\u0026amp;ht) while typing and it’s been getting frustrating.  My main issue has been on \u0026amp;ht, they are configured the same so I suspect that my pinkies just move a bit slower over the keys than my pointer/middle finger.\u003c/p\u003e\n\u003cp\u003eI just added \u003ccode\u003equick-tap-ms\u003c/code\u003e and \u003ccode\u003erequire-prior-idle-ms\u003c/code\u003e to my \u0026amp;hm and \u0026amp;ht behaviors, and a few intentionally sloppy passes through monkeytype seem to show that its working well.  A few days of trying this will tell whether it was a good fix or if I have maybe gone too far the other way.\u003c/p\u003e\n\u003cp\u003eThe end goal here is to be able to roll over keys faster without worrying about hitting other layers or mods.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/cb2cda4cf7b3776995dbc2e8608b60670a2cf8b2\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/cc60401e4af0cb25f811f9cb4f9325edbc78ade433ecfe21b5f9871e0fd01770/WaylonWalker/zmk-config-42block/commit/cb2cda4cf7b3776995dbc2e8608b60670a2cf8b2\" alt=\"add quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-config-42block@cb2cda4 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eadd quick-tap-ms and require-prior-idle-ms · WaylonWalker/zmk-config-42block@cb2cda4\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nEven after switching to my hm and ht behaviors I am running into some issues where sometimes I am still accidentally hitting mods(\u0026hm) and layers(\u0026ht) while typing and it's been getting frustrating.  My main issue has been on \u0026ht, they are configured the same so I suspect that my pinkies just move a bit slower over the keys than my pointer/middle finger.\n\nI just added `quick-tap-ms` and `require-prior-idle-ms` to my \u0026hm and \u0026ht behaviors, and a few intentionally sloppy passes through monkeytype seem to show that its working well.  A few days of trying this will tell whether it was a good fix or if I have maybe gone too far the other way.\n\nThe end goal here is to be able to roll over keys faster without worrying about hitting other layers or mods.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/zmk-config-42block/commit/cb2cda4cf7b3776995dbc2e8608b60670a2cf8b2",
      "date_published": "2024-07-25T13:40:14Z",
      "date_modified": "2024-07-25T13:40:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "zmk",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/convert-mp4-for-twitter-with-ffmpeg/",
      "url": "https://go.waylonwalker.com/convert-mp4-for-twitter-with-ffmpeg/",
      "title": "convert mp4 for twitter with ffmpeg",
      "content_html": "\u003cp\u003eI’ve had a couple of uploads to twitter fail recently and has been a pain.  I\ntried some online converters for convenience, but none of them worked.  I\nreached out to chatgpt and found succeess with this ffmpeg command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003effmpeg -i input.mp4 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -vf \u003cspan class=\"s2\"\u003e\u0026#34;scale=trunc(oh*a/2)*2:min(720\\,trunc(ih*a/2)*2)\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -c:v libx264 -profile:v high -level:v 4.1 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -b:v 3500k -maxrate 3500k -bufsize 7000k \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -pix_fmt yuv420p \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -c:a aac -b:a 128k -ar \u003cspan class=\"m\"\u003e44100\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -movflags +faststart \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  output.mp4\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've had a couple of uploads to twitter fail recently and has been a pain.  I\ntried some online converters for convenience, but none of them worked.  I\nreached out to chatgpt and found succeess with this ffmpeg command.\n\n``` bash\nffmpeg -i input.mp4 \\\n  -vf \"scale=trunc(oh*a/2)*2:min(720\\,trunc(ih*a/2)*2)\" \\\n  -c:v libx264 -profile:v high -level:v 4.1 \\\n  -b:v 3500k -maxrate 3500k -bufsize 7000k \\\n  -pix_fmt yuv420p \\\n  -c:a aac -b:a 128k -ar 44100 \\\n  -movflags +faststart \\\n  output.mp4\n```\n",
      "summary": "I've had a couple of uploads to twitter fail recently and has been a pain. I tried some online converters for convenience, but none of them worked. I reached...",
      "date_published": "2024-07-25T12:51:29Z",
      "date_modified": "2024-07-25T12:51:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-359/",
      "url": "https://go.waylonwalker.com/thought-359/",
      "title": "💭 Tickle My Keys",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ticklemykeys.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://ticklemykeys.com/banner-logo-on-gray-1280x.webp\" alt=\"Tickle My Keys — Keyboards so good your fingers will be begging to tickle these keys.\" loading=\"lazy\"/ data-glightbox=\"description: Tickle My Keys — Keyboards so good your fingers will be begging to tickle these keys.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTickle My Keys\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKeyboards so good your fingers will be begging to tickle these keys.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eticklemykeys.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve been working on something, I’m gong to combine my mechanical engineering skills with my love of great keyboards and start a custom keyboard shop for building custom keyboards for exactly what people need with an emphasis on portability.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ticklemykeys.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://ticklemykeys.com/banner-logo-on-gray-1280x.webp\" alt=\"Tickle My Keys — Keyboards so good your fingers will be begging to tickle these keys.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTickle My Keys\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKeyboards so good your fingers will be begging to tickle these keys.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eticklemykeys.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've been working on something, I'm gong to combine my mechanical engineering skills with my love of great keyboards and start a custom keyboard shop for building custom keyboards for exactly what people need with an emphasis on portability.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ticklemykeys.com/",
      "date_published": "2024-07-24T18:02:41Z",
      "date_modified": "2024-07-24T18:02:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-358/",
      "url": "https://go.waylonwalker.com/thought-358/",
      "title": "💭 Git Fork vs Git Clone (Animated) - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"rxh6MhK6Tbs\" title=\"\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e Fork vs Git Clone\" playlabel=\"Play: Git Fork vs Git Clone\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn Prime covers this so well from all angles.  Can’t overstate the importance of that last step.  Look at the issues, and raise an issue if there is not one before putting in a bunch of hard work.  Make sure that the maintainers are open for your changes and no one else is already working on it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"rxh6MhK6Tbs\" title=\"Git Fork vs Git Clone\" playlabel=\"Play: Git Fork vs Git Clone\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDamn Prime covers this so well from all angles.  Can't overstate the importance of that last step.  Look at the issues, and raise an issue if there is not one before putting in a bunch of hard work.  Make sure that the maintainers are open for your changes and no one else is already working on it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=rxh6MhK6Tbs",
      "date_published": "2024-07-24T17:59:00Z",
      "date_modified": "2024-07-24T17:59:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/burntsushi-jiff/",
      "url": "https://go.waylonwalker.com/burntsushi-jiff/",
      "title": "⭐ BurntSushi jiff",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/BurntSushi/jiff\" 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\"\u003ejiff\u003c/a\u003e by \u003ca href=\"https://github.com/BurntSushi\" 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\"\u003eBurntSushi\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA datetime library for Rust that encourages you to jump into the pit of success.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [jiff](https://github.com/BurntSushi/jiff) by [BurntSushi](https://github.com/BurntSushi).\n\nA datetime library for Rust that encourages you to jump into the pit of success.\n",
      "summary": "Looking for inspiration? jiff by BurntSushi.",
      "date_published": "2024-07-24T03:15:31Z",
      "date_modified": "2024-07-24T03:15:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asg017-sqlite-jiff/",
      "url": "https://go.waylonwalker.com/asg017-sqlite-jiff/",
      "title": "⭐ asg017 sqlite-jiff",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/asg017/sqlite-jiff\" 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\"\u003esqlite-jiff\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/asg017\" 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\"\u003easg017\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [sqlite-jiff](https://github.com/asg017/sqlite-jiff), an amazing project by [asg017](https://github.com/asg017). It's worth exploring!\n\nNo description available.\n",
      "summary": "I'm really excited about sqlite-jiff, an amazing project by asg017. It's worth exploring!",
      "date_published": "2024-07-24T03:15:27Z",
      "date_modified": "2024-07-24T03:15:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-357/",
      "url": "https://go.waylonwalker.com/thought-357/",
      "title": "💭 Sqlite-jiff",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Jul/23/sqlite-jiff/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-jiff\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI linked to the brand new Jiff datetime library yesterday. Alex Garcia has already used it for an experimental SQLite extension providing a timezone-aware jiff_duration() function - a useful new …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSqlite is getting rust extensions now, and datetimes make it totally worth if if they work well and and fast, two things that don’t always go together in datetime libraries\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Jul/23/sqlite-jiff/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-jiff\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI linked to the brand new Jiff datetime library yesterday. Alex Garcia has already used it for an experimental SQLite extension providing a timezone-aware jiff_duration() function - a useful new …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSqlite is getting rust extensions now, and datetimes make it totally worth if if they work well and and fast, two things that don't always go together in datetime libraries\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/Jul/23/sqlite-jiff/",
      "date_published": "2024-07-24T03:12:14Z",
      "date_modified": "2024-07-24T03:12:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "sql",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-356/",
      "url": "https://go.waylonwalker.com/thought-356/",
      "title": "💭 There’s a TUI for that with Nick Janetakis (Changelog \u0026 Friend...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/53\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://snap.fly.dev/friends/53/img\" alt=\"There’s a TUI for that with Nick Janetakis (Changelog \u0026amp; Friends #53) — Nick Janetakis is back and this time we\u0026#39;re talking about TUIs (text-based user interfaces) — some we\u0026#39;ve tried and some we plan to try. All are collected from Justin Garrison\u0026#39;s Awesome TUIs repo on GitHub. This episode is \u0026#34;AI free.\u0026#34;\" loading=\"lazy\"/ data-glightbox=\"description: There’s a TUI for that with Nick Janetakis (Changelog \u0026amp; Friends #53) — Nick Janetakis is back and this time we\u0026#39;re talking about TUIs (text-based user interfaces) — some we\u0026#39;ve tried and some we plan to try. All are collected from Justin Garrison\u0026#39;s Awesome TUIs repo on GitHub. This episode is \u0026#34;AI free.\u0026#34;\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThere’s a TUI for that with Nick Janetakis (Changelog \u0026amp; Friends #53)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNick Janetakis is back and this time we\u0026#39;re talking about TUIs (text-based user interfaces) — some we\u0026#39;ve tried and some we plan to try. All are collected from Justin Garrison\u0026#39;s Awesome TUIs repo o...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e50 minutes into this episode they start a discussion on seo, and naming posts.  They give Jerod the task of googling for tmux and see how high up the ranking they find Nick, expecting a number one post, and he cant even get to Nick.\u003c/p\u003e\n\u003cp\u003eThe problem?  Jerod is such a beginner he doesn’t even know what to search, he starts with a long query about getting started with tmux, but all of Nick’s videos are why you should use advanced features of tmux, but Jerod has yet to discover that these exist.\u003c/p\u003e\n\u003cp\u003eAs experts we often come up wtih a post title for the exact thing that we are trying to teach someone how to do, but yet, they haven’t discussed that they need that feature yet, they just want the getting started guide, or tell me why I should start using tmux.  Not why sessions are better than windows, and tabs suck all together.\u003c/p\u003e\n\u003cp\u003eDefinitely an eye opening conversation listening to two experts sit in shock as the beginner just gets dropped big tech articles, and Nick Jani-freakin-takis doesn’t even hit the query page after page.\u003c/p\u003e\n\u003cp\u003eAlso hats off to Nick for keeping a 2014 machine alive, I got you beat by a few years on my 2011 free give away machine, but I stopped daily driving that two years ago, and its purely a \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 now.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/53\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/friends/53/img\" alt=\"There’s a TUI for that with Nick Janetakis (Changelog \u0026amp; Friends #53) — Nick Janetakis is back and this time we\u0026#39;re talking about TUIs (text-based user interfaces) — some we\u0026#39;ve tried and some we plan to try. All are collected from Justin Garrison\u0026#39;s Awesome TUIs repo on GitHub. This episode is \u0026#34;AI free.\u0026#34;\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eThere’s a TUI for that with Nick Janetakis (Changelog \u0026amp; Friends #53)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNick Janetakis is back and this time we\u0026#39;re talking about TUIs (text-based user interfaces) — some we\u0026#39;ve tried and some we plan to try. All are collected from Justin Garrison\u0026#39;s Awesome TUIs repo o...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n50 minutes into this episode they start a discussion on seo, and naming posts.  They give Jerod the task of googling for tmux and see how high up the ranking they find Nick, expecting a number one post, and he cant even get to Nick.\n\nThe problem?  Jerod is such a beginner he doesn't even know what to search, he starts with a long query about getting started with tmux, but all of Nick's videos are why you should use advanced features of tmux, but Jerod has yet to discover that these exist.\n\nAs experts we often come up wtih a post title for the exact thing that we are trying to teach someone how to do, but yet, they haven't discussed that they need that feature yet, they just want the getting started guide, or tell me why I should start using tmux.  Not why sessions are better than windows, and tabs suck all together.\n\nDefinitely an eye opening conversation listening to two experts sit in shock as the beginner just gets dropped big tech articles, and Nick Jani-freakin-takis doesn't even hit the query page after page.\n\nAlso hats off to Nick for keeping a 2014 machine alive, I got you beat by a few years on my 2011 free give away machine, but I stopped daily driving that two years ago, and its purely a homelab now.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/friends/53",
      "date_published": "2024-07-24T02:47:39Z",
      "date_modified": "2024-07-24T02:47:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tui",
        "cli",
        "product",
        "seo",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-355/",
      "url": "https://go.waylonwalker.com/thought-355/",
      "title": "💭 The Verge on X: \"Stress testing a snack-proof keyboard https:/...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/verge/status/984764889754456065\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a wild keyboard test.  This is exactly what I want to see from ticklemykeys.com.  I want to make ergomechanical boards that you can use and abuse.  I want you to not be afraid to take them with you or to eat a nutrigrain bar in the same room (cough 2015 mac).  And If something does go out, I want users to be able to repair it themsleves, key caps, switches, batteries, and microcontrollers should be replacible parts they can get at a good cost from the shop if they have paid for a board.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/verge/status/984764889754456065\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a wild keyboard test.  This is exactly what I want to see from ticklemykeys.com.  I want to make ergomechanical boards that you can use and abuse.  I want you to not be afraid to take them with you or to eat a nutrigrain bar in the same room (cough 2015 mac).  And If something does go out, I want users to be able to repair it themsleves, key caps, switches, batteries, and microcontrollers should be replacible parts they can get at a good cost from the shop if they have paid for a board.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/verge/status/984764889754456065",
      "date_published": "2024-07-23T14:24:08Z",
      "date_modified": "2024-07-23T14:24:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-354/",
      "url": "https://go.waylonwalker.com/thought-354/",
      "title": "💭 all lt keys to hl · WaylonWalker/zmk-config-42block@ce25356",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/ce25356e88eb2439182201700314133de719457e\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/f8d4d1570b5f3dd9b06dd7712c0b6dcc434f739808b8118d2808edc7185c7744/WaylonWalker/zmk-config-42block/commit/ce25356e88eb2439182201700314133de719457e\" alt=\"all lt keys to hl · WaylonWalker/zmk-config-42block@ce25356 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: all lt keys to hl · WaylonWalker/zmk-config-42block@ce25356 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eall lt keys to hl · WaylonWalker/zmk-config-42block@ce25356\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I swapped out all of my keys that are used dual purpose for letters and layers to homerow layers.  This prevents goofy things happening when rolling, and prefers-tap makes it so that keys that are rolled over get hit as letters instead of as layers.  This was one of my biggest hurdles jumping into zmk,  lt as a homerow key just does not behave the same as the ht/hm behaviors with tap-preferred set.\u003c/p\u003e\n\u003cdiv class=\"admonition seealso\"\u003e\n\u003cp class=\"admonition-title\"\u003eSeealso\u003c/p\u003e\n\u003cp\u003eSee previous commit where I added the hl \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/9522c859cdf024a2c2b73931c130ddc907c09ffc\" 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\"\u003ehttps://github.com/WaylonWalker/zmk-config-42block/commit/9522c859cdf024a2c2b73931c130ddc907c09ffc\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nl\"\u003ehl\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ehomerow_layer\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ecompatible\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;zmk,behavior-hold-tap\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;HOMEROW_LAYER\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebindings\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003emo\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003ekp\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"cp\"\u003e#binding-cells = \u0026lt;2\u0026gt;;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e            \u003cspan class=\"n\"\u003etapping\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eterm\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ems\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"mi\"\u003e150\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eflavor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;tap-preferred\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-42block/commit/ce25356e88eb2439182201700314133de719457e\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/f8d4d1570b5f3dd9b06dd7712c0b6dcc434f739808b8118d2808edc7185c7744/WaylonWalker/zmk-config-42block/commit/ce25356e88eb2439182201700314133de719457e\" alt=\"all lt keys to hl · WaylonWalker/zmk-config-42block@ce25356 — Contribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eall lt keys to hl · WaylonWalker/zmk-config-42block@ce25356\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to WaylonWalker/zmk-config-42block development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I swapped out all of my keys that are used dual purpose for letters and layers to homerow layers.  This prevents goofy things happening when rolling, and prefers-tap makes it so that keys that are rolled over get hit as letters instead of as layers.  This was one of my biggest hurdles jumping into zmk,  lt as a homerow key just does not behave the same as the ht/hm behaviors with tap-preferred set.\n\n\n!!! seealso\n  See previous commit where I added the hl https://github.com/WaylonWalker/zmk-config-42block/commit/9522c859cdf024a2c2b73931c130ddc907c09ffc\n\n``` c\n        hl: homerow_layer {\n            compatible = \"zmk,behavior-hold-tap\";\n            label = \"HOMEROW_LAYER\";\n            bindings = \u003c\u0026mo\u003e, \u003c\u0026kp\u003e;\n\n            #binding-cells = \u003c2\u003e;\n            tapping-term-ms = \u003c150\u003e;\n            flavor = \"tap-preferred\";\n        };\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/zmk-config-42block/commit/ce25356e88eb2439182201700314133de719457e",
      "date_published": "2024-07-22T13:42:46Z",
      "date_modified": "2024-07-22T13:42:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "zmk",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/infisical-infisical/",
      "url": "https://go.waylonwalker.com/infisical-infisical/",
      "title": "⭐ Infisical infisical",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/Infisical\" 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\"\u003eInfisical’s\u003c/a\u003e project \u003ca href=\"https://github.com/Infisical/infisical\" 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\"\u003einfisical\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e♾ Infisical is the open-source secret management platform: Sync secrets across your team/infrastructure, prevent secret leaks, and manage internal PKI\u003c/p\u003e\n",
      "content_text": "\nI like [Infisical's](https://github.com/Infisical) project [infisical](https://github.com/Infisical/infisical).\n\n♾ Infisical is the open-source secret management platform: Sync secrets across your team/infrastructure, prevent secret leaks, and manage internal PKI\n",
      "summary": "I like Infisical's project infisical.",
      "date_published": "2024-07-21T15:01:16Z",
      "date_modified": "2024-07-21T15:01:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-353/",
      "url": "https://go.waylonwalker.com/thought-353/",
      "title": "💭 /Tips-for-Being-Happier--Healthier--More-Productive",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://podcasters.spotify.com/pod/show/garyvee/episodes/Tips-for-Being-Happier--Healthier--More-Productive-e2m4184\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://d3t3ozftmdmh3i.cloudfront.net/staging/podcast_uploaded_nologo400/2454369/2454369-1740850353410-0cbc4ddd1c276.jpg\" alt=\"Tips for Being Happier, Healthier, More Productive by The GaryVee Audio Experience — Today\u0026#39;s podcast episode is an interview I did on the Happier with Gretchen Rubin Podcast with Gretchen Rubin and Elizabeth Craft. We discuss balancing ambition, tenacity, humility, and patience. I introduce my new children\u0026#39;s book Meet Me In The Middle, that\u0026#39;s part of the VeeFriends project, aimed at teaching kids valuable life virtues. Lastly, I also share an exercise that can help you feel better through deep breathing and perspective shifts. Hope you enjoy!\n\u0026lt;p\u0026gt;Check out my new kids book:\ngaryvee.com/vfbook\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Tips for Being Happier, Healthier, More Productive by The GaryVee Audio Experience — Today\u0026#39;s podcast episode is an interview I did on the Happier with Gretchen Rubin Podcast with Gretchen Rubin and Elizabeth Craft. We discuss balancing ambition, tenacity, humility, and patience. I introduce my new children\u0026#39;s book Meet Me In The Middle, that\u0026#39;s part of the VeeFriends project, aimed at teaching kids valuable life virtues. Lastly, I also share an exercise that can help you feel better through deep breathing and perspective shifts. Hope you enjoy!\n\u0026lt;p\u0026gt;Check out my new kids book:\ngaryvee.com/vfbook\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eTips for Being Happier, Healthier, More Productive by The GaryVee Audio Experience\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eToday\u0026#39;s podcast episode is an interview I did on the Happier with Gretchen Rubin Podcast with Gretchen Rubin and Elizabeth Craft. We discuss balancing ambition, tenacity, humility, and patience. I …\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eSpotify for Creators · podcasters.spotify.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eDeep breath, the deepest you can take in\u003c/p\u003e\n\u003cp\u003eSmile, a real fukin smile not some pansy bullshit\u003c/p\u003e\n\u003cp\u003eSay I’m not going to give a shit about this when I’m 90\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://podcasters.spotify.com/pod/show/garyvee/episodes/Tips-for-Being-Happier--Healthier--More-Productive-e2m4184\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://d3t3ozftmdmh3i.cloudfront.net/staging/podcast_uploaded_nologo400/2454369/2454369-1740850353410-0cbc4ddd1c276.jpg\" alt=\"Tips for Being Happier, Healthier, More Productive by The GaryVee Audio Experience — Today\u0026#39;s podcast episode is an interview I did on the Happier with Gretchen Rubin Podcast with Gretchen Rubin and Elizabeth Craft. We discuss balancing ambition, tenacity, humility, and patience. I introduce my new children\u0026#39;s book Meet Me In The Middle, that\u0026#39;s part of the VeeFriends project, aimed at teaching kids valuable life virtues. Lastly, I also share an exercise that can help you feel better through deep breathing and perspective shifts. Hope you enjoy!\n\nCheck out my new kids book:\ngaryvee.com/vfbook\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTips for Being Happier, Healthier, More Productive by The GaryVee Audio Experience\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eToday\u0026#39;s podcast episode is an interview I did on the Happier with Gretchen Rubin Podcast with Gretchen Rubin and Elizabeth Craft. We discuss balancing ambition, tenacity, humility, and patience. I ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSpotify for Creators \u0026middot; podcasters.spotify.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDeep breath, the deepest you can take in\n\nSmile, a real fukin smile not some pansy bullshit\n\nSay I'm not going to give a shit about this when I'm 90\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://podcasters.spotify.com/pod/show/garyvee/episodes/Tips-for-Being-Happier--Healthier--More-Productive-e2m4184",
      "date_published": "2024-07-20T18:02:22Z",
      "date_modified": "2024-07-20T18:02:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/evantravers-zmk-config/",
      "url": "https://go.waylonwalker.com/evantravers-zmk-config/",
      "title": "⭐ evantravers zmk-config",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/evantravers/zmk-config\" 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\"\u003ezmk-config\u003c/a\u003e from \u003ca href=\"https://github.com/evantravers\" 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\"\u003eevantravers\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI came across [zmk-config](https://github.com/evantravers/zmk-config) from [evantravers](https://github.com/evantravers), and it's packed with great features and ideas.\n\nNo description available.\n",
      "summary": "I came across zmk-config from evantravers, and it's packed with great features and ideas.",
      "date_published": "2024-07-19T16:34:03Z",
      "date_modified": "2024-07-19T16:34:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-352/",
      "url": "https://go.waylonwalker.com/thought-352/",
      "title": "💭 Can't use System update - invalid signature when validating AS...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ublue-os/bazzite/issues/1316\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/ef394092e0de3c7e1a81c26c4e6b59d99d429c1ecd805ec9f762fff8a08c37c8/ublue-os/bazzite/issues/1316\" alt=\"Can\u0026#39;t use System update - invalid signature when validating ASN.1 encoded signature · Issue #1316 · ublue-os/bazzite — Describe the bug Hello, I installed the nvidia KDE version of bazzite just 2 days ago. Today I wanted to update to the most recent release, but unfortunately, I keep getting the following error: Pu...\" loading=\"lazy\"/ data-glightbox=\"description: Can\u0026#39;t use System update - invalid signature when validating ASN.1 encoded signature · Issue #1316 · ublue-os/bazzite — Describe the bug Hello, I installed the nvidia KDE version of bazzite just 2 days ago. Today I wanted to update to the most recent release, but unfortunately, I keep getting the following error: Pu...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCan\u0026#39;t use System update - invalid signature when validating ASN.1 encoded signature · Issue #1316 · ublue-os/bazzite\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDescribe the bug Hello, I installed the nvidia KDE version of bazzite just 2 days ago. Today I wanted to update to the most recent release, but unfortunately, I keep getting the following error: Pu...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis fixed my bazzite update issues after the signing key was rotated recently.  This team is killing it with such a great user experience.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -sL https://fix.universal-blue.org/ \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo bash \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ublue-os/bazzite/issues/1316\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/ef394092e0de3c7e1a81c26c4e6b59d99d429c1ecd805ec9f762fff8a08c37c8/ublue-os/bazzite/issues/1316\" alt=\"Can\u0026#39;t use System update - invalid signature when validating ASN.1 encoded signature · Issue #1316 · ublue-os/bazzite — Describe the bug Hello, I installed the nvidia KDE version of bazzite just 2 days ago. Today I wanted to update to the most recent release, but unfortunately, I keep getting the following error: Pu...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCan\u0026#39;t use System update - invalid signature when validating ASN.1 encoded signature · Issue #1316 · ublue-os/bazzite\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDescribe the bug Hello, I installed the nvidia KDE version of bazzite just 2 days ago. Today I wanted to update to the most recent release, but unfortunately, I keep getting the following error: Pu...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis fixed my bazzite update issues after the signing key was rotated recently.  This team is killing it with such a great user experience.\n\n``` bash\ncurl -sL https://fix.universal-blue.org/ | sudo bash \n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/ublue-os/bazzite/issues/1316",
      "date_published": "2024-07-18T02:00:01Z",
      "date_modified": "2024-07-18T02:00:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bazzite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-transcendent-textual/",
      "url": "https://go.waylonwalker.com/textualize-transcendent-textual/",
      "title": "⭐ Textualize transcendent-textual",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize’s\u003c/a\u003e project \u003ca href=\"https://github.com/Textualize/transcendent-textual\" 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\"\u003etranscendent-textual\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTextual apps and libraries\u003c/p\u003e\n",
      "content_text": "\nI like [Textualize's](https://github.com/Textualize) project [transcendent-textual](https://github.com/Textualize/transcendent-textual).\n\nTextual apps and libraries\n",
      "summary": "I like Textualize's project transcendent-textual.",
      "date_published": "2024-07-17T20:57:23Z",
      "date_modified": "2024-07-17T20:57:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-351/",
      "url": "https://go.waylonwalker.com/thought-351/",
      "title": "💭 Update Kconfig.shield rec by bravekarma · WaylonWalker/zmk-con...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-ninepad/commit/8b76b76e2f094453aaf7ffe51bb405ce3a25a611\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6bc1d5167f7db2df873e37de253699e40afcf3b3547256f448b056f4a06b3c68/WaylonWalker/zmk-config-ninepad/commit/8b76b76e2f094453aaf7ffe51bb405ce3a25a611\" alt=\"Update Kconfig.shield rec by bravekarma · WaylonWalker/zmk-config-ninepad@8b76b76 — zmk configuration for ninpad keyboard. Contribute to WaylonWalker/zmk-config-ninepad development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: Update Kconfig.shield rec by bravekarma · WaylonWalker/zmk-config-ninepad@8b76b76 — zmk configuration for ninpad keyboard. Contribute to WaylonWalker/zmk-config-ninepad development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUpdate Kconfig.shield rec by bravekarma · WaylonWalker/zmk-config-ninepad@8b76b76\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezmk configuration for ninpad keyboard. Contribute to WaylonWalker/zmk-config-ninepad development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis one space killed my whole config and held me back from learning zmk.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/WaylonWalker/zmk-config-ninepad/commit/8b76b76e2f094453aaf7ffe51bb405ce3a25a611\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6bc1d5167f7db2df873e37de253699e40afcf3b3547256f448b056f4a06b3c68/WaylonWalker/zmk-config-ninepad/commit/8b76b76e2f094453aaf7ffe51bb405ce3a25a611\" alt=\"Update Kconfig.shield rec by bravekarma · WaylonWalker/zmk-config-ninepad@8b76b76 — zmk configuration for ninpad keyboard. Contribute to WaylonWalker/zmk-config-ninepad development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUpdate Kconfig.shield rec by bravekarma · WaylonWalker/zmk-config-ninepad@8b76b76\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezmk configuration for ninpad keyboard. Contribute to WaylonWalker/zmk-config-ninepad development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis one space killed my whole config and held me back from learning zmk.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/WaylonWalker/zmk-config-ninepad/commit/8b76b76e2f094453aaf7ffe51bb405ce3a25a611",
      "date_published": "2024-07-17T00:08:56Z",
      "date_modified": "2024-07-17T00:08:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-350/",
      "url": "https://go.waylonwalker.com/thought-350/",
      "title": "💭 DragonFruit",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://kbd.news/DragonFruit-2178.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://kbd.news/DragonFruit-2178.html\" alt=\"https://kbd.news/DragonFruit-2178.html\"/ data-glightbox=\"description: https://kbd.news/DragonFruit-2178.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThe trackball spinner looks sick here.  I can imagine using that spinner like a scroll wheel.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://kbd.news/DragonFruit-2178.html](/static/https://kbd.news/DragonFruit-2178.html)\n\nThe trackball spinner looks sick here.  I can imagine using that spinner like a scroll wheel.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kbd.news/DragonFruit-2178.html",
      "date_published": "2024-07-15T17:14:20Z",
      "date_modified": "2024-07-15T17:14:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-349/",
      "url": "https://go.waylonwalker.com/thought-349/",
      "title": "💭 NEC M-System",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://kbd.news/NEC-M-System-1729.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://kbd.news/NEC-M-System-1729.html\" alt=\"https://kbd.news/NEC-M-System-1729.html\"/ data-glightbox=\"description: https://kbd.news/NEC-M-System-1729.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThey had split ergo boards back in 1983??? WTF who the heck keeps these row stagger boards going.  This board looks like endgame material, If this thing was more normal, it’d kill a whole section of the ergo mechanical keyboard industry for good reason.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://kbd.news/NEC-M-System-1729.html](/static/https://kbd.news/NEC-M-System-1729.html)\n\nThey had split ergo boards back in 1983??? WTF who the heck keeps these row stagger boards going.  This board looks like endgame material, If this thing was more normal, it'd kill a whole section of the ergo mechanical keyboard industry for good reason.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kbd.news/NEC-M-System-1729.html",
      "date_published": "2024-07-15T17:11:38Z",
      "date_modified": "2024-07-15T17:11:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboards",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-348/",
      "url": "https://go.waylonwalker.com/thought-348/",
      "title": "💭 Red Herring - Solenoid Edition sound test - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"n52y4MOQAjw\" title=\"Red Herring - Solenoid Edition sound test\" playlabel=\"Play: Red Herring - Solenoid Edition sound test\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis keyboard layout looks weird af the mix of column staggar and row stagger is wild.  Not sure if its genius or an abomination.\u003c/p\u003e\n\u003cp\u003eThat solenoid though is absolutely wild though,  I kinda want one TBH.\u003c/p\u003e\n\u003cp\u003eand the clear plate with the diodes laid out on it in a herringbone pattern is a very nice touch.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"n52y4MOQAjw\" title=\"Red Herring - Solenoid Edition sound test\" playlabel=\"Play: Red Herring - Solenoid Edition sound test\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis keyboard layout looks weird af the mix of column staggar and row stagger is wild.  Not sure if its genius or an abomination.\n\nThat solenoid though is absolutely wild though,  I kinda want one TBH.\n\nand the clear plate with the diodes laid out on it in a herringbone pattern is a very nice touch.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=n52y4MOQAjw\u0026t=40s",
      "date_published": "2024-07-15T17:09:18Z",
      "date_modified": "2024-07-15T17:09:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-347/",
      "url": "https://go.waylonwalker.com/thought-347/",
      "title": "💭 Text cursor bug in my Chrome browser that causes the blinking ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/75886276/text-cursor-bug-in-my-chrome-browser-that-causes-the-blinking-cursor-to-appear-e\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003etoday I learned that there is an accessibility feature in chrome that allows you to place a text cursor anywhere on the page.  I had accidentally done this and it drove me mad that it was there.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/75886276/text-cursor-bug-in-my-chrome-browser-that-causes-the-blinking-cursor-to-appear-e\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ntoday I learned that there is an accessibility feature in chrome that allows you to place a text cursor anywhere on the page.  I had accidentally done this and it drove me mad that it was there.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/75886276/text-cursor-bug-in-my-chrome-browser-that-causes-the-blinking-cursor-to-appear-e",
      "date_published": "2024-07-12T14:16:32Z",
      "date_modified": "2024-07-12T14:16:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "chrome",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-346/",
      "url": "https://go.waylonwalker.com/thought-346/",
      "title": "💭 python is simultaneously at the top and the bottom of the tier...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2fopl7-2wT0\" title=\"Use Java For Everything\" playlabel=\"Play: Use Java For Everything\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHard to argue this take, happy to see that its at the top.  With it being such an old language its amazing that it still holds this position, and not surprising that it has warts, and thing that have turn users off from wanting anything to do with it.\u003c/p\u003e\n\u003cp\u003etimestamped in the link\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2fopl7-2wT0\" title=\"Use Java For Everything\" playlabel=\"Play: Use Java For Everything\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHard to argue this take, happy to see that its at the top.  With it being such an old language its amazing that it still holds this position, and not surprising that it has warts, and thing that have turn users off from wanting anything to do with it.\n\ntimestamped in the link\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?t=326\u0026v=2fopl7-2wT0",
      "date_published": "2024-07-11T13:41:04Z",
      "date_modified": "2024-07-11T13:41:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-345/",
      "url": "https://go.waylonwalker.com/thought-345/",
      "title": "💭 Command Line Interface Guidelines",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://clig.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://clig.dev/CLIG-social-card.jpg\" alt=\"Command Line Interface Guidelines — An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.\" loading=\"lazy\"/ data-glightbox=\"description: Command Line Interface Guidelines — An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCommand Line Interface Guidelines\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eclig.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty sick set of guidelines to help you write better cli programs, I’m definitely coming back to reading this one more in depth later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://clig.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://clig.dev/CLIG-social-card.jpg\" alt=\"Command Line Interface Guidelines — An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCommand Line Interface Guidelines\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAn open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eclig.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a pretty sick set of guidelines to help you write better cli programs, I'm definitely coming back to reading this one more in depth later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://clig.dev/",
      "date_published": "2024-07-11T12:57:45Z",
      "date_modified": "2024-07-11T12:57:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-344/",
      "url": "https://go.waylonwalker.com/thought-344/",
      "title": "💭 Render-blocking on purpose",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fullystacked.net/render-blocking-on-purpose/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efullystacked.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can explicitly make a script render blocking, nothing will be rendered until this js is ready.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003eblocking\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;render\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;important.js\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003edefer\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fullystacked.net/render-blocking-on-purpose/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efullystacked.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nYou can explicitly make a script render blocking, nothing will be rendered until this js is ready.\n\n\n``` html\n\u003cscript blocking=\"render\" \n        src=\"important.js\" \n        defer\u003e\u003c/script\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fullystacked.net/render-blocking-on-purpose/",
      "date_published": "2024-07-11T12:55:28Z",
      "date_modified": "2024-07-11T12:55:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "html",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-343/",
      "url": "https://go.waylonwalker.com/thought-343/",
      "title": "💭 Remove Background Web - a Hugging Face Space by Xenova",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://huggingface.co/spaces/Xenova/remove-background-web\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn-thumbnails.huggingface.co/social-thumbnails/spaces/Xenova/remove-background-web.png\" alt=\"Remove Background Web - a Hugging Face Space by Xenova — In-browser background removal\" loading=\"lazy\"/ data-glightbox=\"description: Remove Background Web - a Hugging Face Space by Xenova — In-browser background removal\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRemove Background Web - a Hugging Face Space by Xenova\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn-browser background removal\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehuggingface.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve long been a user of remove.bg, and I just discovered that you can run this transformer right within your browser with no api limits.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://huggingface.co/spaces/Xenova/remove-background-web\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn-thumbnails.huggingface.co/social-thumbnails/spaces/Xenova/remove-background-web.png\" alt=\"Remove Background Web - a Hugging Face Space by Xenova — In-browser background removal\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRemove Background Web - a Hugging Face Space by Xenova\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn-browser background removal\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehuggingface.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've long been a user of remove.bg, and I just discovered that you can run this transformer right within your browser with no api limits.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://huggingface.co/spaces/Xenova/remove-background-web",
      "date_published": "2024-07-11T12:50:22Z",
      "date_modified": "2024-07-11T12:50:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/volfpeter-fasthx/",
      "url": "https://go.waylonwalker.com/volfpeter-fasthx/",
      "title": "⭐ volfpeter fasthx",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/volfpeter\" 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\"\u003evolfpeter\u003c/a\u003e and their project \u003ca href=\"https://github.com/volfpeter/fasthx\" 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\"\u003efasthx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\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 server-side rendering with built-in \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003eHTMX\u003c/a\u003e support.\u003c/p\u003e\n",
      "content_text": "\nCheck out [volfpeter](https://github.com/volfpeter) and their project [fasthx](https://github.com/volfpeter/fasthx).\n\nFastAPI server-side rendering with built-in HTMX support.\n",
      "summary": "Check out volfpeter and their project fasthx.",
      "date_published": "2024-07-10T12:55:17Z",
      "date_modified": "2024-07-10T12:55:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-342/",
      "url": "https://go.waylonwalker.com/thought-342/",
      "title": "💭 FastHX",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://volfpeter.github.io/fasthx/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFastHX - FastHX\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evolfpeter.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eVery interesting approach to \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e and fast api.  It uses separate decorators for returning template partials and json that can be stacked to include both options on a single route.  The templates are explicitly set in the decorator.  Separate decorators are used for full page and partial pages.  I don’t see an example of full and partial pages being combined.  I think the demo app must be behaving in a spa like fashion where it does not get all of the data when it calls index and index will ask for user-list.\u003c/p\u003e\n\u003cp\u003eDefinitely going to keep my eye on this project and ponder on it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.templating\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efasthx\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Pydantic model of the data the example API is using.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create the app.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a FastAPI Jinja2Templates instance and use it to create a\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# FastHX Jinja instance that will serve as your decorator.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ejinja\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@jinja.page\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;index.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eindex\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/user-list\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@jinja.hx\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user-list.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehtmx_or_data\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;John\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Lennon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Paul\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;McCartney\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;George\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Harrison\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Ringo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Starr\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/admin-list\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@jinja.hx\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user-list.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eno_data\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehtmx_only\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Billy\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Shears\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://volfpeter.github.io/fasthx/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFastHX - FastHX\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evolfpeter.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nVery interesting approach to htmx and fast api.  It uses separate decorators for returning template partials and json that can be stacked to include both options on a single route.  The templates are explicitly set in the decorator.  Separate decorators are used for full page and partial pages.  I don't see an example of full and partial pages being combined.  I think the demo app must be behaving in a spa like fashion where it does not get all of the data when it calls index and index will ask for user-list.\n\nDefinitely going to keep my eye on this project and ponder on it.\n\n\n``` python\nfrom fastapi import FastAPI\nfrom fastapi.templating import Jinja2Templates\nfrom fasthx import Jinja\nfrom pydantic import BaseModel\n\n# Pydantic model of the data the example API is using.\nclass User(BaseModel):\n    first_name: str\n    last_name: str\n\n# Create the app.\napp = FastAPI()\n\n# Create a FastAPI Jinja2Templates instance and use it to create a\n# FastHX Jinja instance that will serve as your decorator.\njinja = Jinja(Jinja2Templates(\"templates\"))\n\n@app.get(\"/\")\n@jinja.page(\"index.html\")\ndef index() -\u003e None:\n    ...\n\n@app.get(\"/user-list\")\n@jinja.hx(\"user-list.html\")\nasync def htmx_or_data() -\u003e list[User]:\n    return [\n        User(first_name=\"John\", last_name=\"Lennon\"),\n        User(first_name=\"Paul\", last_name=\"McCartney\"),\n        User(first_name=\"George\", last_name=\"Harrison\"),\n        User(first_name=\"Ringo\", last_name=\"Starr\"),\n    ]\n\n@app.get(\"/admin-list\")\n@jinja.hx(\"user-list.html\", no_data=True)\ndef htmx_only() -\u003e list[User]:\n    return [User(first_name=\"Billy\", last_name=\"Shears\")]\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://volfpeter.github.io/fasthx/",
      "date_published": "2024-07-10T12:53:15Z",
      "date_modified": "2024-07-10T12:53:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "htmx",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-341/",
      "url": "https://go.waylonwalker.com/thought-341/",
      "title": "💭 FastHX",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://volfpeter.github.io/fasthx/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFastHX - FastHX\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evolfpeter.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eVery interesting approach to \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e and fast api.  It uses separate decorators for returning template partials and json that can be stacked to include both options on a single route.  The templates are explicitly set in the decorator.  Separate decorators are used for full page and partial pages.  I don’t see an example of full and partial pages being combined.  I think the demo app must be behaving in a spa like fashion where it does not get all of the data when it calls index and index will ask for user-list.\u003c/p\u003e\n\u003cp\u003eDefinitely going to keep my eye on this project and ponder on it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.templating\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efasthx\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Pydantic model of the data the example API is using.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create the app.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a FastAPI Jinja2Templates instance and use it to create a\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# FastHX Jinja instance that will serve as your decorator.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ejinja\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@jinja.page\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;index.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eindex\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/user-list\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@jinja.hx\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user-list.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehtmx_or_data\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;John\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Lennon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Paul\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;McCartney\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;George\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Harrison\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Ringo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Starr\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/admin-list\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@jinja.hx\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user-list.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eno_data\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehtmx_only\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Billy\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elast_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Shears\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://volfpeter.github.io/fasthx/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFastHX - FastHX\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evolfpeter.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nVery interesting approach to htmx and fast api.  It uses separate decorators for returning template partials and json that can be stacked to include both options on a single route.  The templates are explicitly set in the decorator.  Separate decorators are used for full page and partial pages.  I don't see an example of full and partial pages being combined.  I think the demo app must be behaving in a spa like fashion where it does not get all of the data when it calls index and index will ask for user-list.\n\nDefinitely going to keep my eye on this project and ponder on it.\n\n\n``` python\nfrom fastapi import FastAPI\nfrom fastapi.templating import Jinja2Templates\nfrom fasthx import Jinja\nfrom pydantic import BaseModel\n\n# Pydantic model of the data the example API is using.\nclass User(BaseModel):\n    first_name: str\n    last_name: str\n\n# Create the app.\napp = FastAPI()\n\n# Create a FastAPI Jinja2Templates instance and use it to create a\n# FastHX Jinja instance that will serve as your decorator.\njinja = Jinja(Jinja2Templates(\"templates\"))\n\n@app.get(\"/\")\n@jinja.page(\"index.html\")\ndef index() -\u003e None:\n    ...\n\n@app.get(\"/user-list\")\n@jinja.hx(\"user-list.html\")\nasync def htmx_or_data() -\u003e list[User]:\n    return [\n        User(first_name=\"John\", last_name=\"Lennon\"),\n        User(first_name=\"Paul\", last_name=\"McCartney\"),\n        User(first_name=\"George\", last_name=\"Harrison\"),\n        User(first_name=\"Ringo\", last_name=\"Starr\"),\n    ]\n\n@app.get(\"/admin-list\")\n@jinja.hx(\"user-list.html\", no_data=True)\ndef htmx_only() -\u003e list[User]:\n    return [User(first_name=\"Billy\", last_name=\"Shears\")]\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://volfpeter.github.io/fasthx/",
      "date_published": "2024-07-10T12:53:15Z",
      "date_modified": "2024-07-10T12:53:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "htmx",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-340/",
      "url": "https://go.waylonwalker.com/thought-340/",
      "title": "💭 Pinout and Schematic - nice!nano",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nicekeyboards.com/docs/nice-nano/pinout-schematic/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/nicekeyboards.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/nicekeyboards.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePinout and Schematic - nice!nano\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePinout and schematic for the nice!nano\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003enicekeyboards.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ePinout for nice!nano boards.   Note that P0.15 means gpio port 0 pin 15, they can be referenced in zmk when setting column and row pins.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#include\u003c/span\u003e \u003cspan class=\"cpf\"\u003e\u0026lt;dt-bindings/zmk/matrix_transform.h\u0026gt;\u003c/span\u003e\u003cspan class=\"cp\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003echosen\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ezmk\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ekscan\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_kscan\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ezmk\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ematrix_transform\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_transform\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edelete\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eproperty\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"n\"\u003ezephyr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edelete\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eproperty\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"n\"\u003ezephyr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003euart\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nl\"\u003edefault_kscan\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ekscan\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecompatible\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;zmk,kscan-gpio-matrix\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;default_kscan\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ediode\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003edirection\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;col2row\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecol\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003egpios\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003egpio0\u003c/span\u003e \u003cspan class=\"mi\"\u003e31\u003c/span\u003e \u003cspan class=\"n\"\u003eGPIO_ACTIVE_HIGH\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003egpio0\u003c/span\u003e \u003cspan class=\"mi\"\u003e29\u003c/span\u003e \u003cspan class=\"n\"\u003eGPIO_ACTIVE_HIGH\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003egpio0\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e \u003cspan class=\"n\"\u003eGPIO_ACTIVE_HIGH\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003erow\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003egpios\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003egpio1\u003c/span\u003e \u003cspan class=\"mi\"\u003e15\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGPIO_ACTIVE_HIGH\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGPIO_PULL_DOWN\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003egpio1\u003c/span\u003e \u003cspan class=\"mi\"\u003e13\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGPIO_ACTIVE_HIGH\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGPIO_PULL_DOWN\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003egpio1\u003c/span\u003e \u003cspan class=\"mi\"\u003e11\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGPIO_ACTIVE_HIGH\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGPIO_PULL_DOWN\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nl\"\u003edefault_transform\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ematrix_transform\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecompatible\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;zmk,matrix-transform\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecolumns\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003erows\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emap\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003eRC\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nicekeyboards.com/docs/nice-nano/pinout-schematic/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePinout and Schematic - nice!nano\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePinout and schematic for the nice!nano\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003enicekeyboards.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nPinout for nice!nano boards.   Note that P0.15 means gpio port 0 pin 15, they can be referenced in zmk when setting column and row pins.\n\n\n``` c\n#include \u003cdt-bindings/zmk/matrix_transform.h\u003e\n\n/ {\n    chosen {\n        zmk,kscan = \u0026default_kscan;\n        zmk,matrix_transform = \u0026default_transform;\n        /delete-property/ zephyr,console;\n        /delete-property/ zephyr,shell-uart;\n    };\n\n    default_kscan: kscan {\n        compatible = \"zmk,kscan-gpio-matrix\";\n        label = \"default_kscan\";\n        diode-direction = \"col2row\";\n\n        col-gpios\n            = \u003c\u0026gpio0 31 GPIO_ACTIVE_HIGH\u003e\n            , \u003c\u0026gpio0 29 GPIO_ACTIVE_HIGH\u003e\n            , \u003c\u0026gpio0 2 GPIO_ACTIVE_HIGH\u003e\n            ;\n\n        row-gpios\n            = \u003c\u0026gpio1 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)\u003e\n            , \u003c\u0026gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)\u003e\n            , \u003c\u0026gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)\u003e\n            ;\n    };\n\n    default_transform: matrix_transform {\n        compatible = \"zmk,matrix-transform\";\n        columns = \u003c3\u003e;\n        rows = \u003c3\u003e;\n        map = \u003c\n            RC(0,0) RC(0,1) RC(0,2)\n            RC(1,0) RC(1,1) RC(1,2)\n            RC(2,0) RC(2,1) RC(2,2)\n        \u003e;\n    };\n};\n\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://nicekeyboards.com/docs/nice-nano/pinout-schematic/",
      "date_published": "2024-07-10T12:40:26Z",
      "date_modified": "2024-07-10T12:40:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/typecraft-dev-shmux/",
      "url": "https://go.waylonwalker.com/typecraft-dev-shmux/",
      "title": "⭐ typecraft-dev shmux",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/typecraft-dev/shmux\" 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\"\u003eshmux\u003c/a\u003e from \u003ca href=\"https://github.com/typecraft-dev\" 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\"\u003etypecraft-dev\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ethe shell-script tmux management you didn’t know you needed. baby\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [shmux](https://github.com/typecraft-dev/shmux) from [typecraft-dev](https://github.com/typecraft-dev).\n\nthe shell-script tmux management you didn't know you needed. baby\n",
      "summary": "I'm impressed by shmux from typecraft-dev.",
      "date_published": "2024-07-09T20:35:41Z",
      "date_modified": "2024-07-09T20:35:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/iximiuz-awesome-container-tinkering/",
      "url": "https://go.waylonwalker.com/iximiuz-awesome-container-tinkering/",
      "title": "⭐ iximiuz awesome-container-tinkering",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/iximiuz\" 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\"\u003eiximiuz’s\u003c/a\u003e project \u003ca href=\"https://github.com/iximiuz/awesome-container-tinkering\" 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\"\u003eawesome-container-tinkering\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eList of awesome tools to tinker with containers.\u003c/p\u003e\n",
      "content_text": "\nI like [iximiuz's](https://github.com/iximiuz) project [awesome-container-tinkering](https://github.com/iximiuz/awesome-container-tinkering).\n\nList of awesome tools to tinker with containers.\n",
      "summary": "I like iximiuz's project awesome-container-tinkering.",
      "date_published": "2024-07-09T00:59:29Z",
      "date_modified": "2024-07-09T00:59:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-339/",
      "url": "https://go.waylonwalker.com/thought-339/",
      "title": "💭 linux - What is stored in /dev/pts files and can we open them?...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://unix.stackexchange.com/questions/93531/what-is-stored-in-dev-pts-files-and-can-we-open-them\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/unix.stackexchange.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/unix.stackexchange.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eunix.stackexchange.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003etoday I learned that /dev/pts is a pseudo-tty.  It amazes me how much linux is still built around things like hardware terminals.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://unix.stackexchange.com/questions/93531/what-is-stored-in-dev-pts-files-and-can-we-open-them\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eunix.stackexchange.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ntoday I learned that /dev/pts is a pseudo-tty.  It amazes me how much linux is still built around things like hardware terminals.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://unix.stackexchange.com/questions/93531/what-is-stored-in-dev-pts-files-and-can-we-open-them",
      "date_published": "2024-07-07T01:08:38Z",
      "date_modified": "2024-07-07T01:08:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-338/",
      "url": "https://go.waylonwalker.com/thought-338/",
      "title": "💭 svenstaro/miniserve: 🌟 For when you really just want to serve ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/svenstaro/miniserve\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/131135585/9cf09f00-614a-11e9-8676-f2a20b52cd4b\" alt=\"GitHub - svenstaro/miniserve: 🌟 For when you really just want to serve some files over HTTP right now! — 🌟 For when you really just want to serve some files over HTTP right now! - svenstaro/miniserve\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - svenstaro/miniserve: 🌟 For when you really just want to serve some files over HTTP right now! — 🌟 For when you really just want to serve some files over HTTP right now! - svenstaro/miniserve\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - svenstaro/miniserve: 🌟 For when you really just want to serve some files over HTTP right now!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🌟 For when you really just want to serve some files over HTTP right now! - svenstaro/miniserve\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eminiserve is a sweet http server, replacement for \u003ccode\u003epython -m http.server\u003c/code\u003e.  It’s fast, runs off a small binary, but why would I want to use it over something that already exists on most machines, because it includes a bunch of features like qr codes, pretty themes, and uploads.  I’ve used \u003ccode\u003epython -m http.server\u003c/code\u003e many times to transfer files from one machine to another in a pinch, like at a family members house.  But what if they have an android, windows, or something not easy to get a python repl running on, you can run miniserve and upload from their device rather than hosting from their device.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/svenstaro/miniserve\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/131135585/9cf09f00-614a-11e9-8676-f2a20b52cd4b\" alt=\"GitHub - svenstaro/miniserve: 🌟 For when you really just want to serve some files over HTTP right now! — 🌟 For when you really just want to serve some files over HTTP right now! - svenstaro/miniserve\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - svenstaro/miniserve: 🌟 For when you really just want to serve some files over HTTP right now!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🌟 For when you really just want to serve some files over HTTP right now! - svenstaro/miniserve\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nminiserve is a sweet http server, replacement for `python -m http.server`.  It's fast, runs off a small binary, but why would I want to use it over something that already exists on most machines, because it includes a bunch of features like qr codes, pretty themes, and uploads.  I've used `python -m http.server` many times to transfer files from one machine to another in a pinch, like at a family members house.  But what if they have an android, windows, or something not easy to get a python repl running on, you can run miniserve and upload from their device rather than hosting from their device.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/svenstaro/miniserve",
      "date_published": "2024-07-06T21:55:59Z",
      "date_modified": "2024-07-06T21:55:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "http",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/svenstaro-miniserve/",
      "url": "https://go.waylonwalker.com/svenstaro-miniserve/",
      "title": "⭐ svenstaro miniserve",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/svenstaro/miniserve\" 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\"\u003eminiserve\u003c/a\u003e by \u003ca href=\"https://github.com/svenstaro\" 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\"\u003esvenstaro\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🌟 For when you really just want to serve some files over HTTP right now!\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [miniserve](https://github.com/svenstaro/miniserve) by [svenstaro](https://github.com/svenstaro).\n\n🌟 For when you really just want to serve some files over HTTP right now!\n",
      "summary": "Looking for inspiration? miniserve by svenstaro.",
      "date_published": "2024-07-06T21:47:02Z",
      "date_modified": "2024-07-06T21:47:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-337/",
      "url": "https://go.waylonwalker.com/thought-337/",
      "title": "💭 pacman/Tips and tricks - ArchWiki",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.archlinux.org/title/pacman/Tips_and_tricks\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/wiki.archlinux.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/wiki.archlinux.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epacman/Tips and tricks - ArchWiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe arch wiki is always full of good content, and pacman tips and tricks does not disappoint.  Today I discovered this command to remove orphaned dependencies on my system.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epacman -Qdtq \u003cspan class=\"p\"\u003e|\u003c/span\u003e pacman -Rns -\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.archlinux.org/title/pacman/Tips_and_tricks\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epacman/Tips and tricks - ArchWiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe arch wiki is always full of good content, and pacman tips and tricks does not disappoint.  Today I discovered this command to remove orphaned dependencies on my system.\n\n``` bash\npacman -Qdtq | pacman -Rns -\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://wiki.archlinux.org/title/pacman/Tips_tricks",
      "date_published": "2024-07-06T16:52:09Z",
      "date_modified": "2024-07-06T16:52:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "arch",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-336/",
      "url": "https://go.waylonwalker.com/thought-336/",
      "title": "💭 Inside 22,734 Steam games | daniel.haxx.se",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.haxx.se/blog/2024/06/20/inside-22734-steam-games/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://daniel.haxx.se/blog/wp-content/uploads/2016/09/GTA-end-credits-libcurl-1200x658.jpg\" alt=\"Inside 22,734 Steam games — About a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of amazing that over one hundred games decided to use curl! At the time, lots of … Continue reading Inside 22,734 Steam games →\" loading=\"lazy\"/ data-glightbox=\"description: Inside 22,734 Steam games — About a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of amazing that over one hundred games decided to use curl! At the time, lots of … Continue reading Inside 22,734 Steam games →\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eInside 22,734 Steam games\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAbout a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaniel.haxx.se · daniel.haxx.se\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting to see that curl is used in so many places.  I often think of things like games being so windows centric and curl being so linux centric I don’t even think of these things crossing paths as much as they do.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.haxx.se/blog/2024/06/20/inside-22734-steam-games/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://daniel.haxx.se/blog/wp-content/uploads/2016/09/GTA-end-credits-libcurl-1200x658.jpg\" alt=\"Inside 22,734 Steam games — About a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of amazing that over one hundred games decided to use curl! At the time, lots of … Continue reading Inside 22,734 Steam games →\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eInside 22,734 Steam games\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAbout a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaniel.haxx.se \u0026middot; daniel.haxx.se\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting to see that curl is used in so many places.  I often think of things like games being so windows centric and curl being so linux centric I don't even think of these things crossing paths as much as they do.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daniel.haxx.se/blog/2024/06/20/inside-22734-steam-games/",
      "date_published": "2024-07-06T16:48:21Z",
      "date_modified": "2024-07-06T16:48:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-335/",
      "url": "https://go.waylonwalker.com/thought-335/",
      "title": "💭 wcurl is here | daniel.haxx.se",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.haxx.se/blog/2024/07/03/wcurl-is-here/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://daniel.haxx.se/blog/wp-content/uploads/2019/04/tools-1209764_1280-1200x800.jpg\" alt=\"wcurl is here — Users tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of curl on the command line. It downloads the data from the URL without you needing to provide any … Continue reading wcurl is here →\" loading=\"lazy\"/ data-glightbox=\"description: wcurl is here — Users tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of curl on the command line. It downloads the data from the URL without you needing to provide any … Continue reading wcurl is here →\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewcurl is here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsers tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of cur...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaniel.haxx.se · daniel.haxx.se\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003einteresting, seems like such a simple way to completely remove the need of a whole other cli.  No offense to anyone working on wget, but generally I use it out of lazyness or something wierd is happening and I am looking for a second opinion.  Cool to know that wcurl exists and will start shipping with curl.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daniel.haxx.se/blog/2024/07/03/wcurl-is-here/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://daniel.haxx.se/blog/wp-content/uploads/2019/04/tools-1209764_1280-1200x800.jpg\" alt=\"wcurl is here — Users tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of curl on the command line. It downloads the data from the URL without you needing to provide any … Continue reading wcurl is here →\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewcurl is here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUsers tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of cur...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaniel.haxx.se \u0026middot; daniel.haxx.se\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ninteresting, seems like such a simple way to completely remove the need of a whole other cli.  No offense to anyone working on wget, but generally I use it out of lazyness or something wierd is happening and I am looking for a second opinion.  Cool to know that wcurl exists and will start shipping with curl.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daniel.haxx.se/blog/2024/07/03/wcurl-is-here/",
      "date_published": "2024-07-06T16:46:19Z",
      "date_modified": "2024-07-06T16:46:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/arch-remove-orphaned-packages/",
      "url": "https://go.waylonwalker.com/arch-remove-orphaned-packages/",
      "title": "arch remove orphaned packages",
      "content_text": "\n",
      "date_published": "2024-07-06T11:34:31Z",
      "date_modified": "2024-07-06T11:34:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kubebernetes-kustomize-diff/",
      "url": "https://go.waylonwalker.com/kubebernetes-kustomize-diff/",
      "title": "k8s kustomize diff",
      "content_html": "\u003cp\u003eI’ve started leaning in on kubernetes kustomize to customize my manifests per\ndeployment per environment.  Today I learned that it comes with a diff command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -k k8s/overlays/local\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can enable color diffs by using an external diff provider like colordiff.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eKUBECTL_EXTERNAL_DIFF\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;colordiff -N -u\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou might need to install colordiff if you don’t already have it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S colordiff\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install colordiff\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow I can try out kustomize changes and see the change with kustomize diff.\u003c/p\u003e\n",
      "content_text": "\nI've started leaning in on kubernetes kustomize to customize my manifests per\ndeployment per environment.  Today I learned that it comes with a diff command.\n\n``` bash\nkubectl diff -k k8s/overlays/local\n```\n\nYou can enable color diffs by using an external diff provider like colordiff.\n\n``` bash\nexport KUBECTL_EXTERNAL_DIFF=\"colordiff -N -u\"\n```\n\nYou might need to install colordiff if you don't already have it.\n\n``` bash\nsudo pacman -S colordiff\n\nsudo apt install colordiff\n```\n\nNow I can try out kustomize changes and see the change with kustomize diff.\n",
      "summary": "I've started leaning in on kubernetes kustomize to customize my manifests per deployment per environment. Today I learned that it comes with a diff command.",
      "date_published": "2024-07-06T09:42:42Z",
      "date_modified": "2024-07-06T09:42:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/animal-well-keyboard/",
      "url": "https://go.waylonwalker.com/animal-well-keyboard/",
      "title": "animal well keyboard",
      "content_html": "\u003cp\u003eAnimal well does not let you remap keys, and really doesn’t even inform you\nthat it is keyboard compatible.  I had to play around and discover the keymap,\nwhich can be a bit tricky on a 40% board.  This is what I found.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ewasd - move\u003c/li\u003e\n\u003cli\u003espace - jump / a\u003c/li\u003e\n\u003cli\u003eenter - interact / b\u003c/li\u003e\n\u003cli\u003ex - throw\u003c/li\u003e\n\u003cli\u003ec - inventory\u003c/li\u003e\n\u003cli\u003e1 - left item / rb\u003c/li\u003e\n\u003cli\u003e2 - open item menu / triangle\u003c/li\u003e\n\u003cli\u003e3 - right item / lb\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nAnimal well does not let you remap keys, and really doesn't even inform you\nthat it is keyboard compatible.  I had to play around and discover the keymap,\nwhich can be a bit tricky on a 40% board.  This is what I found.\n\n* wasd - move\n* space - jump / a\n* enter - interact / b\n* x - throw\n* c - inventory\n* 1 - left item / rb\n* 2 - open item menu / triangle\n* 3 - right item / lb\n",
      "summary": "Animal well does not let you remap keys, and really doesn't even inform you that it is keyboard compatible. I had to play around and discover the keymap,...",
      "date_published": "2024-07-04T21:58:41Z",
      "date_modified": "2024-07-04T21:58:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "animal-well",
        "game"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/phil997-pydantic-sqlite/",
      "url": "https://go.waylonwalker.com/phil997-pydantic-sqlite/",
      "title": "⭐ Phil997 pydantic-sqlite",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/Phil997/pydantic-sqlite\" 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\"\u003epydantic-sqlite\u003c/a\u003e by \u003ca href=\"https://github.com/Phil997\" 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\"\u003ePhil997\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eSimple package for storing pydantic BaseModels in an in-memory SQLite database.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [pydantic-sqlite](https://github.com/Phil997/pydantic-sqlite) by [Phil997](https://github.com/Phil997), and it's truly impressive.\n\nSimple package for storing pydantic BaseModels in an in-memory SQLite database.\n",
      "summary": "I recently discovered pydantic-sqlite by Phil997, and it's truly impressive.",
      "date_published": "2024-07-04T21:57:43Z",
      "date_modified": "2024-07-04T21:57:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-334/",
      "url": "https://go.waylonwalker.com/thought-334/",
      "title": "💭 Email Address Obfuscation · Cloudflare Web Application Firewal...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developers.cloudflare.com/waf/tools/scrape-shield/email-address-obfuscation/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developers.cloudflare.com/core-services-preview.png\" alt=\"Email Address Obfuscation — Hide email addresses from bots while keeping them visible to visitors.\" loading=\"lazy\"/ data-glightbox=\"description: Email Address Obfuscation — Hide email addresses from bots while keeping them visible to visitors.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eEmail Address Obfuscation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHide email addresses from bots while keeping them visible to visitors.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCloudflare Docs · developers.cloudflare.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI recently started seeing email-decode.min.js show up on my blog posts, and I wondered what the heck ?  I didn’t put it there.  Turns out that cloudflare put it there from pages to safely serve email addresses for me.\u003c/p\u003e\n\u003cp\u003einspecting the page without js running we can see that the mailto email is swapped out for \u003cem\u003eemail protected\u003c/em\u003e.  Neat feature.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ curl --silent https://waylonwalker.com/diskcache-as-debounce/ \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep email\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;a \u003cspan class=\"nv\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;decoration-pink-500 hover:decoration-pink-300 hover:text-pink-100\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/cdn-cgi/l/email-protection#a4ccc1c8c8cbe4d3c5ddc8cbcad3c5c8cfc1d68ac7cbc9\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;me\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;span \u003cspan class=\"nv\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;__cf_email__\u0026#34;\u003c/span\u003e data-cfemail\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;630b060f0f0c2314021a0f0c0d14020f0806114d000c0e\u0026#34;\u003c/span\u003e\u0026gt;\u003cspan class=\"o\"\u003e[\u003c/span\u003eemail\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"c1\"\u003e#160;protected]\u0026lt;/span\u0026gt;\u0026lt;/a\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;script data-cfasync\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;false\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;/script\u0026gt;\u0026lt;/body\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eLooking deeper into this article it looks like this feature comes from Scrape Shield and enabling Email Address Obfuscation.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developers.cloudflare.com/waf/tools/scrape-shield/email-address-obfuscation/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developers.cloudflare.com/core-services-preview.png\" alt=\"Email Address Obfuscation — Hide email addresses from bots while keeping them visible to visitors.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eEmail Address Obfuscation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHide email addresses from bots while keeping them visible to visitors.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCloudflare Docs \u0026middot; developers.cloudflare.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI recently started seeing email-decode.min.js show up on my blog posts, and I wondered what the heck ?  I didn't put it there.  Turns out that cloudflare put it there from pages to safely serve email addresses for me.\n\ninspecting the page without js running we can see that the mailto email is swapped out for _email protected_.  Neat feature.\n\n``` bash\n❯ curl --silent https://waylonwalker.com/diskcache-as-debounce/ | grep email\n\u003ca class=\"decoration-pink-500 hover:decoration-pink-300 hover:text-pink-100\" href=\"/cdn-cgi/l/email-protection#a4ccc1c8c8cbe4d3c5ddc8cbcad3c5c8cfc1d68ac7cbc9\" rel=\"me\"\u003e\u003cspan class=\"__cf_email__\" data-cfemail=\"630b060f0f0c2314021a0f0c0d14020f0806114d000c0e\"\u003e[email\u0026#160;protected]\u003c/span\u003e\u003c/a\u003e\n\u003cscript data-cfasync=\"false\" src=\"/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js\"\u003e\u003c/script\u003e\u003c/body\u003e\n```\n\nLooking deeper into this article it looks like this feature comes from Scrape Shield and enabling Email Address Obfuscation.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developers.cloudflare.com/waf/tools/scrape-shield/email-address-obfuscation/",
      "date_published": "2024-07-04T15:18:11Z",
      "date_modified": "2024-07-04T15:18:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-333/",
      "url": "https://go.waylonwalker.com/thought-333/",
      "title": "💭 Background Tasks - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/background-tasks/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/background-tasks.png\" alt=\"Background Tasks - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Background Tasks - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackground Tasks - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\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 comes with a concept of background tasks which are functions that can be ran in the background after a function has been ran.  This is handy for longer running functions that may take some time and you want to have fast response times.\u003c/p\u003e\n\u003cp\u003eHere is an example from the docs\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBackgroundTasks\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ewrite_notification\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"nb\"\u003eopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;log.txt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;w\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003eemail_file\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econtent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;notification for \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eemail_file\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewrite\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/send-notification/\u003c/span\u003e\u003cspan class=\"si\"\u003e{email}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esend_notification\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebackground_tasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eBackgroundTasks\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ebackground_tasks\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_task\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewrite_notification\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;some notification\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Notification sent in the background\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/background-tasks/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/background-tasks.png\" alt=\"Background Tasks - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBackground Tasks - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nfastapi comes with a concept of background tasks which are functions that can be ran in the background after a function has been ran.  This is handy for longer running functions that may take some time and you want to have fast response times.\n\nHere is an example from the docs\n\n``` python\nfrom fastapi import BackgroundTasks, FastAPI\n\napp = FastAPI()\n\n\ndef write_notification(email: str, message=\"\"):\n    with open(\"log.txt\", mode=\"w\") as email_file:\n        content = f\"notification for {email}: {message}\"\n        email_file.write(content)\n\n\n@app.post(\"/send-notification/{email}\")\nasync def send_notification(email: str, background_tasks: BackgroundTasks):\n    background_tasks.add_task(write_notification, email, message=\"some notification\")\n    return {\"message\": \"Notification sent in the background\"}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/background-tasks/",
      "date_published": "2024-07-03T16:17:45Z",
      "date_modified": "2024-07-03T16:17:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-332/",
      "url": "https://go.waylonwalker.com/thought-332/",
      "title": "💭 markdown-it-pyrs · PyPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/markdown-it-pyrs/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"markdown-it-pyrs — A Python interface for markdown-it.rs, using Rust for blazingly fast Markdown parsing ⚡️\" loading=\"lazy\"/ data-glightbox=\"description: markdown-it-pyrs — A Python interface for markdown-it.rs, using Rust for blazingly fast Markdown parsing ⚡️\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003emarkdown-it-pyrs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA Python interface for markdown-it.rs, using Rust for blazingly fast Markdown parsing ⚡️\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI · pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003emarkdown it py running in rust claims to be 20x faster.  I’ll definitely look into this if markdown it py is ever a bottleneck in my performance.  At first glance it appears that plugins are written in rust not python, and there is no admonition plugin, so I’ll keep my eye on it for now, but I can’t use it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/markdown-it-pyrs/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"markdown-it-pyrs — A Python interface for markdown-it.rs, using Rust for blazingly fast Markdown parsing ⚡️\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003emarkdown-it-pyrs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA Python interface for markdown-it.rs, using Rust for blazingly fast Markdown parsing ⚡️\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI \u0026middot; pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nmarkdown it py running in rust claims to be 20x faster.  I'll definitely look into this if markdown it py is ever a bottleneck in my performance.  At first glance it appears that plugins are written in rust not python, and there is no admonition plugin, so I'll keep my eye on it for now, but I can't use it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/markdown-it-pyrs/",
      "date_published": "2024-07-03T13:56:30Z",
      "date_modified": "2024-07-03T13:56:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-331/",
      "url": "https://go.waylonwalker.com/thought-331/",
      "title": "💭 DiskCache API Reference — DiskCache 5.6.1 documentation",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem\" alt=\"https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem\"/ data-glightbox=\"description: https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003ediskcache has a peekitem method that allows you to lookup the expire_time of a cached item without changing it.  I recently used this to implement debounce for \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 background tasks with multiple workers running.  since all the workers I care about are on the same machine, but running in different processes diskcache was a great option.  All workers have access to the same disk, but not the same variables in memory.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem](/static/https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem)\n\ndiskcache has a peekitem method that allows you to lookup the expire_time of a cached item without changing it.  I recently used this to implement debounce for fastapi background tasks with multiple workers running.  since all the workers I care about are on the same machine, but running in different processes diskcache was a great option.  All workers have access to the same disk, but not the same variables in memory.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.peekitem",
      "date_published": "2024-07-03T13:35:12Z",
      "date_modified": "2024-07-03T13:35:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-330/",
      "url": "https://go.waylonwalker.com/thought-330/",
      "title": "💭 Kustomize: The Best Way to Manage Your Kubernetes Configs - Yo...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"spCdNeNCuFU\" title=\"Kustomize: The Best Way to Manage Your Kubernetes Configs\" playlabel=\"Play: Kustomize: The Best Way to Manage Your Kubernetes Configs\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat intro into kustomize.  This helped me get started with kustomize.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"spCdNeNCuFU\" title=\"Kustomize: The Best Way to Manage Your Kubernetes Configs\" playlabel=\"Play: Kustomize: The Best Way to Manage Your Kubernetes Configs\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat intro into kustomize.  This helped me get started with kustomize.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=spCdNeNCuFU\u0026t=247s",
      "date_published": "2024-07-03T13:31:47Z",
      "date_modified": "2024-07-03T13:31:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/diskcache-as-debounce/",
      "url": "https://go.waylonwalker.com/diskcache-as-debounce/",
      "title": "diskcache as debounce",
      "content_html": "\u003cp\u003eI’ve been using \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 more and more lately and one feature I just started\nusing is background tasks [[ thoughts-333 ]].\u003c/p\u003e\n\u003cdiv class=\"admonition seealso\"\u003e\n\u003cp class=\"admonition-title\"\u003eSeealso\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ebasic diskcache example \u0026lt;a href=\u0026#34;/python-diskcache/\u0026#34; class=\u0026#34;wikilink\u0026#34; data-title=\u0026#34;How I setup a sqlite cache in python\u0026#34; data-description=\u0026#34;When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It\u0026amp;#39;s built on sqlite with just enough...\u0026#34; data-date=\u0026#34;2022-03-29\u0026#34;\u0026gt;How I setup a sqlite cache in python\u0026lt;/a\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 id=\"one-background-task-per-db-entry\"\u003eOne Background Task per db entry \u003ca href=\"#one-background-task-per-db-entry\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI am using it for longer running tasks and I don’t want to give users the\nability to spam these long running tasks with many duplicates running at the\nsame time. And each fastapi worker will be running in a different process so I\ncannot keep track of work in memory, I have to do it in a distributed fashion.\nSince they are all running on the same machine with access to the same disk,\ndiskcache is a good choice\u003c/p\u003e\n\u003ch2 id=\"what-i-need\"\u003eWhat I need \u003ca href=\"#what-i-need\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echeck if a job is running\u003c/li\u003e\n\u003cli\u003eautomatically expire jobs\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"less-infrastructure-complexity\"\u003eLess infrastructure complexity \u003ca href=\"#less-infrastructure-complexity\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMy brain first went to thinking I needed another service like redis running\nalongside fastapi for this, then it hit me that I can use diskcache.\u003c/p\u003e\n\u003ch2 id=\"how-i-used-diskcache\"\u003eHow I used diskcache \u003ca href=\"#how-i-used-diskcache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is how I used diskcache to debounce taking screenshots for a unique shot\nevery 60 seconds.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ediskcache\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eCache\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ejobs_cache\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eCache\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;jobs-cache\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@shots_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/shot/\u003c/span\u003e\u003cspan class=\"si\"\u003e{shot_id}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eresponses\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"mi\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;image/webp\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{}}}})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@shots_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/shot/\u003c/span\u003e\u003cspan class=\"si\"\u003e{shot_id}\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eresponses\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"mi\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;image/webp\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{}}}})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_shot_by_id\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ebackground_tasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eBackgroundTasks\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eshot\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eShot\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# check if the shot exists and return it or continue to create it.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eis_running\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ejobs_cache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eis_running\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eexpire_time\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efromtimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejobs_cache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epeekitem\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eexpire_time\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003enow\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[red]Already running store_shot: \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[red]Can retry in \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eexpire_time\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eseconds\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003es\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ejobs_cache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e60\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ebackground_tasks\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_task\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estore_shot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eshot_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been using fastapi more and more lately and one feature I just started\nusing is background tasks [[ thoughts-333 ]].\n\n!!! seealso\n    basic diskcache example \u003ca href=\"/python-diskcache/\" class=\"wikilink\" data-title=\"How I setup a sqlite cache in python\" data-description=\"When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It\u0026#39;s built on sqlite with just enough...\" data-date=\"2022-03-29\"\u003eHow I setup a sqlite cache in python\u003c/a\u003e\n\n## One Background Task per db entry\n\nI am using it for longer running tasks and I don't want to give users the\nability to spam these long running tasks with many duplicates running at the\nsame time. And each fastapi worker will be running in a different process so I\ncannot keep track of work in memory, I have to do it in a distributed fashion.\nSince they are all running on the same machine with access to the same disk,\ndiskcache is a good choice\n\n## What I need\n\n* check if a job is running\n* automatically expire jobs\n\n## Less infrastructure complexity\n\nMy brain first went to thinking I needed another service like redis running\nalongside fastapi for this, then it hit me that I can use diskcache.\n\n## How I used diskcache\n\nHere is how I used diskcache to debounce taking screenshots for a unique shot\nevery 60 seconds.\n\n``` python\nfrom diskcache import Cache\n\njobs_cache = Cache(\"jobs-cache\")\n\n@shots_router.get(\"/shot/{shot_id}\", responses={200: {\"content\": {\"image/webp\": {}}}})\n@shots_router.get(\"/shot/{shot_id}/\", responses={200: {\"content\": {\"image/webp\": {}}}})\nasync def get_shot_by_id(\n    background_tasks: BackgroundTasks,\n    request: Request,\n    shot_id: int,\n):\n    shot = Shot.get(shot_id)\n    # check if the shot exists and return it or continue to create it.\n\n\n\n    is_running = jobs_cache.get(shot_id)\n\n    if is_running:\n        expire_time = datetime.fromtimestamp(jobs_cache.peekitem(expire_time=True)[1]) - datetime.now()\n        console.print(\"[red]Already running store_shot: \", shot_id)\n        console.print(f\"[red]Can retry in {expire_time.seconds}s\")\n    else:\n        jobs_cache.set(shot_id, True, 60)\n        background_tasks.add_task(\n            store_shot,\n            shot_id=shot_id,\n        )\n```\n",
      "summary": "I've been using fastapi more and more lately and one feature I just started using is background tasks thoughts-333.",
      "date_published": "2024-07-03T11:14:11Z",
      "date_modified": "2024-07-03T11:14:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/doomlab7-homelab-diagrams/",
      "url": "https://go.waylonwalker.com/doomlab7-homelab-diagrams/",
      "title": "⭐ Doomlab7 homelab-diagrams",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/Doomlab7/homelab-diagrams\" 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\"\u003ehomelab-diagrams\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/Doomlab7\" 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\"\u003eDoomlab7\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA repository to house diagrams for my \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\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [homelab-diagrams](https://github.com/Doomlab7/homelab-diagrams), an amazing project by [Doomlab7](https://github.com/Doomlab7). It's worth exploring!\n\nA repository to house diagrams for my homelab\n",
      "summary": "I'm really excited about homelab-diagrams, an amazing project by Doomlab7. It's worth exploring!",
      "date_published": "2024-07-02T13:17:32Z",
      "date_modified": "2024-07-02T13:17:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-learn-pdm/",
      "url": "https://go.waylonwalker.com/pypeaday-learn-pdm/",
      "title": "⭐ pypeaday learn-pdm",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pypeaday/learn-pdm\" 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\"\u003elearn-pdm\u003c/a\u003e by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA repository for learning and playing with the pdm package manager/system for python\u003c/p\u003e\n",
      "content_text": "\n[learn-pdm](https://github.com/pypeaday/learn-pdm) by [pypeaday](https://github.com/pypeaday) is a game-changer in its space. Excited to see how it evolves.\n\nA repository for learning and playing with the pdm package manager/system for python\n",
      "summary": "learn-pdm by pypeaday is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-07-02T13:17:29Z",
      "date_modified": "2024-07-02T13:17:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wyattbubbylee-zmk-config-fourpad/",
      "url": "https://go.waylonwalker.com/wyattbubbylee-zmk-config-fourpad/",
      "title": "⭐ wyattbubbylee zmk-config-fourpad",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/wyattbubbylee/zmk-config-fourpad\" 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\"\u003ezmk-config-fourpad\u003c/a\u003e, created by \u003ca href=\"https://github.com/wyattbubbylee\" 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\"\u003ewyattbubbylee\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003emy fourpad keybord\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [zmk-config-fourpad](https://github.com/wyattbubbylee/zmk-config-fourpad), created by [wyattbubbylee](https://github.com/wyattbubbylee).\n\nmy fourpad keybord\n",
      "summary": "If you're into interesting projects, don't miss out on zmk-config-fourpad, created by wyattbubbylee.",
      "date_published": "2024-07-02T13:17:21Z",
      "date_modified": "2024-07-02T13:17:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/install-sealed-secreats-via-manifest/",
      "url": "https://go.waylonwalker.com/install-sealed-secreats-via-manifest/",
      "title": "Install sealed-secreats via manifest",
      "content_html": "\u003cp\u003eYesterday I realized that I have overlooked the default installation method of\nthe sealed secrets controller for \u003ca href=\"/kubernetes-kubeseal/\" class=\"wikilink\" data-title=\"kubernetes kubeseal\" data-description=\"In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...\" data-date=\"2024-03-27\" data-preview=\"In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...\"\u003ekubernetes kubeseal\u003c/a\u003e this whole time an\njumped straight to the helm section.  I spun up a quick \u003ca href=\"/kind-cluster/\" class=\"wikilink\" data-title=\"kind cluster\" data-description=\"kind is a very useful tool to quickly standup and teardown kubernetes clusters. I use it to run clusters locally. Generally they are short lived clusters for...\" data-date=\"2024-07-02\" data-preview=\"kind is a very useful tool to quickly standup and teardown kubernetes clusters. I use it to run clusters locally. Generally they are short lived clusters for...\"\u003ekind cluster\u003c/a\u003e and\nhad it up quickly.  I can’t say this is any better or worse than helm as I have\nnever needed to customize the install.  According to the docs you can customize\nit with [[ kustomize ]] or helm.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# option if you don\u0026#39;t have a cluster try with kind\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekind create cluster\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -L https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml \u0026gt; controller.yaml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl apply -f controller.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nYesterday I realized that I have overlooked the default installation method of\nthe sealed secrets controller for \u003ca href=\"/kubernetes-kubeseal/\" class=\"wikilink\" data-title=\"kubernetes kubeseal\" data-description=\"In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...\" data-date=\"2024-03-27\"\u003ekubernetes kubeseal\u003c/a\u003e this whole time an\njumped straight to the helm section.  I spun up a quick \u003ca href=\"/kind-cluster/\" class=\"wikilink\" data-title=\"kind cluster\" data-description=\"kind is a very useful tool to quickly standup and teardown kubernetes clusters. I use it to run clusters locally. Generally they are short lived clusters for...\" data-date=\"2024-07-02\"\u003ekind cluster\u003c/a\u003e and\nhad it up quickly.  I can't say this is any better or worse than helm as I have\nnever needed to customize the install.  According to the docs you can customize\nit with [[ kustomize ]] or helm.\n\n``` bash\n# option if you don't have a cluster try with kind\n\nkind create cluster\n\ncurl -L https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml \u003e controller.yaml\n\nkubectl apply -f controller.yaml\n```\n",
      "summary": "Yesterday I realized that I have overlooked the default installation method of the sealed secrets controller for kubernetes-kubeseal this whole time an...",
      "date_published": "2024-07-02T07:54:01Z",
      "date_modified": "2024-07-02T07:54:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rothgar-bashscheduler/",
      "url": "https://go.waylonwalker.com/rothgar-bashscheduler/",
      "title": "⭐ rothgar bashScheduler",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/rothgar\" 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\"\u003erothgar’s\u003c/a\u003e project \u003ca href=\"https://github.com/rothgar/bashScheduler\" 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\"\u003ebashScheduler\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eKubernetes scheduler written in less than 100 lines of bash 😬 😆\u003c/p\u003e\n",
      "content_text": "\nI like [rothgar's](https://github.com/rothgar) project [bashScheduler](https://github.com/rothgar/bashScheduler).\n\nKubernetes scheduler written in less than 100 lines of bash :grimacing: :laughing:\n",
      "summary": "I like rothgar's project bashScheduler.",
      "date_published": "2024-07-01T16:06:43Z",
      "date_modified": "2024-07-01T16:06:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-329/",
      "url": "https://go.waylonwalker.com/thought-329/",
      "title": "💭 Alternatives · joric/nrfmicro Wiki",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/joric/nrfmicro/wiki/Alternatives\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/172212364/25ae5300-bf28-11ea-9777-6692355edc9e\" alt=\"Alternatives — A Pro Micro alternative for wireless keyboards. Contribute to joric/nrfmicro development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: Alternatives — A Pro Micro alternative for wireless keyboards. Contribute to joric/nrfmicro development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAlternatives\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA Pro Micro alternative for wireless keyboards. Contribute to joric/nrfmicro development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHuge list of micro controllers tried and used in keeb builds.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/joric/nrfmicro/wiki/Alternatives\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/172212364/25ae5300-bf28-11ea-9777-6692355edc9e\" alt=\"Alternatives — A Pro Micro alternative for wireless keyboards. Contribute to joric/nrfmicro development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAlternatives\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA Pro Micro alternative for wireless keyboards. Contribute to joric/nrfmicro development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHuge list of micro controllers tried and used in keeb builds.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/joric/nrfmicro/wiki/Alternatives",
      "date_published": "2024-07-01T14:48:16Z",
      "date_modified": "2024-07-01T14:48:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keeb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joric-nrfmicro/",
      "url": "https://go.waylonwalker.com/joric-nrfmicro/",
      "title": "⭐ joric nrfmicro",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/joric/nrfmicro\" 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\"\u003enrfmicro\u003c/a\u003e from \u003ca href=\"https://github.com/joric\" 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\"\u003ejoric\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Pro Micro alternative for wireless keyboards\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [nrfmicro](https://github.com/joric/nrfmicro) from [joric](https://github.com/joric).\n\nA Pro Micro alternative for wireless keyboards\n",
      "summary": "I'm impressed by nrfmicro from joric.",
      "date_published": "2024-07-01T14:44:42Z",
      "date_modified": "2024-07-01T14:44:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-328/",
      "url": "https://go.waylonwalker.com/thought-328/",
      "title": "💭 Waylon Walker - handwired macropads on X: \"First bit of hand w...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/_WaylonWalker/status/1807594004453667134\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNot gonna lie, kinda pumped about this one.  I manually did one, jotted down the coordinates, opened the gcode in vim, added markers between setup/teardown and print. then added the wipe, the copy pasted the print+wipe section a bunch of times.\u003c/p\u003e\n\u003cp\u003eMy printer tends to run a bit better on single prints than printing a dozen at once as it has less issues with retract start and stop.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/_WaylonWalker/status/1807594004453667134\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNot gonna lie, kinda pumped about this one.  I manually did one, jotted down the coordinates, opened the gcode in vim, added markers between setup/teardown and print. then added the wipe, the copy pasted the print+wipe section a bunch of times.\n\nMy printer tends to run a bit better on single prints than printing a dozen at once as it has less issues with retract start and stop.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/_WaylonWalker/status/1807594004453667134",
      "date_published": "2024-07-01T02:02:31Z",
      "date_modified": "2024-07-01T02:02:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d",
        "printing",
        "gcode",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-327/",
      "url": "https://go.waylonwalker.com/thought-327/",
      "title": "💭 Find And Replace one eyed kirby",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"v2a6Nv7RSd0\" title=\"Find And Replace\" playlabel=\"Play: Find And Replace\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eanother great use and demo of the one eyed fighting kirby\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"v2a6Nv7RSd0\" title=\"Find And Replace\" playlabel=\"Play: Find And Replace\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nanother great use and demo of the one eyed fighting kirby\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/v2a6Nv7RSd0",
      "date_published": "2024-06-30T17:30:38Z",
      "date_modified": "2024-06-30T17:30:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "regex",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-326/",
      "url": "https://go.waylonwalker.com/thought-326/",
      "title": "💭 PolyFill Vulnerability is WILD - YouTube",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026amp;t=555\u0026amp;v=mmlHQyMOK7Y\u0026amp;feature=youtu.be\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026amp;t=555\u0026amp;v=mmlHQyMOK7Y\u0026amp;feature=youtu.be\" alt=\"https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026amp;t=555\u0026amp;v=mmlHQyMOK7Y\u0026amp;feature=youtu.be\"/ data-glightbox=\"description: https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026amp;t=555\u0026amp;v=mmlHQyMOK7Y\u0026amp;feature=youtu.be\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eDamn, supply chain vector attacks are wild. Random guy in Primes stream was getting $40k offers to buy their open source project while in university and they have never made anything from it.  What a social engineering attack this is.  It would be so easy to make it look like a good deal and that the package was going to a good new owner who has real resources to maintain it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026amp;t=555\u0026amp;v=mmlHQyMOK7Y\u0026amp;feature=youtu.be](/static/https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026amp;t=555\u0026amp;v=mmlHQyMOK7Y\u0026amp;feature=youtu.be)\n\nDamn, supply chain vector attacks are wild. Random guy in Primes stream was getting $40k offers to buy their open source project while in university and they have never made anything from it.  What a social engineering attack this is.  It would be so easy to make it look like a good deal and that the package was going to a good new owner who has real resources to maintain it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?si=6NK4iCu1b1rCDo7a\u0026t=555\u0026v=mmlHQyMOK7Y\u0026feature=youtu.be",
      "date_published": "2024-06-28T19:48:03Z",
      "date_modified": "2024-06-28T19:48:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infra",
        "dev",
        "open source",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-325/",
      "url": "https://go.waylonwalker.com/thought-325/",
      "title": "💭 Found: OverlayKey X – Thomas Baart's Microblog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://micro.thomasbaart.nl/2024/06/12/overlaykey-x/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://micro.thomasbaart.nl/wp-content/uploads/2024/06/D2209563-F35F-4C72-8134-94BE6D247251-1024x771.jpeg\" alt=\"Found: OverlayKey X — Designed by @yfuku_, a keyboard to place on top of your laptop.\" loading=\"lazy\"/ data-glightbox=\"description: Found: OverlayKey X — Designed by @yfuku_, a keyboard to place on top of your laptop.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFound: OverlayKey X\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDesigned by @yfuku_, a keyboard to place on top of your laptop.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eThomas Baart\u0026#39;s Microblog · micro.thomasbaart.nl\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is almost exactly what I have been thinking about building for quite awhile.  I am going to give it a good try with a few $$ in filiment some cheap switches a microcontroller and go pretty bare bones, maybe open wiring on the bottom.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://micro.thomasbaart.nl/2024/06/12/overlaykey-x/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://micro.thomasbaart.nl/wp-content/uploads/2024/06/D2209563-F35F-4C72-8134-94BE6D247251-1024x771.jpeg\" alt=\"Found: OverlayKey X — Designed by @yfuku_, a keyboard to place on top of your laptop.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFound: OverlayKey X\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDesigned by @yfuku_, a keyboard to place on top of your laptop.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eThomas Baart\u0026#39;s Microblog \u0026middot; micro.thomasbaart.nl\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is almost exactly what I have been thinking about building for quite awhile.  I am going to give it a good try with a few $$ in filiment some cheap switches a microcontroller and go pretty bare bones, maybe open wiring on the bottom.\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://micro.thomasbaart.nl/2024/06/12/overlaykey-x/",
      "date_published": "2024-06-28T18:35:52Z",
      "date_modified": "2024-06-28T18:35:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keeb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-324/",
      "url": "https://go.waylonwalker.com/thought-324/",
      "title": "💭 Queueing – An interactive study of queueing strategies – Encor...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://encore.dev/blog/queueing\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://encore.dev/assets/blog/card/queueing_cover.png\" alt=\"Queueing – An interactive study of queueing strategies – Encore Blog — In this blog, we go on an interactive journey to understand common queueing strategies for handling HTTP requests.\" loading=\"lazy\"/ data-glightbox=\"description: Queueing – An interactive study of queueing strategies – Encore Blog — In this blog, we go on an interactive journey to understand common queueing strategies for handling HTTP requests.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQueueing – An interactive study of queueing strategies – Encore Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn this blog, we go on an interactive journey to understand common queueing strategies for handling HTTP requests.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eEncore — Open Source Backend Framework for robust distributed systems · encore.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAbsolutely sick post.   This is top tier animated blog posts.  This posts demos how different queuing systems work with fantastic interactive demos.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://encore.dev/blog/queueing\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://encore.dev/assets/blog/card/queueing_cover.png\" alt=\"Queueing – An interactive study of queueing strategies – Encore Blog — In this blog, we go on an interactive journey to understand common queueing strategies for handling HTTP requests.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQueueing – An interactive study of queueing strategies – Encore Blog\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIn this blog, we go on an interactive journey to understand common queueing strategies for handling HTTP requests.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eEncore — Open Source Backend Framework for robust distributed systems \u0026middot; encore.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAbsolutely sick post.   This is top tier animated blog posts.  This posts demos how different queuing systems work with fantastic interactive demos.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://encore.dev/blog/queueing",
      "date_published": "2024-06-28T16:19:37Z",
      "date_modified": "2024-06-28T16:19:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infra",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-323/",
      "url": "https://go.waylonwalker.com/thought-323/",
      "title": "💭 One Script Tag Just Pwn'd Over 100,000 Websites - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ILvNG1STUZU\" title=\"One Script Tag Just Pwn\u0026#39;d Over 100,000 Websites\" playlabel=\"Play: One Script Tag Just Pwn\u0026#39;d Over 100,000 Websites\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eSupply chain attacks are so big these days engineers definitely need to take these into consideration.  It’s wild that such a simple attack vector hit some really big applications.  This particular vector is so easy to avoid. You are already hosting web content, just curl the file and \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 host\u003c/a\u003e the script, then you own it.  That eliminates this attack vector all together, but doesn’t completely remove supply chain attacks, the js file can still hit external apis internally.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhat I see has happened in this case is that the owner of the domain polyfill.io changed. so anyone who directly linked to them got a malware injected script used.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can only imagine the number of applicatons that are not even being maintained anymore getting hit by this.  TLDR, if you are taking something to production, where you are goind to deploy it and let it run, host the js yourself.  these cdns are great for prototyping, but tread with caution.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ILvNG1STUZU\" title=\"One Script Tag Just Pwn\u0026#39;d Over 100,000 Websites\" playlabel=\"Play: One Script Tag Just Pwn\u0026#39;d Over 100,000 Websites\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nSupply chain attacks are so big these days engineers definitely need to take these into consideration.  It's wild that such a simple attack vector hit some really big applications.  This particular vector is so easy to avoid. You are already hosting web content, just curl the file and self host the script, then you own it.  That eliminates this attack vector all together, but doesn't completely remove supply chain attacks, the js file can still hit external apis internally.\n\n\u003e What I see has happened in this case is that the owner of the domain polyfill.io changed. so anyone who directly linked to them got a malware injected script used.  \n\nI can only imagine the number of applicatons that are not even being maintained anymore getting hit by this.  TLDR, if you are taking something to production, where you are goind to deploy it and let it run, host the js yourself.  these cdns are great for prototyping, but tread with caution.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ILvNG1STUZU\u0026t=286s",
      "date_published": "2024-06-28T16:08:20Z",
      "date_modified": "2024-06-28T16:08:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-322/",
      "url": "https://go.waylonwalker.com/thought-322/",
      "title": "💭 Don't Cheat Yourself - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.youtube.com/shorts/NMQuGlQ0XHQ\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" 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\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e- YouTube\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEnjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eyoutube.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWell spoken prime. Co-pilot is a fantastic tool for templating, boilerplate, or just getting something done that is just outside your knowledge or care to know.  Bit if you really want to learn something, you need to use your hands.  Reading the solution only gives you the happy path.  This does not give you that path that most people would take, and completely misses debugging.  If you are very new and learning it’s unlikely that you can write large blocks of code without running a test or a script to try it.  Taking these shortcuts will hinder your ability to do it yourself.\u003c/p\u003e\n\u003cp\u003eIf I were to devils advocate here, copilot is still not the greatest at the big picture, you still have to drive, and tell it I want to use python, \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, I want to load settings from .env.  taking these shortcuts can help you move quick and get the big picture.  This is especially helpful for someone who might know one language or framework and is trying a different one, but at some point you need to do the work and learn if you are going to be effective.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.youtube.com/shorts/NMQuGlQ0XHQ\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e- YouTube\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEnjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eyoutube.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWell spoken prime. Co-pilot is a fantastic tool for templating, boilerplate, or just getting something done that is just outside your knowledge or care to know.  Bit if you really want to learn something, you need to use your hands.  Reading the solution only gives you the happy path.  This does not give you that path that most people would take, and completely misses debugging.  If you are very new and learning it's unlikely that you can write large blocks of code without running a test or a script to try it.  Taking these shortcuts will hinder your ability to do it yourself.\n\nIf I were to devils advocate here, copilot is still not the greatest at the big picture, you still have to drive, and tell it I want to use python, fastapi, I want to load settings from .env.  taking these shortcuts can help you move quick and get the big picture.  This is especially helpful for someone who might know one language or framework and is trying a different one, but at some point you need to do the work and learn if you are going to be effective.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/NMQuGlQ0XHQ",
      "date_published": "2024-06-28T16:01:00Z",
      "date_modified": "2024-06-28T16:01:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-321/",
      "url": "https://go.waylonwalker.com/thought-321/",
      "title": "💭 PyAnnotate: Auto-generate PEP-484 annotations",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/dropbox/pyannotate\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/76758a1b2e208e81ae198bfc192746515f68c91041f46b587df4f643190f5622/dropbox/pyannotate\" alt=\"GitHub - dropbox/pyannotate: Auto-generate PEP-484 annotations — Auto-generate PEP-484 annotations. Contribute to dropbox/pyannotate development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - dropbox/pyannotate: Auto-generate PEP-484 annotations — Auto-generate PEP-484 annotations. Contribute to dropbox/pyannotate development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - dropbox/pyannotate: Auto-generate PEP-484 annotations\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAuto-generate PEP-484 annotations. Contribute to dropbox/pyannotate development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epyannotate is a tool that uses runtime types to suggest type annotations to use.  Test runners such as pytest can be used to generate the types.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/dropbox/pyannotate\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/76758a1b2e208e81ae198bfc192746515f68c91041f46b587df4f643190f5622/dropbox/pyannotate\" alt=\"GitHub - dropbox/pyannotate: Auto-generate PEP-484 annotations — Auto-generate PEP-484 annotations. Contribute to dropbox/pyannotate development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - dropbox/pyannotate: Auto-generate PEP-484 annotations\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAuto-generate PEP-484 annotations. Contribute to dropbox/pyannotate development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npyannotate is a tool that uses runtime types to suggest type annotations to use.  Test runners such as pytest can be used to generate the types.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/dropbox/pyannotate",
      "date_published": "2024-06-26T21:37:14Z",
      "date_modified": "2024-06-26T21:37:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-320/",
      "url": "https://go.waylonwalker.com/thought-320/",
      "title": "💭 qmk_firmware/docs/features/programmable_button.md at master · ...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md\" alt=\"https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md\"/ data-glightbox=\"description: https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eInteresting, linux supports 32 programmable buttons, special buttons that do nothing that hotkey programs like xbindkeys can pick up and run things, seems like it would be very intersting to use on a macro pad.  You could easily do dynamic and complex tasks without clashing that keybinding with something else.\u003c/p\u003e\n\u003cp\u003eI’m going to look into this for my next obs setup.  No matter what I try to do with the hyper key it always tends to do odd things depending on the application I am in.  typically its tmux, and it starts trying to do something I don’t want it to.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md](/static/https://github.com/qmk/qmk_firmware/blob/master/docs/features/programmable_button.md)\n\nInteresting, linux supports 32 programmable buttons, special buttons that do nothing that hotkey programs like xbindkeys can pick up and run things, seems like it would be very intersting to use on a macro pad.  You could easily do dynamic and complex tasks without clashing that keybinding with something else.\n\nI'm going to look into this for my next obs setup.  No matter what I try to do with the hyper key it always tends to do odd things depending on the application I am in.  typically its tmux, and it starts trying to do something I don't want it to.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/qmk/qmk_button.md",
      "date_published": "2024-06-26T01:19:41Z",
      "date_modified": "2024-06-26T01:19:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "qmk",
        "keeb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-319/",
      "url": "https://go.waylonwalker.com/thought-319/",
      "title": "💭 tusharsadhwani/yen: Create virtual environments for any Python...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tusharsadhwani/yen\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/aa11a691eb831d7388d2300beb9048270c3e1e350ead4fb0e3de703c6a1fb40e/tusharsadhwani/yen\" alt=\"GitHub - tusharsadhwani/yen: The last Python environment manager you\u0026#39;ll ever need. — The last Python environment manager you\u0026#39;ll ever need. - tusharsadhwani/yen\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - tusharsadhwani/yen: The last Python environment manager you\u0026#39;ll ever need. — The last Python environment manager you\u0026#39;ll ever need. - tusharsadhwani/yen\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - tusharsadhwani/yen: The last Python environment manager you\u0026#39;ll ever need.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe last Python environment manager you\u0026#39;ll ever need. - tusharsadhwani/yen\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCreate virtual environments for any Python version, without needing Python installed.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tusharsadhwani/yen\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/aa11a691eb831d7388d2300beb9048270c3e1e350ead4fb0e3de703c6a1fb40e/tusharsadhwani/yen\" alt=\"GitHub - tusharsadhwani/yen: The last Python environment manager you\u0026#39;ll ever need. — The last Python environment manager you\u0026#39;ll ever need. - tusharsadhwani/yen\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - tusharsadhwani/yen: The last Python environment manager you\u0026#39;ll ever need.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe last Python environment manager you\u0026#39;ll ever need. - tusharsadhwani/yen\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Create virtual environments for any Python version, without needing Python installed.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/tusharsadhwani/yen",
      "date_published": "2024-06-26T01:13:09Z",
      "date_modified": "2024-06-26T01:13:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-318/",
      "url": "https://go.waylonwalker.com/thought-318/",
      "title": "💭 Where DOESN’T curl run with curl BDFL Daniel Stenberg (Changel...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/49\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://snap.fly.dev/friends/49/img\" alt=\"Where DOESN’T curl run with curl BDFL Daniel Stenberg (Changelog \u0026amp; Friends #49) — Daniel Stenberg shares his guiding principles for BDFL\u0026#39;ing curl, gives us his perspective on the state of the internet, talks financial independence, ensuring curl won\u0026#39;t be the next XZ \u0026amp; more!\" loading=\"lazy\"/ data-glightbox=\"description: Where DOESN’T curl run with curl BDFL Daniel Stenberg (Changelog \u0026amp; Friends #49) — Daniel Stenberg shares his guiding principles for BDFL\u0026#39;ing curl, gives us his perspective on the state of the internet, talks financial independence, ensuring curl won\u0026#39;t be the next XZ \u0026amp; more!\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhere DOESN’T curl run with curl BDFL Daniel Stenberg (Changelog \u0026amp; Friends #49)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDaniel Stenberg shares his guiding principles for BDFL\u0026#39;ing curl, gives us his perspective on the state of the internet, talks financial independence, ensuring curl won\u0026#39;t be the next XZ \u0026amp; more!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eLove how Daniel just brushed off the number of netflix tv installs as small beans for curl installs.  overall great episode on open source, owning a major component to technology with such a small team.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/49\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/friends/49/img\" alt=\"Where DOESN’T curl run with curl BDFL Daniel Stenberg (Changelog \u0026amp; Friends #49) — Daniel Stenberg shares his guiding principles for BDFL\u0026#39;ing curl, gives us his perspective on the state of the internet, talks financial independence, ensuring curl won\u0026#39;t be the next XZ \u0026amp; more!\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhere DOESN’T curl run with curl BDFL Daniel Stenberg (Changelog \u0026amp; Friends #49)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDaniel Stenberg shares his guiding principles for BDFL\u0026#39;ing curl, gives us his perspective on the state of the internet, talks financial independence, ensuring curl won\u0026#39;t be the next XZ \u0026amp; more!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLove how Daniel just brushed off the number of netflix tv installs as small beans for curl installs.  overall great episode on open source, owning a major component to technology with such a small team.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/friends/49",
      "date_published": "2024-06-25T23:39:38Z",
      "date_modified": "2024-06-25T23:39:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "pod",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/playerctl-fixes-arch/",
      "url": "https://go.waylonwalker.com/playerctl-fixes-arch/",
      "title": "playerctl fixes arch media keys",
      "content_html": "\u003cp\u003eI’ve long had issues with my qmk keyboard media keys on my arch install, I\nalways thought it was on the keyboard end.  Today I learned that playerctl\nfixes this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S playerctl\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce it is installed all of my media keys started working right away.\u003c/p\u003e\n\u003cp\u003eI played around with it a bit more and came up with a way to display the\ncurrent playing title in my notifictations.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enotify-send \u003cspan class=\"s2\"\u003e\u0026#34;`playerctl metadata --format \u0026#39;{{lc(status)}}:{{artist}}-{{album}}-{{title}}\u0026#39;`\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've long had issues with my qmk keyboard media keys on my arch install, I\nalways thought it was on the keyboard end.  Today I learned that playerctl\nfixes this.\n\n``` bash\nparu -S playerctl\n```\n\nOnce it is installed all of my media keys started working right away.\n\nI played around with it a bit more and came up with a way to display the\ncurrent playing title in my notifictations.\n\n```bash\nnotify-send \"`playerctl metadata --format '{{lc(status)}}:{{artist}}-{{album}}-{{title}}'`\"\n```\n",
      "summary": "I've long had issues with my qmk keyboard media keys on my arch install, I always thought it was on the keyboard end. Today I learned that playerctl fixes this.",
      "date_published": "2024-06-25T18:23:41Z",
      "date_modified": "2024-06-25T18:23:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-317/",
      "url": "https://go.waylonwalker.com/thought-317/",
      "title": "💭 Keyboard Mounting Styles — Keyboard University",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.keyboard.university/200-courses/keyboard-mounting-styles-4lpp7\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekeyboard.university\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat keyboard design guide for all the different mounting options that are normal for keyboards with pros and cons of each.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.keyboard.university/200-courses/keyboard-mounting-styles-4lpp7\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekeyboard.university\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat keyboard design guide for all the different mounting options that are normal for keyboards with pros and cons of each.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.keyboard.university/200-courses/keyboard-mounting-styles-4lpp7",
      "date_published": "2024-06-24T17:19:17Z",
      "date_modified": "2024-06-24T17:19:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboards",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-316/",
      "url": "https://go.waylonwalker.com/thought-316/",
      "title": "💭 Welcome to RSS Club - daverupert.com",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2018/01/welcome-to-rss-club/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/daverupert.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/daverupert.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWelcome to RSS Club\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCongratulations on joining a secret society! If you’re reading this, that means my message has been transmitted successfully. This post is only available to you, Reader, through the ancient peer-...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com · daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSuper cool idea, kinda breaking the rules by talking about it here, but Its a cool idea to throw out posts to the core audience.  Apparently its been around for quite while Dave started in 2018.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://daverupert.com/2018/01/welcome-to-rss-club/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWelcome to RSS Club\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCongratulations on joining a secret society! If you’re reading this, that means my message has been transmitted successfully. This post is only available to you, Reader, through the ancient peer-...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edaverupert.com \u0026middot; daverupert.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSuper cool idea, kinda breaking the rules by talking about it here, but Its a cool idea to throw out posts to the core audience.  Apparently its been around for quite while Dave started in 2018.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://daverupert.com/2018/01/welcome-to-rss-club/",
      "date_published": "2024-06-24T17:12:16Z",
      "date_modified": "2024-06-24T17:12:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-315/",
      "url": "https://go.waylonwalker.com/thought-315/",
      "title": "💭 Releases · stackrox/kube-linter",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/stackrox/kube-linter\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/a5f8ae23972e2c58678ce682bf2c1c326bdc394a43a8042239ba27184ff2dd13/stackrox/kube-linter\" alt=\"GitHub - stackrox/kube-linter: KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. — KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. - stackrox/kube-linter\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - stackrox/kube-linter: KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. — KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. - stackrox/kube-linter\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - stackrox/kube-linter: KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. - stackrox/kube-linter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA linter for linting kubernetes manifests and help charts.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/stackrox/kube-linter\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/a5f8ae23972e2c58678ce682bf2c1c326bdc394a43a8042239ba27184ff2dd13/stackrox/kube-linter\" alt=\"GitHub - stackrox/kube-linter: KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. — KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. - stackrox/kube-linter\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - stackrox/kube-linter: KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the applications represented in them adhere to best practices. - stackrox/kube-linter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA linter for linting kubernetes manifests and help charts.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/stackrox/kube-linter",
      "date_published": "2024-06-24T17:09:37Z",
      "date_modified": "2024-06-24T17:09:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-314/",
      "url": "https://go.waylonwalker.com/thought-314/",
      "title": "💭 Keycodes Overview | QMK Firmware",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.qmk.fm/keycodes\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.qmk.fm.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.qmk.fm.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKeycodes Overview | QMK Firmware\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation for QMK Firmware\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.qmk.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFull reference to all of the qmk keycode list. Handy reference to refer to all of the keycodes that qmk has.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.qmk.fm/keycodes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKeycodes Overview | QMK Firmware\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation for QMK Firmware\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.qmk.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFull reference to all of the qmk keycode list. Handy reference to refer to all of the keycodes that qmk has.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.qmk.fm/keycodes",
      "date_published": "2024-06-24T17:06:23Z",
      "date_modified": "2024-06-24T17:06:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-313/",
      "url": "https://go.waylonwalker.com/thought-313/",
      "title": "💭 How to Build a Handwired Keyboard - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hjml-K-pV4E\" title=\"How to Build a Handwired Keyboard\" playlabel=\"Play: How to Build a Handwired Keyboard\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eFantastic guide to building handwried keyboards.  I used this guide to build my first hand-wired macro pad.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"hjml-K-pV4E\" title=\"How to Build a Handwired Keyboard\" playlabel=\"Play: How to Build a Handwired Keyboard\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nFantastic guide to building handwried keyboards.  I used this guide to build my first hand-wired macro pad.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=hjml-K-pV4E",
      "date_published": "2024-06-24T17:03:52Z",
      "date_modified": "2024-06-24T17:03:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keyboard",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jzhang38-tinyllama/",
      "url": "https://go.waylonwalker.com/jzhang38-tinyllama/",
      "title": "⭐ jzhang38 TinyLlama",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/jzhang38/TinyLlama\" 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\"\u003eTinyLlama\u003c/a\u003e by \u003ca href=\"https://github.com/jzhang38\" 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\"\u003ejzhang38\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eThe TinyLlama project is an open endeavor to pretrain a 1.1B Llama model on 3 trillion tokens.\u003c/p\u003e\n",
      "content_text": "\nJust starred [TinyLlama](https://github.com/jzhang38/TinyLlama) by [jzhang38](https://github.com/jzhang38). It's an exciting project with a lot to offer.\n\nThe TinyLlama project is an open endeavor to pretrain a 1.1B Llama model on 3 trillion tokens.\n",
      "summary": "Just starred TinyLlama by jzhang38. It's an exciting project with a lot to offer.",
      "date_published": "2024-06-23T20:18:31Z",
      "date_modified": "2024-06-23T20:18:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tusharsadhwani-packaged/",
      "url": "https://go.waylonwalker.com/tusharsadhwani-packaged/",
      "title": "⭐ tusharsadhwani packaged",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/tusharsadhwani/packaged\" 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\"\u003epackaged\u003c/a\u003e by \u003ca href=\"https://github.com/tusharsadhwani\" 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\"\u003etusharsadhwani\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eThe easiest way to ship python applications.\u003c/p\u003e\n",
      "content_text": "\nJust starred [packaged](https://github.com/tusharsadhwani/packaged) by [tusharsadhwani](https://github.com/tusharsadhwani). It's an exciting project with a lot to offer.\n\nThe easiest way to ship python applications.\n",
      "summary": "Just starred packaged by tusharsadhwani. It's an exciting project with a lot to offer.",
      "date_published": "2024-06-18T02:43:40Z",
      "date_modified": "2024-06-18T02:43:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-312/",
      "url": "https://go.waylonwalker.com/thought-312/",
      "title": "💭 Adam Wathan, Creator of TailwindCSS - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"FhJfm-kzopc\" title=\"Adam Wathan, Creator of TailwindCSS\" playlabel=\"Play: Adam Wathan, Creator of TailwindCSS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTwo inspirational people in one podcast, its cool to see how adam thinks about code, css, webdev, and building businesses.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"FhJfm-kzopc\" title=\"Adam Wathan, Creator of TailwindCSS\" playlabel=\"Play: Adam Wathan, Creator of TailwindCSS\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTwo inspirational people in one podcast, its cool to see how adam thinks about code, css, webdev, and building businesses.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=FhJfm-kzopc\u0026t=2578s",
      "date_published": "2024-06-16T22:09:17Z",
      "date_modified": "2024-06-16T22:09:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-311/",
      "url": "https://go.waylonwalker.com/thought-311/",
      "title": "💭 Episode #323 Best practices for Docker in production - [Talk P...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://talkpython.fm/episodes/show/323/best-practices-for-docker-in-production\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn-podcast.talkpython.fm/episodes/youtube_image/yDend6I9nwE/best-practices-for-docker-in-production.jpg?v=1\" alt=\"Best practices for Docker in production — You\" loading=\"lazy\"/ data-glightbox=\"description: Best practices for Docker in production — You\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBest practices for Docker in production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etalkpython.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat listen for anyone interested in productionizing python code with docker.  Itamar brings up some\u003c/p\u003e\n\u003cp\u003eDon’t trust base images for security, upgrade your packages.  Vulnerabilties become published and solved giving the bad guys istructions how to wreck your day and these fixes wont come to your docker application for up to two weeks due to image build tatency.\u003c/p\u003e\n\u003cp\u003eFor job based containers pre-compile your pyc for faster startup.\u003c/p\u003e\n\u003cp\u003eAlpine linux is probably not what you want for python.  Many packages such as postgres ship pre-copiled binaries that work for most linux distributions wich use glibc, but alpine uses musl so the binaries will be incompatable requiring you to need to install a bunch of build dependencies.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://talkpython.fm/episodes/show/323/best-practices-for-docker-in-production\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn-podcast.talkpython.fm/episodes/youtube_image/yDend6I9nwE/best-practices-for-docker-in-production.jpg?v=1\" alt=\"Best practices for Docker in production — You\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBest practices for Docker in production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etalkpython.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat listen for anyone interested in productionizing python code with docker.  Itamar brings up some \n\n\nDon't trust base images for security, upgrade your packages.  Vulnerabilties become published and solved giving the bad guys istructions how to wreck your day and these fixes wont come to your docker application for up to two weeks due to image build tatency.\n\nFor job based containers pre-compile your pyc for faster startup.\n\nAlpine linux is probably not what you want for python.  Many packages such as postgres ship pre-copiled binaries that work for most linux distributions wich use glibc, but alpine uses musl so the binaries will be incompatable requiring you to need to install a bunch of build dependencies.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://talkpython.fm/episodes/show/323/best-practices-for-docker-in-production",
      "date_published": "2024-06-16T00:55:12Z",
      "date_modified": "2024-06-16T00:55:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "docker",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-310/",
      "url": "https://go.waylonwalker.com/thought-310/",
      "title": "💭 Why You Should Build Your Homelab Now - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"tmw7oYG3vMU\" title=\"Why You Should Build Your \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 Now\" playlabel=\"Play: Why You Should Build Your Homelab Now\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eHomelabbers have been some of the best co-workers I have ever had.  Typically have a get shit done, If there’s a way I will find it kind of mentality.  If you are struggling to get a job in tech right now its tough.  Starting a homelab on a pc you pull out of the trash is a good way to get some experience that you can talk about in interview questions.\u003c/p\u003e\n\u003cp\u003eLinked video has some great points!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"tmw7oYG3vMU\" title=\"Why You Should Build Your Homelab Now\" playlabel=\"Play: Why You Should Build Your Homelab Now\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nHomelabbers have been some of the best co-workers I have ever had.  Typically have a get shit done, If there's a way I will find it kind of mentality.  If you are struggling to get a job in tech right now its tough.  Starting a homelab on a pc you pull out of the trash is a good way to get some experience that you can talk about in interview questions.\n\nLinked video has some great points!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=tmw7oYG3vMU",
      "date_published": "2024-06-14T22:58:22Z",
      "date_modified": "2024-06-14T22:58:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-309/",
      "url": "https://go.waylonwalker.com/thought-309/",
      "title": "💭 podman requries qemu-system on ubuntu",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://askubuntu.com/questions/1490805/how-do-i-install-qemu-on-ubuntu-23-10\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/askubuntu.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/askubuntu.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003easkubuntu.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epodman requires qemu-system on\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ podman machine init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLooking up Podman Machine image at quay.io/podman/machine-os:5.1 to create VM\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExtracting compressed file: podman-machine-default-amd64.qcow2: \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eError: exec: \u003cspan class=\"s2\"\u003e\u0026#34;qemu-img\u0026#34;\u003c/span\u003e: executable file not found in \u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe fix to this for me was to install qemu-system before podman machine init.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install qemu-system\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://askubuntu.com/questions/1490805/how-do-i-install-qemu-on-ubuntu-23-10\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003easkubuntu.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npodman requires qemu-system on \n\n\n``` bash\n❯ podman machine init\nLooking up Podman Machine image at quay.io/podman/machine-os:5.1 to create VM\nExtracting compressed file: podman-machine-default-amd64.qcow2: done\nError: exec: \"qemu-img\": executable file not found in $PATH\n```\n\nThe fix to this for me was to install qemu-system before podman machine init.\n\n\n``` bash\nsudo apt update\n\nsudo apt install qemu-system\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://askubuntu.com/questions/1490805/how-do-i-install-qemu-on-ubuntu-23-10",
      "date_published": "2024-06-12T19:29:18Z",
      "date_modified": "2024-06-12T19:29:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "podman",
        "container",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-308/",
      "url": "https://go.waylonwalker.com/thought-308/",
      "title": "💭 Customize and apply backgrounds fast | SVG Backgrounds",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.svgbackgrounds.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.svgbackgrounds.com/img/svg-backgrounds-preview.png\" alt=\"SVG Backgrounds, icons, and other website graphics — 👉 Copy-and-paste backgrounds, patterns, icons, and other website graphics directly into projects. All customizable, tiny in file size, and licensed for multi-use.\" loading=\"lazy\"/ data-glightbox=\"description: SVG Backgrounds, icons, and other website graphics — 👉 Copy-and-paste backgrounds, patterns, icons, and other website graphics directly into projects. All customizable, tiny in file size, and licensed for multi-use.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSVG Backgrounds, icons, and other website graphics\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e👉 Copy-and-paste backgrounds, patterns, icons, and other website graphics directly into projects. All customizable, tiny in file size, and licensed for multi-use.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSVG Backgrounds · svgbackgrounds.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003esvgbackgrounds is a really awesome resource for svg things recently featured on \u003ca href=\"https://shoptalkshow.com/618/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/shoptalkshow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/shoptalkshow.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://shoptalkshow.com/618/\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.svgbackgrounds.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.svgbackgrounds.com/img/svg-backgrounds-preview.png\" alt=\"SVG Backgrounds, icons, and other website graphics — 👉 Copy-and-paste backgrounds, patterns, icons, and other website graphics directly into projects. All customizable, tiny in file size, and licensed for multi-use.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSVG Backgrounds, icons, and other website graphics\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e👉 Copy-and-paste backgrounds, patterns, icons, and other website graphics directly into projects. All customizable, tiny in file size, and licensed for multi-use.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSVG Backgrounds \u0026middot; svgbackgrounds.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nsvgbackgrounds is a really awesome resource for svg things recently featured on [https://shoptalkshow.com/618/](https://shoptalkshow.com/618/)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.svgbackgrounds.com/",
      "date_published": "2024-06-12T16:09:25Z",
      "date_modified": "2024-06-12T16:09:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-307/",
      "url": "https://go.waylonwalker.com/thought-307/",
      "title": "💭 darrenburns/posting: Test your HTTP API using a powerful and m...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/darrenburns/posting\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/806285077/4a45adf3-877e-4898-99f3-11f8f8150286\" alt=\"GitHub - darrenburns/posting: The modern API client that lives in your terminal. — The modern API client that lives in your terminal. - darrenburns/posting\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - darrenburns/posting: The modern API client that lives in your terminal. — The modern API client that lives in your terminal. - darrenburns/posting\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - darrenburns/posting: The modern API client that lives in your terminal.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe modern API client that lives in your terminal. - darrenburns/posting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCurrently Posting is a super early postman like tui (terminal user interface).  It looks so good.  Darren is really getting into a groove, and textual is getting to a place that is allowing him to really make these beautiful.\u003c/p\u003e\n\u003cp\u003eI am so impressed with the progress that he has made so early, it looks so close to postman in the freaking terminal, and the ui is so good.  He already has think like jump that give you a way to around the ui like easymotion plugins.  Theres themes and a command line, oh man its so good. star it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/darrenburns/posting\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/806285077/4a45adf3-877e-4898-99f3-11f8f8150286\" alt=\"GitHub - darrenburns/posting: The modern API client that lives in your terminal. — The modern API client that lives in your terminal. - darrenburns/posting\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - darrenburns/posting: The modern API client that lives in your terminal.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe modern API client that lives in your terminal. - darrenburns/posting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCurrently Posting is a super early postman like tui (terminal user interface).  It looks so good.  Darren is really getting into a groove, and textual is getting to a place that is allowing him to really make these beautiful.\n\nI am so impressed with the progress that he has made so early, it looks so close to postman in the freaking terminal, and the ui is so good.  He already has think like jump that give you a way to around the ui like easymotion plugins.  Theres themes and a command line, oh man its so good. star it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/darrenburns/posting",
      "date_published": "2024-06-12T14:30:36Z",
      "date_modified": "2024-06-12T14:30:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dataherald-dataherald/",
      "url": "https://go.waylonwalker.com/dataherald-dataherald/",
      "title": "⭐ Dataherald dataherald",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/Dataherald/dataherald\" 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\"\u003edataherald\u003c/a\u003e by \u003ca href=\"https://github.com/Dataherald\" 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\"\u003eDataherald\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eInteract with your SQL database, Natural Language to SQL using LLMs\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [dataherald](https://github.com/Dataherald/dataherald) by [Dataherald](https://github.com/Dataherald).\n\nInteract with your SQL database, Natural Language to SQL using LLMs\n",
      "summary": "Looking for inspiration? dataherald by Dataherald.",
      "date_published": "2024-06-12T02:22:27Z",
      "date_modified": "2024-06-12T02:22:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/orbitinghail-sqlsync/",
      "url": "https://go.waylonwalker.com/orbitinghail-sqlsync/",
      "title": "⭐ orbitinghail sqlsync",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/orbitinghail/sqlsync\" 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\"\u003esqlsync\u003c/a\u003e by \u003ca href=\"https://github.com/orbitinghail\" 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\"\u003eorbitinghail\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eSQLSync is a collaborative offline-first wrapper around SQLite. It is designed to synchronize web application state between users, devices, and the edge.\u003c/p\u003e\n",
      "content_text": "\nCheck out [sqlsync](https://github.com/orbitinghail/sqlsync) by [orbitinghail](https://github.com/orbitinghail). It's a well-crafted project with great potential.\n\nSQLSync is a collaborative offline-first wrapper around SQLite. It is designed to synchronize web application state between users, devices, and the edge.\n",
      "summary": "Check out sqlsync by orbitinghail. It's a well-crafted project with great potential.",
      "date_published": "2024-06-11T12:38:23Z",
      "date_modified": "2024-06-11T12:38:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-306/",
      "url": "https://go.waylonwalker.com/thought-306/",
      "title": "💭 Blogmarks that use markdown",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Apr/25/blogmarks-that-use-markdown/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBlogmarks that use markdown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI needed to attach a correction to an older blogmark (my 20-year old name for short-form links with commentary on my blog) today - but the commentary field has always …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eOh I kinda like the name blogmark, as opposed to thoughts like I have chose for the same thing.  Aparantly Simon beat me to the punch by 20 years on this one.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Apr/25/blogmarks-that-use-markdown/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBlogmarks that use markdown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI needed to attach a correction to an older blogmark (my 20-year old name for short-form links with commentary on my blog) today - but the commentary field has always …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nOh I kinda like the name blogmark, as opposed to thoughts like I have chose for the same thing.  Aparantly Simon beat me to the punch by 20 years on this one.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/Apr/25/blogmarks-that-use-markdown/",
      "date_published": "2024-06-10T02:47:52Z",
      "date_modified": "2024-06-10T02:47:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "web",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-305/",
      "url": "https://go.waylonwalker.com/thought-305/",
      "title": "💭 A Link Blog in the Year 2024",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Jun/9/a-link-blog-in-the-year-2024/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA Link Blog in the Year 2024\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKellan Elliott-McCrea has started a new link blog: Like many people I’ve been dealing with the collapses of the various systems I relied on for information over the previous decades. …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTHIS! is the same reasons that I built \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\u003c/a\u003e{.hoverlink}.  Simon has bee a big inspiration along the way.  He defintely changed the format of my posts as I watched him build out his quote posts.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLink blogging is a pleasantly low-pressure way of writing online. Found something interesting? Post a link to it, with a sentence or two about why it’s worth checking out.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDitto! just make a post.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/Jun/9/a-link-blog-in-the-year-2024/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA Link Blog in the Year 2024\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eKellan Elliott-McCrea has started a new link blog: Like many people I’ve been dealing with the collapses of the various systems I relied on for information over the previous decades. …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTHIS! is the same reasons that I built [thoughts](https://thoughts.waylonwalker.com){.hoverlink}.  Simon has bee a big inspiration along the way.  He defintely changed the format of my posts as I watched him build out his quote posts.\n\n\u003e Link blogging is a pleasantly low-pressure way of writing online. Found something interesting? Post a link to it, with a sentence or two about why it's worth checking out.\n\nDitto! just make a post.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/Jun/9/a-link-blog-in-the-year-2024/",
      "date_published": "2024-06-10T02:44:35Z",
      "date_modified": "2024-06-10T02:44:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "web",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-304/",
      "url": "https://go.waylonwalker.com/thought-304/",
      "title": "💭 A Link Blog in the Year 2024 | Kellan Elliott-McCrea: Blog",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html\" alt=\"https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html\"/ data-glightbox=\"description: https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eKellan brings some interesting thoughts on where the internet is headed in 2024.  Interestingly I see myself headed in a similar direction.  Feeling like I know just enough to say fuck it and build my own platform for me to me me, from \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\u003c/a\u003e{.hoverlink} where I link and make thoughts on posts like this, to \u003ca href=\"https://reader.waylonwalker.com\"\u003ereader\u003c/a\u003e{.hoverlink} which is my rss reader replacement that I wanted in 2013 when it was \u003ca href=\"https://killedbygoogle.com/\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/killedbygoogle.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/killedbygoogle.com.png\"\u003ekilledbygoogle\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAnd particular with the collapse of the social spaces many of us grew up with, I feel called back to earlier forms of the Internet, like blogs, and in particular, starting a link blog.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAi has really had quite the two sided effect since chatgpt launched and set the world ablaze.  Suddenly you can get any answer you want as a custom fit blog post for free without effort, thus killing the traffic to any of these sites.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html](/static/https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html)\n\nKellan brings some interesting thoughts on where the internet is headed in 2024.  Interestingly I see myself headed in a similar direction.  Feeling like I know just enough to say fuck it and build my own platform for me to me me, from [thoughts](https://thoughts.waylonwalker.com){.hoverlink} where I link and make thoughts on posts like this, to [reader](https://reader.waylonwalker.com){.hoverlink} which is my rss reader replacement that I wanted in 2013 when it was [killedbygoogle](https://killedbygoogle.com/){.hoverlink}\n\n\u003e  And particular with the collapse of the social spaces many of us grew up with, I feel called back to earlier forms of the Internet, like blogs, and in particular, starting a link blog.\n\nAi has really had quite the two sided effect since chatgpt launched and set the world ablaze.  Suddenly you can get any answer you want as a custom fit blog post for free without effort, thus killing the traffic to any of these sites.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://laughingmeme.org//2024/06/08/a-link-blog-in-2024.html",
      "date_published": "2024-06-10T02:40:20Z",
      "date_modified": "2024-06-10T02:40:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "web",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-303/",
      "url": "https://go.waylonwalker.com/thought-303/",
      "title": "💭 How to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://homenetworkguy.com/how-to/configure-dns-over-tls-unbound-opnsense/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://homenetworkguy.com/images/how-to/configure-dns-over-tls-unbound-opnsense/padlock-428549_640.jpg\" alt=\"How to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense — Going beyond the basics of home networking\" loading=\"lazy\"/ data-glightbox=\"description: How to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense — Going beyond the basics of home networking\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGoing beyond the basics of home networking\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehomenetworkguy.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSetting up DNS overTLS in opnsense has made my dns just a bit more secure and reliable.  I recently had an outage of half the internet within my house.  This also hit some of my friends and not some.  It did not hit my mobile network.  What seems to have happened is a dns issue with my isp not resolving some domains.  This setup corrected my issue and I was back online more securely.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eI did try to setup the family resolver and found it was blocking some sites I am ok with.  I decided to drop back to the vanilla resolver and let other services within opnsense control blocking where I can caontrol the whitelist myself.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://homenetworkguy.com/how-to/configure-dns-over-tls-unbound-opnsense/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://homenetworkguy.com/images/how-to/configure-dns-over-tls-unbound-opnsense/padlock-428549_640.jpg\" alt=\"How to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense — Going beyond the basics of home networking\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGoing beyond the basics of home networking\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehomenetworkguy.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSetting up DNS overTLS in opnsense has made my dns just a bit more secure and reliable.  I recently had an outage of half the internet within my house.  This also hit some of my friends and not some.  It did not hit my mobile network.  What seems to have happened is a dns issue with my isp not resolving some domains.  This setup corrected my issue and I was back online more securely.\n\n!!! Note\n   I did try to setup the family resolver and found it was blocking some sites I am ok with.  I decided to drop back to the vanilla resolver and let other services within opnsense control blocking where I can caontrol the whitelist myself.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://homenetworkguy.com/how-to/configure-dns-over-tls-unbound-opnsense/",
      "date_published": "2024-06-09T15:40:11Z",
      "date_modified": "2024-06-09T15:40:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "opnsense",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-302/",
      "url": "https://go.waylonwalker.com/thought-302/",
      "title": "💭 argoproj/argo-events: Event-driven Automation Framework for Ku...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/argoproj/argo-events?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/b4cf843184f43e777c5738793134f433584cd17797d9d22d9cc9560f85096349/argoproj/argo-events\" alt=\"GitHub - argoproj/argo-events: Event-driven Automation Framework for Kubernetes — Event-driven Automation Framework for Kubernetes. Contribute to argoproj/argo-events development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - argoproj/argo-events: Event-driven Automation Framework for Kubernetes — Event-driven Automation Framework for Kubernetes. Contribute to argoproj/argo-events development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - argoproj/argo-events: Event-driven Automation Framework for Kubernetes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEvent-driven Automation Framework for Kubernetes. Contribute to argoproj/argo-events development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eArgo events is an event driven automation framework for kubernetes that can create kubernetes objects among other things based on events.  I’ve been using native kubernetes cronjobs to kick off jobs based on a cron trigger.\u003c/p\u003e\n\u003cp\u003eFor instance I am running reader.waylonwalker.com every hour, to rebuild the site and re-deploy it.  It takes about two minutes to fetch every rss feed, so this is a nice application of a job compared to a web server fetching the feeds live.  Now my posts may be up to an hour stale but they load fast.\u003c/p\u003e\n\u003cp\u003eArgo events takes event drien architecture to the next level allowing to be triggered by many more things, and do many more things than creating a cron job.  I’m definitely thinking about dropping this in my \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.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/argoproj/argo-events?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/b4cf843184f43e777c5738793134f433584cd17797d9d22d9cc9560f85096349/argoproj/argo-events\" alt=\"GitHub - argoproj/argo-events: Event-driven Automation Framework for Kubernetes — Event-driven Automation Framework for Kubernetes. Contribute to argoproj/argo-events development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - argoproj/argo-events: Event-driven Automation Framework for Kubernetes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEvent-driven Automation Framework for Kubernetes. Contribute to argoproj/argo-events development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nArgo events is an event driven automation framework for kubernetes that can create kubernetes objects among other things based on events.  I've been using native kubernetes cronjobs to kick off jobs based on a cron trigger.  \n\nFor instance I am running reader.waylonwalker.com every hour, to rebuild the site and re-deploy it.  It takes about two minutes to fetch every rss feed, so this is a nice application of a job compared to a web server fetching the feeds live.  Now my posts may be up to an hour stale but they load fast.\n\nArgo events takes event drien architecture to the next level allowing to be triggered by many more things, and do many more things than creating a cron job.  I'm definitely thinking about dropping this in my homelab.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/argoproj/argo-events?tab=readme-ov-file",
      "date_published": "2024-06-09T14:30:26Z",
      "date_modified": "2024-06-09T14:30:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailwind-post-template/",
      "url": "https://go.waylonwalker.com/tailwind-post-template/",
      "title": "tailwind post template",
      "content_html": "\u003cp\u003eToday I am playing around with tailwind, flexing the css muscle and learning\nhow to build new and different layouts with it.\u003c/p\u003e\n\u003cp\u003eI created a new post template that mimics a terminal look in css where I could\ninject the post title, description, and other frontmatter elements.\u003c/p\u003e\n\u003ciframe src=\"/playground/tailwind-post-template\" width=\"100%\" height=\"800px\" class=\"overflow-hidden\" scrolling=\"no\"\u003e\n\u003cp\u003eI think this is a pretty cool layout, I could make a\n\u003ca href=\"https://carbon.now.sh\"\u003ecarbon.now.sh\u003c/a\u003e{.hoverlink} clone or more realistically I could\nmake it into a template for blog pages and this could become \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eog\u003c/a\u003e images.\u003c/p\u003e\n\u003cp class=\"mx-auto block w-fit mb-0\"\u003e\u003c/p\u003e\n\u003cp class=\"mx-auto block w-fit mt-0\"\u003e\u003ca href=\"/still-loving-tailwind/\" class=\"wikilink\" data-title=\"Still Loving Tailwind\" data-description=\"I\u0026#39;ve been using tailwind for a few months now and I can still say I\u0026#39;m loving it. I\u0026#39;ve been using it to create some rapid prototypes that may or may not ever...\" data-date=\"2023-11-30\" data-preview=\"I\u0026#39;ve been using tailwind for a few months now and I can still say I\u0026#39;m loving it. I\u0026#39;ve been using it to create some rapid prototypes that may or may not ever...\"\u003eStill Loving Tailwind\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\u003c/iframe\u003e",
      "content_text": "\nToday I am playing around with tailwind, flexing the css muscle and learning\nhow to build new and different layouts with it.\n\nI created a new post template that mimics a terminal look in css where I could\ninject the post title, description, and other frontmatter elements.\n\n\u003ciframe src='/playground/tailwind-post-template' width='100%' height='800px' class='overflow-hidden' scrolling='no'/\u003e\n\nI think this is a pretty cool layout, I could make a\n[carbon.now.sh](https://carbon.now.sh){.hoverlink} clone or more realistically I could\nmake it into a template for blog pages and this could become og images.\n\n{.mx-auto .block .w-fit .mb-0}\nCheck out this post\n\n{.mx-auto .block .w-fit .mt-0}\n\u003ca href=\"/still-loving-tailwind/\" class=\"wikilink\" data-title=\"Still Loving Tailwind\" data-description=\"I\u0026#39;ve been using tailwind for a few months now and I can still say I\u0026#39;m loving it. I\u0026#39;ve been using it to create some rapid prototypes that may or may not ever...\" data-date=\"2023-11-30\"\u003eStill Loving Tailwind\u003c/a\u003e\n",
      "summary": "Today I am playing around with tailwind, flexing the css muscle and learning how to build new and different layouts with it.",
      "date_published": "2024-06-08T14:47:42Z",
      "date_modified": "2024-06-08T14:47:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-301/",
      "url": "https://go.waylonwalker.com/thought-301/",
      "title": "💭 catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/catppuccin/ulauncher\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/17586f151e40edda426418a60998c5171ffc2011ea169c13629b208f57fbbc91/catppuccin/ulauncher\" alt=\"GitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher — 🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher — 🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI am using this theme for Ulauncher in arch and it looks fantastic!  One line install (read it first).\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 \u0026lt;\u003cspan class=\"o\"\u003e(\u003c/span\u003ecurl https://raw.githubusercontent.com/catppuccin/ulauncher/main/install.py -fsSL\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/catppuccin/ulauncher\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/17586f151e40edda426418a60998c5171ffc2011ea169c13629b208f57fbbc91/catppuccin/ulauncher\" alt=\"GitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher — 🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI am using this theme for Ulauncher in arch and it looks fantastic!  One line install (read it first).\n\n``` bash\npython3 \u003c(curl https://raw.githubusercontent.com/catppuccin/ulauncher/main/install.py -fsSL)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/catppuccin/ulauncher",
      "date_published": "2024-06-07T03:59:30Z",
      "date_modified": "2024-06-07T03:59:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-300/",
      "url": "https://go.waylonwalker.com/thought-300/",
      "title": "💭 Ulauncher — Application launcher for Linux 🐧",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ulauncher.io/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/ulauncher.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/ulauncher.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUlauncher — Application launcher for Linux 🐧\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDownload Ulauncher for Linux, discover extensions and videos, and support the project.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eulauncher.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJust discovered this really cool launcher from the DHH distro omakub.  \u003ca href=\"https://github.com/basecamp/omakub\" 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\"\u003egithub.com/omakub\u003c/a\u003e{.hoverlink}.\u003c/p\u003e\n\u003cp\u003eUlauncher comes out of the box looking good, supports extensions, and shortcuts like I have a lot of mac launchers have.  I installed it plus a theme and in no time It was looking good and launching applications.\u003c/p\u003e\n\u003cp\u003eIn the past I have leaned in on rofi for task launching, it is good.  I just felt it was harder to configure to get right or look good.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ulauncher.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUlauncher — Application launcher for Linux 🐧\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDownload Ulauncher for Linux, discover extensions and videos, and support the project.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eulauncher.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJust discovered this really cool launcher from the DHH distro omakub.  [github.com/omakub](https://github.com/basecamp/omakub){.hoverlink}.\n\nUlauncher comes out of the box looking good, supports extensions, and shortcuts like I have a lot of mac launchers have.  I installed it plus a theme and in no time It was looking good and launching applications.\n\nIn the past I have leaned in on rofi for task launching, it is good.  I just felt it was harder to configure to get right or look good.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ulauncher.io/",
      "date_published": "2024-06-07T03:58:16Z",
      "date_modified": "2024-06-07T03:58:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/catppuccin-ulauncher/",
      "url": "https://go.waylonwalker.com/catppuccin-ulauncher/",
      "title": "⭐ catppuccin ulauncher",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/catppuccin/ulauncher\" 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\"\u003eulauncher\u003c/a\u003e by \u003ca href=\"https://github.com/catppuccin\" 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\"\u003ecatppuccin\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🇺 Soothing pastel theme for Ulauncher\u003c/p\u003e\n",
      "content_text": "\nThe work on [ulauncher](https://github.com/catppuccin/ulauncher) by [catppuccin](https://github.com/catppuccin).\n\n🇺 Soothing pastel theme for Ulauncher\n",
      "summary": "The work on ulauncher by catppuccin.",
      "date_published": "2024-06-07T03:40:13Z",
      "date_modified": "2024-06-07T03:40:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/codex-team-editor-js/",
      "url": "https://go.waylonwalker.com/codex-team-editor-js/",
      "title": "⭐ codex-team editor.js",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/codex-team/editor.js\" 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\"\u003eeditor.js\u003c/a\u003e by \u003ca href=\"https://github.com/codex-team\" 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\"\u003ecodex-team\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA block-style editor with clean JSON output\u003c/p\u003e\n",
      "content_text": "\nThe work on [editor.js](https://github.com/codex-team/editor.js) by [codex-team](https://github.com/codex-team).\n\nA block-style editor with clean JSON output\n",
      "summary": "The work on editor.js by codex-team.",
      "date_published": "2024-06-06T21:10:13Z",
      "date_modified": "2024-06-06T21:10:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-299/",
      "url": "https://go.waylonwalker.com/thought-299/",
      "title": "💭 Steam Deck dock",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://kbd.news/Steam-Deck-dock-2291.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://kbd.news/Steam-Deck-dock-2291.html\" alt=\"https://kbd.news/Steam-Deck-dock-2291.html\"/ data-glightbox=\"description: https://kbd.news/Steam-Deck-dock-2291.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is a sick steam deck dock!   With a corne built in laptop style.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://kbd.news/Steam-Deck-dock-2291.html](/static/https://kbd.news/Steam-Deck-dock-2291.html)\n\nThis is a sick steam deck dock!   With a corne built in laptop style.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kbd.news/Steam-Deck-dock-2291.html",
      "date_published": "2024-06-06T17:25:14Z",
      "date_modified": "2024-06-06T17:25:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cyberdeck",
        "keeb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-298/",
      "url": "https://go.waylonwalker.com/thought-298/",
      "title": "💭 basecamp/omakub: Opinionated Ubuntu Setup",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/basecamp/omakub\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/058ad43b9a4a4932c910d0f00129d780016ae6d61f9a3171397f82369a8ad7aa/basecamp/omakub\" alt=\"GitHub - basecamp/omakub: Opinionated Ubuntu Setup — Opinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - basecamp/omakub: Opinionated Ubuntu Setup — Opinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - basecamp/omakub: Opinionated Ubuntu Setup\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOpinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is DHH’s linux startup script.  Call it a distro if you want, but he doesn’t.  It’s made to take a vanilla ubuntu install and configure everything the way he likes it.  There’s a number of great nuggets in here to pick up on.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNo need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omakub is an opinionated take on what Linux can be at its best.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eCheck it out and give it a ⭐ \u003ca href=\"https://github.com/basecamp/omakub\" 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\"\u003ebasecamp/omakub\u003c/a\u003e{.hoverlink}.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/basecamp/omakub\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/058ad43b9a4a4932c910d0f00129d780016ae6d61f9a3171397f82369a8ad7aa/basecamp/omakub\" alt=\"GitHub - basecamp/omakub: Opinionated Ubuntu Setup — Opinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - basecamp/omakub: Opinionated Ubuntu Setup\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOpinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is DHH's linux startup script.  Call it a distro if you want, but he doesn't.  It's made to take a vanilla ubuntu install and configure everything the way he likes it.  There's a number of great nuggets in here to pick up on.\n\n\u003e No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omakub is an opinionated take on what Linux can be at its best.\n\nCheck it out and give it a ⭐ [basecamp/omakub](https://github.com/basecamp/omakub){.hoverlink}.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/basecamp/omakub",
      "date_published": "2024-06-06T16:20:19Z",
      "date_modified": "2024-06-06T16:20:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-297/",
      "url": "https://go.waylonwalker.com/thought-297/",
      "title": "💭 From the Circle to Epicycles (Part 1) - An animated introducti...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.andreinc.net/2024/04/24/from-the-circle-to-epicycles\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.andreinc.net.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.andreinc.net.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFrom the circle to epicycles | Personal Site of Andrei N. Ciobanu\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis article will be part of an extensive series in which I plan to explore various aspects of Fourier Mathematics. I will take notes, create some visuals (a good pretext to learn more about graphi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eandreinc.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a really cool animated visual representation of how sine waves work, how they relate to circles, pi, rad, and how to add up a series of waves to make square and sawtooth waves.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.andreinc.net/2024/04/24/from-the-circle-to-epicycles\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFrom the circle to epicycles | Personal Site of Andrei N. Ciobanu\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis article will be part of an extensive series in which I plan to explore various aspects of Fourier Mathematics. I will take notes, create some visuals (a good pretext to learn more about graphi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eandreinc.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a really cool animated visual representation of how sine waves work, how they relate to circles, pi, rad, and how to add up a series of waves to make square and sawtooth waves.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.andreinc.net/2024/04/24/from-the-circle-to-epicycles",
      "date_published": "2024-06-06T14:02:50Z",
      "date_modified": "2024-06-06T14:02:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-296/",
      "url": "https://go.waylonwalker.com/thought-296/",
      "title": "💭 Darren Burns 🌱 on X: \"Here's an early clip of my new (work in ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/_darrenburns/status/1797763563270095006\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis looks like a sweet tui postman clone.  Darren is really rolling with these tui’s.  Cant wait to see where this one goes.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/_darrenburns/status/1797763563270095006\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis looks like a sweet tui postman clone.  Darren is really rolling with these tui's.  Cant wait to see where this one goes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/_darrenburns/status/1797763563270095006",
      "date_published": "2024-06-04T02:04:35Z",
      "date_modified": "2024-06-04T02:04:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "tui",
        "api",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darrenburns-posting/",
      "url": "https://go.waylonwalker.com/darrenburns-posting/",
      "title": "⭐ darrenburns posting",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/darrenburns\" 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\"\u003edarrenburns\u003c/a\u003e and their project \u003ca href=\"https://github.com/darrenburns/posting\" 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\"\u003eposting\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe modern API client that lives in your terminal.\u003c/p\u003e\n",
      "content_text": "\nCheck out [darrenburns](https://github.com/darrenburns) and their project [posting](https://github.com/darrenburns/posting).\n\nThe modern API client that lives in your terminal.\n",
      "summary": "Check out darrenburns and their project posting.",
      "date_published": "2024-06-04T02:02:35Z",
      "date_modified": "2024-06-04T02:02:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-295/",
      "url": "https://go.waylonwalker.com/thought-295/",
      "title": "💭 How to Force Dark Mode on Every Website in Google Chrome",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.howtogeek.com/446198/how-to-force-dark-mode-on-every-website-in-google-chrome/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static0.howtogeekimages.com/wordpress/wp-content/uploads/2024/06/laptop-with-some-google-chrome-windows-and-a-dark-mode-switch.jpg?w=1600\u0026amp;h=900\u0026amp;fit=crop\" alt=\"How to Force Dark Mode on Every Website in Google Chrome — Do you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.\" loading=\"lazy\"/ data-glightbox=\"description: How to Force Dark Mode on Every Website in Google Chrome — Do you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Force Dark Mode on Every Website in Google Chrome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDo you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHow-To Geek · howtogeek.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSometimes I struggle to get my os to report dark mode to chrome, luckily there is a way to force chrome to always use dark mode.\u003c/p\u003e\n\u003cp\u003eI’ve never really gotten into dark reader and extensions like this. For some reason they all make websites look really weird to me and I don’t really care for it.  What I want is websites designed to be in dark/light to always go dark, if the designer didn’t design dark just let it be light.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.howtogeek.com/446198/how-to-force-dark-mode-on-every-website-in-google-chrome/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static0.howtogeekimages.com/wordpress/wp-content/uploads/2024/06/laptop-with-some-google-chrome-windows-and-a-dark-mode-switch.jpg?w=1600\u0026amp;h=900\u0026amp;fit=crop\" alt=\"How to Force Dark Mode on Every Website in Google Chrome — Do you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Force Dark Mode on Every Website in Google Chrome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDo you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHow-To Geek \u0026middot; howtogeek.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSometimes I struggle to get my os to report dark mode to chrome, luckily there is a way to force chrome to always use dark mode.\n\nI've never really gotten into dark reader and extensions like this. For some reason they all make websites look really weird to me and I don't really care for it.  What I want is websites designed to be in dark/light to always go dark, if the designer didn't design dark just let it be light.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.howtogeek.com/446198/how-to-force-dark-mode-on-every-website-in-google-chrome/",
      "date_published": "2024-06-03T18:52:25Z",
      "date_modified": "2024-06-03T18:52:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailscale-ssh/",
      "url": "https://go.waylonwalker.com/tailscale-ssh/",
      "title": "tailscale ssh",
      "content_html": "\u003cp\u003eTailscale allows you to ssh into all of your tailscale machines, it busts\nthrough firewalls and accross networks without complex setup.  If you have used\ntailscale before this is an obvious no brainer.  What is not obvious is that\nyou can configure tailscale to allow ssh connections from devices within your\ntailnet without even a ssh daemon process running right through the tailscale\ndaemon.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etailscale status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etailscale \u003cspan class=\"nb\"\u003eset\u003c/span\u003e --ssh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI picked this up from the tailscale youtube channel.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=08clF9srJ2k\u0026amp;t=35s\" class=\"youtube-embed  has-avatar has-avatar-before\" 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\"\u003eTailscale\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nTailscale allows you to ssh into all of your tailscale machines, it busts\nthrough firewalls and accross networks without complex setup.  If you have used\ntailscale before this is an obvious no brainer.  What is not obvious is that\nyou can configure tailscale to allow ssh connections from devices within your\ntailnet without even a ssh daemon process running right through the tailscale\ndaemon.\n\n``` bash\ntailscale status\ntailscale set --ssh\n```\n\nI picked this up from the tailscale youtube channel.\n\n[Tailscale](https://www.youtube.com/watch?v=08clF9srJ2k\u0026t=35s){.youtube-embed}\n",
      "summary": "Tailscale allows you to ssh into all of your tailscale machines, it busts through firewalls and accross networks without complex setup. If you have used...",
      "date_published": "2024-06-03T16:40:18Z",
      "date_modified": "2024-06-03T16:40:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-293/",
      "url": "https://go.waylonwalker.com/thought-293/",
      "title": "💭 xxHash - Extremely fast non-cryptographic hash algorithm",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://xxhash.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003exxHash - Extremely fast non-cryptographic hash algorithm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003exxhash.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003exxHash is an extremely fast non-cryptographic hash algorithm, working at RAM speed limit. It is proposed in four flavors (XXH32, XXH64, XXH3_64bits and XXH3_128bits). The latest variant, XXH3, offers improved performance across the board, especially on small data.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://xxhash.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003exxHash - Extremely fast non-cryptographic hash algorithm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003exxhash.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e xxHash is an extremely fast non-cryptographic hash algorithm, working at RAM speed limit. It is proposed in four flavors (XXH32, XXH64, XXH3_64bits and XXH3_128bits). The latest variant, XXH3, offers improved performance across the board, especially on small data.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://xxhash.com/",
      "date_published": "2024-06-03T13:34:30Z",
      "date_modified": "2024-06-03T13:34:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-292/",
      "url": "https://go.waylonwalker.com/thought-292/",
      "title": "💭 xxhash · PyPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/xxhash/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"xxhash — Python binding for xxHash\" loading=\"lazy\"/ data-glightbox=\"description: xxhash — Python binding for xxHash\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003exxhash\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePython binding for xxHash\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI · pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI hit an issue with markata where even though a bunch of articles were cached, the site build was still slow because I was hitting hashlib.sha256 so hard for cache keys.  I was shocked when this popped up in my profiler as a significant portion of the time spent.  I swapped out for xxhash and that issue completely went away.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/xxhash/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"xxhash — Python binding for xxHash\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003exxhash\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePython binding for xxHash\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI \u0026middot; pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI hit an issue with markata where even though a bunch of articles were cached, the site build was still slow because I was hitting hashlib.sha256 so hard for cache keys.  I was shocked when this popped up in my profiler as a significant portion of the time spent.  I swapped out for xxhash and that issue completely went away.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/xxhash/",
      "date_published": "2024-06-03T13:34:05Z",
      "date_modified": "2024-06-03T13:34:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/latest-page-in-markata/",
      "url": "https://go.waylonwalker.com/latest-page-in-markata/",
      "title": "Latest Page in Markata",
      "content_html": "\u003cp\u003eI just implemented a latest blog post link in Markata by asking for the first\npost slug from the blog feed.  The implementation uses the jinja_md plugin to\nrender jinja against the markdown and a \u003cmeta/\u003e tag to redirect.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMy latest blog post is [[ {{ markata.feeds.blog.posts[0].slug }} ]].  Click the\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elink if you are not automatically redirected.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;meta http-equiv=\u0026#34;Refresh\u0026#34; content=\u0026#34;0; url=\u0026#39;/{{ markata.feeds.blog.posts[0].slug }}\u0026#39;\u0026#34; /\u0026gt;  \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"setting-up-the-feed\"\u003eSetting up the feed \u003ca href=\"#setting-up-the-feed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFeeds are setup in \u003ccode\u003emarkata.toml\u003c/code\u003e configuration.  They provide a handy way to\ncreate an \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 feed, rss feed, and quickly reference a filtered set of posts\nlike this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# you will need to enable the jinja_md plugin along with the defaults\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ehooks\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;markata.plugins.jinja_md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;default\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# set up the blog feed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003efeeds\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eslug\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;blog\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etemplate\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;feed.html\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003efilter\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;date\u0026lt;=today and templateKey in [\u0026#39;blog-post\u0026#39;] and published\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esort\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;date\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ereverse\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor more information on markata check out the full \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 post.\u003c/p\u003e\n",
      "content_text": "\n\nI just implemented a latest blog post link in Markata by asking for the first\npost slug from the blog feed.  The implementation uses the jinja_md plugin to\nrender jinja against the markdown and a \u003cmeta\u003e tag to redirect.\n\n``` markdown\nMy latest blog post is [[ {{ markata.feeds.blog.posts[0].slug }} ]].  Click the\nlink if you are not automatically redirected.\n\n\u003cmeta http-equiv=\"Refresh\" content=\"0; url='/{{ markata.feeds.blog.posts[0].slug }}'\" /\u003e  \n```\n\n## Setting up the feed\n\nFeeds are setup in `markata.toml` configuration.  They provide a handy way to\ncreate an html feed, rss feed, and quickly reference a filtered set of posts\nlike this.\n\n``` toml\n# you will need to enable the jinja_md plugin along with the defaults\n[markata]\nhooks = [\n    \"markata.plugins.jinja_md\",\n    \"default\",\n    ]\n\n# set up the blog feed\n[[markata.feeds]]\nslug = 'blog'\ntemplate = \"feed.html\"\nfilter = \"date\u003c=today and templateKey in ['blog-post'] and published\"\nsort = \"date\"\nreverse = true\n```\n\nFor more information on markata check out the full \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 post.\n",
      "summary": "I just implemented a latest blog post link in Markata by asking for the first post slug from the blog feed. The implementation uses the jinja_md plugin to...",
      "date_published": "2024-06-01T21:01:26Z",
      "date_modified": "2024-06-01T21:01:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-291/",
      "url": "https://go.waylonwalker.com/thought-291/",
      "title": "💭 Replicate — Run AI with an API",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://replicate.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/replicate.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/replicate.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReplicate - Run AI with an API\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRun open-source machine learning models with a cloud API\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ereplicate.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is so easy compared to self hosting stable diffusion yourself.  It even has a nice api that you can hit with curl or python.  The pricing seems competitive as well.   Bookmarking this to try next time I need something like it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://replicate.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReplicate - Run AI with an API\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRun open-source machine learning models with a cloud API\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ereplicate.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is so easy compared to self hosting stable diffusion yourself.  It even has a nice api that you can hit with curl or python.  The pricing seems competitive as well.   Bookmarking this to try next time I need something like it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://replicate.com/",
      "date_published": "2024-06-01T00:59:49Z",
      "date_modified": "2024-06-01T00:59:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-290/",
      "url": "https://go.waylonwalker.com/thought-290/",
      "title": "💭 How to Deliver Code Every Day | Jake Worth",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.jakeworth.com/posts/how-to-deliver-code-every-day/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jakeworth.com/twittercard.png\" alt=\"How to Deliver Code Every Day — I recently calculated that I merge 0.8 pull requests every day into my team repo. “How to Deliver Code Every 0.8 Days” didn’t sing, so let’s say I merge about one PR every day, delivering one or more features to production. I like this velocity, and in this post, I’ll explain how you can achieve it yourself.\" loading=\"lazy\"/ data-glightbox=\"description: How to Deliver Code Every Day — I recently calculated that I merge 0.8 pull requests every day into my team repo. “How to Deliver Code Every 0.8 Days” didn’t sing, so let’s say I merge about one PR every day, delivering one or more features to production. I like this velocity, and in this post, I’ll explain how you can achieve it yourself.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Deliver Code Every Day\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI recently calculated that I merge 0.8 pull requests every day into my team repo. “How to Deliver Code Every 0.8 Days” didn’t sing, so let’s say I merge about one PR every day, delivering o...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJake Worth · jakeworth.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat set of tips here!\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNo waiting. No “waiting until tomorrow” or “It’s Friday, let’s wait until Monday” to deploy. If your deploys are so slow that deploying an hour before the end of the day is a risk, that’s a separate problem. If you’re afraid of a Friday deploy, your system is too brittle, or you don’t have foolproof rollback procedures, or you don’t have people you trust on call to resolve it. Each of these is a problem that you can fix.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis one I find interesting  I think there are some industries where customers come in large waves over the weekend, and a weekend bug can not only ruin someones day off, take longer to fix, but also cost a lot of money.\u003c/p\u003e\n\u003cp\u003eNot deploying on Friday is totally what that team should be doing.\u003c/p\u003e\n\u003cp\u003eMost of us are not that team.  Most of us work on small teams supporting some sort of product that Should be able to be tested and rolled back.  I completely agree with Jake here, if your not willing to deploy on Friday you are not confident in your product.   You need to work on better testing, rollback strategies, and feature flagging is what you need.\u003c/p\u003e\n\u003cp\u003eI’ve also been on teams where we don’t deploy in the middle of the day or right before we leave for vacation because we are early, our customers are important to us, and we accept that we have not hit our marks yet on the ability to swiftly recover from some downtime so risk is high.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.jakeworth.com/posts/how-to-deliver-code-every-day/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jakeworth.com/twittercard.png\" alt=\"How to Deliver Code Every Day — I recently calculated that I merge 0.8 pull requests every day into my team repo. “How to Deliver Code Every 0.8 Days” didn’t sing, so let’s say I merge about one PR every day, delivering one or more features to production. I like this velocity, and in this post, I’ll explain how you can achieve it yourself.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Deliver Code Every Day\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI recently calculated that I merge 0.8 pull requests every day into my team repo. “How to Deliver Code Every 0.8 Days” didn’t sing, so let’s say I merge about one PR every day, delivering o...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJake Worth \u0026middot; jakeworth.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGreat set of tips here!\n\n\u003e No waiting. No “waiting until tomorrow” or “It’s Friday, let’s wait until Monday” to deploy. If your deploys are so slow that deploying an hour before the end of the day is a risk, that’s a separate problem. If you’re afraid of a Friday deploy, your system is too brittle, or you don’t have foolproof rollback procedures, or you don’t have people you trust on call to resolve it. Each of these is a problem that you can fix.\n\nThis one I find interesting  I think there are some industries where customers come in large waves over the weekend, and a weekend bug can not only ruin someones day off, take longer to fix, but also cost a lot of money.\n\nNot deploying on Friday is totally what that team should be doing.\n\nMost of us are not that team.  Most of us work on small teams supporting some sort of product that Should be able to be tested and rolled back.  I completely agree with Jake here, if your not willing to deploy on Friday you are not confident in your product.   You need to work on better testing, rollback strategies, and feature flagging is what you need.\n\nI've also been on teams where we don't deploy in the middle of the day or right before we leave for vacation because we are early, our customers are important to us, and we accept that we have not hit our marks yet on the ability to swiftly recover from some downtime so risk is high.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.jakeworth.com/posts/how-to-deliver-code-every-day/",
      "date_published": "2024-06-01T00:48:21Z",
      "date_modified": "2024-06-01T00:48:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "shipping",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-289/",
      "url": "https://go.waylonwalker.com/thought-289/",
      "title": "💭 Be Fast | Jake Worth",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.jakeworth.com/posts/be-fast/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://jakeworth.com/twittercard.png\" alt=\"Be Fast — Great programmers aren’t fast because they’re great. They’re great because they’re fast.\" loading=\"lazy\"/ data-glightbox=\"description: Be Fast — Great programmers aren’t fast because they’re great. They’re great because they’re fast.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBe Fast\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGreat programmers aren’t fast because they’re great. They’re great because they’re fast.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJake Worth · jakeworth.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBe Fast, Practice, Hone your craft.  There’s a lot to be said here about honing your craft for editing text, picking up a few extra WPM, learning vim shortcuts.\u003c/p\u003e\n\u003cp\u003eAlso just build shit.  The more you build new and different things the more not only your text editing will just roll out, your skills to see patterns in code and architecture will flourish.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eRead their bios, and the answer is always no. They loved to play, sure. They had some base talent, typically. But they also invested an absurd amount of time into that skill set.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis! is actually what turned me on to Post Malone.  I remember hearing his story in how he was just known as the guy with a guitar because he was always playing it between class and everything.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.jakeworth.com/posts/be-fast/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://jakeworth.com/twittercard.png\" alt=\"Be Fast — Great programmers aren’t fast because they’re great. They’re great because they’re fast.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBe Fast\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGreat programmers aren’t fast because they’re great. They’re great because they’re fast.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJake Worth \u0026middot; jakeworth.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBe Fast, Practice, Hone your craft.  There's a lot to be said here about honing your craft for editing text, picking up a few extra WPM, learning vim shortcuts.\n\nAlso just build shit.  The more you build new and different things the more not only your text editing will just roll out, your skills to see patterns in code and architecture will flourish.\n\n\u003e Read their bios, and the answer is always no. They loved to play, sure. They had some base talent, typically. But they also invested an absurd amount of time into that skill set.\n\nThis! is actually what turned me on to Post Malone.  I remember hearing his story in how he was just known as the guy with a guitar because he was always playing it between class and everything.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.jakeworth.com/posts/be-fast/",
      "date_published": "2024-06-01T00:38:15Z",
      "date_modified": "2024-06-01T00:38:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalyst",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-eol-dr/",
      "url": "https://go.waylonwalker.com/pypeaday-eol-dr/",
      "title": "⭐ pypeaday eol-dr",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/pypeaday/eol-dr\" 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\"\u003eeol-dr\u003c/a\u003e by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA crowd-sourced guide to help techs help their non-tech spouses / partners / parents / kids when we are at the end-of-life\u003c/p\u003e\n",
      "content_text": "\nJust starred [eol-dr](https://github.com/pypeaday/eol-dr) by [pypeaday](https://github.com/pypeaday). It's an exciting project with a lot to offer.\n\nA crowd-sourced guide to help techs help their non-tech spouses / partners / parents / kids when we are at the end-of-life\n",
      "summary": "Just starred eol-dr by pypeaday. It's an exciting project with a lot to offer.",
      "date_published": "2024-05-31T11:49:42Z",
      "date_modified": "2024-05-31T11:49:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-288/",
      "url": "https://go.waylonwalker.com/thought-288/",
      "title": "💭 Zellij on X: \"POV your sysadmin rigged your terminal to show t...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/Zellij_dev/status/1574675207935107072\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/x.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/x.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis one is too funny.  opening a sixel image in the terminal when logging into prod.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://x.com/Zellij_dev/status/1574675207935107072\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; x.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis one is too funny.  opening a sixel image in the terminal when logging into prod.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://x.com/Zellij_dev/status/1574675207935107072",
      "date_published": "2024-05-30T19:38:23Z",
      "date_modified": "2024-05-30T19:38:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "meme",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-287/",
      "url": "https://go.waylonwalker.com/thought-287/",
      "title": "💭 Text Decoration - Tailwind CSS",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailwindcss.com/docs/text-decoration\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://tailwindcss.com/api/og?path=/docs/text-decoration-line\" alt=\"text-decoration-line - Typography — Utilities for controlling the decoration of text.\" loading=\"lazy\"/ data-glightbox=\"description: text-decoration-line - Typography — Utilities for controlling the decoration of text.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etext-decoration-line - Typography\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUtilities for controlling the decoration of text.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etailwindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTailwind calls strikethrough line-through.  This caught me off guard and took me a minute to find.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eControl how text is decorated with the underline, no-underline, and line-through utilities.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailwindcss.com/docs/text-decoration\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://tailwindcss.com/api/og?path=/docs/text-decoration-line\" alt=\"text-decoration-line - Typography — Utilities for controlling the decoration of text.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etext-decoration-line - Typography\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUtilities for controlling the decoration of text.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etailwindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTailwind calls strikethrough line-through.  This caught me off guard and took me a minute to find.\n\n\u003e Control how text is decorated with the underline, no-underline, and line-through utilities.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tailwindcss.com/docs/text-decoration",
      "date_published": "2024-05-30T18:32:45Z",
      "date_modified": "2024-05-30T18:32:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tailwindcss",
        "css",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-286/",
      "url": "https://go.waylonwalker.com/thought-286/",
      "title": "💭 Digital Gardening for Non-Technical Folks",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maggieappleton.com/nontechnical-gardening\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://maggieappleton.com/og/nontechnical-gardening.png\" alt=\"Digital Gardening for Non-Technical Folks — How to build a digital garden without touching code\" loading=\"lazy\"/ data-glightbox=\"description: Digital Gardening for Non-Technical Folks — How to build a digital garden without touching code\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDigital Gardening for Non-Technical Folks\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to build a digital garden without touching code\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaggieappleton.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMaggie is a fantastic proponent to the digital gardening movement. In this article she proposes 3 ways for someone to start their own digital garden with low friction and no code.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://maggieappleton.com/nontechnical-gardening\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://maggieappleton.com/og/nontechnical-gardening.png\" alt=\"Digital Gardening for Non-Technical Folks — How to build a digital garden without touching code\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDigital Gardening for Non-Technical Folks\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to build a digital garden without touching code\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emaggieappleton.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMaggie is a fantastic proponent to the digital gardening movement. In this article she proposes 3 ways for someone to start their own digital garden with low friction and no code.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://maggieappleton.com/nontechnical-gardening",
      "date_published": "2024-05-30T15:41:59Z",
      "date_modified": "2024-05-30T15:41:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "digital garden",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-285/",
      "url": "https://go.waylonwalker.com/thought-285/",
      "title": "💭 We have a right to repair! with Kyle Wiens, Founder and CEO at...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/podcast/582\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://snap.fly.dev/podcast/582/img\" alt=\"We have a right to repair! with Kyle Wiens, Founder and CEO at iFixit (Changelog Interviews #582) — This week Adam went solo — talking to Kyle Wiens, Founder and CEO at iFixit, about all things Right to Repair. They discussed the latest win here in the US with Oregon passing an electronics Right to Repair law to allow owners the right to get their stuff fixed anywhere as well as limit the anti-repair practices of par...\" loading=\"lazy\"/ data-glightbox=\"description: We have a right to repair! with Kyle Wiens, Founder and CEO at iFixit (Changelog Interviews #582) — This week Adam went solo — talking to Kyle Wiens, Founder and CEO at iFixit, about all things Right to Repair. They discussed the latest win here in the US with Oregon passing an electronics Right to Repair law to allow owners the right to get their stuff fixed anywhere as well as limit the anti-repair practices of par...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWe have a right to repair! with Kyle Wiens, Founder and CEO at iFixit (Changelog Interviews #582)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis week Adam went solo — talking to Kyle Wiens, Founder and CEO at iFixit, about all things Right to Repair. They discussed the latest win here in the US with Oregon passing an electronics Righ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is one of my favorite changelog episodes of all time.  I had no idea all the work that has gone into the right to repair and ifixit.  They talk a lot about apple and its trend to be less repairable from unservicable air pods to serialized components within iphone.\u003c/p\u003e\n\u003cp\u003eA lot of legal talk that was far more interesting that I thought it would be.  Recently winning the right to repair case against John Deere, and creating repairability scores for devices to be placed in stores like energy guide is.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/podcast/582\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/podcast/582/img\" alt=\"We have a right to repair! with Kyle Wiens, Founder and CEO at iFixit (Changelog Interviews #582) — This week Adam went solo — talking to Kyle Wiens, Founder and CEO at iFixit, about all things Right to Repair. They discussed the latest win here in the US with Oregon passing an electronics Right to Repair law to allow owners the right to get their stuff fixed anywhere as well as limit the anti-repair practices of par...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWe have a right to repair! with Kyle Wiens, Founder and CEO at iFixit (Changelog Interviews #582)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis week Adam went solo — talking to Kyle Wiens, Founder and CEO at iFixit, about all things Right to Repair. They discussed the latest win here in the US with Oregon passing an electronics Righ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is one of my favorite changelog episodes of all time.  I had no idea all the work that has gone into the right to repair and ifixit.  They talk a lot about apple and its trend to be less repairable from unservicable air pods to serialized components within iphone.  \n\nA lot of legal talk that was far more interesting that I thought it would be.  Recently winning the right to repair case against John Deere, and creating repairability scores for devices to be placed in stores like energy guide is.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/podcast/582",
      "date_published": "2024-05-30T15:13:14Z",
      "date_modified": "2024-05-30T15:13:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "right-to-repair",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-284/",
      "url": "https://go.waylonwalker.com/thought-284/",
      "title": "💭 Try Out the Latest Linux Gnome DE With DistroBox",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://linuxtldr.com/gnome-de-in-distrobox/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://linuxtldr.com/wp-content/uploads/2024/02/gnome-de-in-distrobox.webp\" alt=\"Try Out the Latest Linux Gnome DE With DistroBox — Discover a step-by-step guide to installing and experiencing the latest Linux Gnome desktop environment with DistroBox.\" loading=\"lazy\"/ data-glightbox=\"description: Try Out the Latest Linux Gnome DE With DistroBox — Discover a step-by-step guide to installing and experiencing the latest Linux Gnome desktop environment with DistroBox.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTry Out the Latest Linux Gnome DE With DistroBox\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDiscover a step-by-step guide to installing and experiencing the latest Linux Gnome desktop environment with DistroBox.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLinux TLDR · linuxtldr.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGet gnome running in distrobox.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://linuxtldr.com/gnome-de-in-distrobox/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://linuxtldr.com/wp-content/uploads/2024/02/gnome-de-in-distrobox.webp\" alt=\"Try Out the Latest Linux Gnome DE With DistroBox — Discover a step-by-step guide to installing and experiencing the latest Linux Gnome desktop environment with DistroBox.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTry Out the Latest Linux Gnome DE With DistroBox\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDiscover a step-by-step guide to installing and experiencing the latest Linux Gnome desktop environment with DistroBox.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLinux TLDR \u0026middot; linuxtldr.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGet gnome running in distrobox.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://linuxtldr.com/gnome-de-in-distrobox/",
      "date_published": "2024-05-26T01:13:05Z",
      "date_modified": "2024-05-26T01:13:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-283/",
      "url": "https://go.waylonwalker.com/thought-283/",
      "title": "💭 STLGears.com | The Free STL Gear Designer",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.stlgears.com/generators/3dprint\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://iili.io/HOllvRI.png\" alt=\"STLGears.com — The Free STL Gear Designer For 3D Printing\" loading=\"lazy\"/ data-glightbox=\"description: STLGears.com — The Free STL Gear Designer For 3D Printing\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSTLGears.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe Free STL Gear Designer For 3D Printing\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estlgears.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty nice gear generator.  I printed a few gears today and it worked great so far.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.stlgears.com/generators/3dprint\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://iili.io/HOllvRI.png\" alt=\"STLGears.com — The Free STL Gear Designer For 3D Printing\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSTLGears.com\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe Free STL Gear Designer For 3D Printing\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estlgears.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a pretty nice gear generator.  I printed a few gears today and it worked great so far.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.stlgears.com/generators/3dprint",
      "date_published": "2024-05-26T00:04:56Z",
      "date_modified": "2024-05-26T00:04:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "3d",
        "printing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-282/",
      "url": "https://go.waylonwalker.com/thought-282/",
      "title": "💭 eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/eraser-dev/eraser?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/cf836c3d4882435d3b37427b6d1e51bc5b568fbedeeb61bc56d2b040d7b2ef55/eraser-dev/eraser\" alt=\"GitHub - eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes — 🧹 Cleaning up images from Kubernetes nodes. Contribute to eraser-dev/eraser development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes — 🧹 Cleaning up images from Kubernetes nodes. Contribute to eraser-dev/eraser development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🧹 Cleaning up images from Kubernetes nodes. Contribute to eraser-dev/eraser development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is kinda sick, its a tool to clean up container images in a k8s cluster.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/eraser-dev/eraser?tab=readme-ov-file\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/cf836c3d4882435d3b37427b6d1e51bc5b568fbedeeb61bc56d2b040d7b2ef55/eraser-dev/eraser\" alt=\"GitHub - eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes — 🧹 Cleaning up images from Kubernetes nodes. Contribute to eraser-dev/eraser development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - eraser-dev/eraser: 🧹 Cleaning up images from Kubernetes nodes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🧹 Cleaning up images from Kubernetes nodes. Contribute to eraser-dev/eraser development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is kinda sick, its a tool to clean up container images in a k8s cluster.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/eraser-dev/eraser?tab=readme-ov-file",
      "date_published": "2024-05-25T01:26:09Z",
      "date_modified": "2024-05-25T01:26:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/eraser-dev-eraser/",
      "url": "https://go.waylonwalker.com/eraser-dev-eraser/",
      "title": "⭐ eraser-dev eraser",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/eraser-dev/eraser\" 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\"\u003eeraser\u003c/a\u003e by \u003ca href=\"https://github.com/eraser-dev\" 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\"\u003eeraser-dev\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003e🧹 Cleaning up images from Kubernetes nodes\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [eraser](https://github.com/eraser-dev/eraser) by [eraser-dev](https://github.com/eraser-dev), and it's truly impressive.\n\n🧹 Cleaning up images from Kubernetes nodes\n",
      "summary": "I recently discovered eraser by eraser-dev, and it's truly impressive.",
      "date_published": "2024-05-25T01:25:18Z",
      "date_modified": "2024-05-25T01:25:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-281/",
      "url": "https://go.waylonwalker.com/thought-281/",
      "title": "💭 Distrobox",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://distrobox.it/usage/distrobox-host-exec/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://distrobox.it/assets/card.webp\" alt=\"Distrobox — Use any linux distribution inside your terminal.\" loading=\"lazy\"/ data-glightbox=\"description: Distrobox — Use any linux distribution inside your terminal.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDistrobox\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUse any linux distribution inside your terminal.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edistrobox.it\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003edistrobox gives you \u003ccode\u003edistrobox-host-exec\u003c/code\u003e to run commands on the host. This is handy to get access to host level clis that you probably wouldn’t want to run from the container like \u003ccode\u003epodman\u003c/code\u003e, \u003ccode\u003edocker\u003c/code\u003e, \u003ccode\u003eflatpak\u003c/code\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDESCRIPTION\ndistrobox-host-exec lets one execute command on the host, while inside of a container.\u003c/p\u003e\n\u003cp\u003eUnder the hood, distrobox-host-exec uses host-spawn a project that lets us execute commands back on the host. If the tool is not found the user will be prompted to install it.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://distrobox.it/usage/distrobox-host-exec/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://distrobox.it/assets/card.webp\" alt=\"Distrobox — Use any linux distribution inside your terminal.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDistrobox\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUse any linux distribution inside your terminal.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edistrobox.it\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ndistrobox gives you `distrobox-host-exec` to run commands on the host. This is handy to get access to host level clis that you probably wouldn't want to run from the container like `podman`, `docker`, `flatpak`.\n\n\n\u003e DESCRIPTION\n\u003e distrobox-host-exec lets one execute command on the host, while inside of a container.\n\u003e \n\u003e Under the hood, distrobox-host-exec uses host-spawn a project that lets us execute commands back on the host. If the tool is not found the user will be prompted to install it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://distrobox.it/usage/distrobox-host-exec/",
      "date_published": "2024-05-22T18:13:13Z",
      "date_modified": "2024-05-22T18:13:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "distrobox",
        "containers",
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-280/",
      "url": "https://go.waylonwalker.com/thought-280/",
      "title": "💭 Are We Anti-Cheat Yet?",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://areweanticheatyet.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/areweanticheatyet.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/areweanticheatyet.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAre We Anti-Cheat Yet?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eareweanticheatyet.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA comprehensive community built index of anti-cheat support for linux very similar to proton, but specific to anticheat support.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://areweanticheatyet.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAre We Anti-Cheat Yet?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eareweanticheatyet.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA comprehensive community built index of anti-cheat support for linux very similar to proton, but specific to anticheat support.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://areweanticheatyet.com/",
      "date_published": "2024-05-22T12:37:55Z",
      "date_modified": "2024-05-22T12:37:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "gaming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-279/",
      "url": "https://go.waylonwalker.com/thought-279/",
      "title": "💭 ublue-os/image-template: Build your own custom Universal Blue ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ublue-os/image-template\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/5568198d6556dd030d855ac42c85c1513ec403d4b2bb9a82e39d917e2ab58809/ublue-os/image-template\" alt=\"GitHub - ublue-os/image-template: Build your own custom Universal Blue Image! — Build your own custom Universal Blue Image! Contribute to ublue-os/image-template development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - ublue-os/image-template: Build your own custom Universal Blue Image! — Build your own custom Universal Blue Image! Contribute to ublue-os/image-template development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - ublue-os/image-template: Build your own custom Universal Blue Image!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBuild your own custom Universal Blue Image! Contribute to ublue-os/image-template development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eublue-os makes a github template for making your own \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo with actions that build out your own personal ublue iso.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ublue-os/image-template\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/5568198d6556dd030d855ac42c85c1513ec403d4b2bb9a82e39d917e2ab58809/ublue-os/image-template\" alt=\"GitHub - ublue-os/image-template: Build your own custom Universal Blue Image! — Build your own custom Universal Blue Image! Contribute to ublue-os/image-template development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - ublue-os/image-template: Build your own custom Universal Blue Image!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBuild your own custom Universal Blue Image! Contribute to ublue-os/image-template development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nublue-os makes a github template for making your own git repo with actions that build out your own personal ublue iso.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/ublue-os/image-template",
      "date_published": "2024-05-22T12:36:10Z",
      "date_modified": "2024-05-22T12:36:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ublue-os-image-template/",
      "url": "https://go.waylonwalker.com/ublue-os-image-template/",
      "title": "⭐ ublue-os image-template",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ublue-os/image-template\" 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\"\u003eimage-template\u003c/a\u003e by \u003ca href=\"https://github.com/ublue-os\" 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\"\u003eublue-os\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBuild your own custom Universal Blue Image!\u003c/p\u003e\n",
      "content_text": "\nThe work on [image-template](https://github.com/ublue-os/image-template) by [ublue-os](https://github.com/ublue-os).\n\nBuild your own custom Universal Blue Image!\n",
      "summary": "The work on image-template by ublue-os.",
      "date_published": "2024-05-22T12:34:45Z",
      "date_modified": "2024-05-22T12:34:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-278/",
      "url": "https://go.waylonwalker.com/thought-278/",
      "title": "💭 ublue-os/obs-studio-portable: OCI container image of OBS Studi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ublue-os/obs-studio-portable\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/de3f8b3d188df1f9264bd60ae096772a8a60cbb5b1b9fedfed67489ea120cb76/ublue-os/obs-studio-portable\" alt=\"GitHub - ublue-os/obs-studio-portable: OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins — OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins - ublue-os/obs-studio-portable\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - ublue-os/obs-studio-portable: OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins — OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins - ublue-os/obs-studio-portable\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - ublue-os/obs-studio-portable: OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOCI container image of OBS Studio that bundles a curated collection of 3rd party plugins - ublue-os/obs-studio-portable\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDistrobox is so interesting and cool, I’ve only recently started realizing how much it can do especially related to hardware and graphics, this is quite an example that runs obs in a distrobox.  I had no idea distrobox would let you connect to cameras and gpus so seemlessly, and give you a gui to work from. And with distrobox you can export so that it just looks like an app on your system.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/ublue-os/obs-studio-portable\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/de3f8b3d188df1f9264bd60ae096772a8a60cbb5b1b9fedfed67489ea120cb76/ublue-os/obs-studio-portable\" alt=\"GitHub - ublue-os/obs-studio-portable: OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins — OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins - ublue-os/obs-studio-portable\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - ublue-os/obs-studio-portable: OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOCI container image of OBS Studio that bundles a curated collection of 3rd party plugins - ublue-os/obs-studio-portable\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDistrobox is so interesting and cool, I've only recently started realizing how much it can do especially related to hardware and graphics, this is quite an example that runs obs in a distrobox.  I had no idea distrobox would let you connect to cameras and gpus so seemlessly, and give you a gui to work from. And with distrobox you can export so that it just looks like an app on your system.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/ublue-os/obs-studio-portable",
      "date_published": "2024-05-21T01:46:59Z",
      "date_modified": "2024-05-21T01:46:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ublue-os-obs-studio-portable/",
      "url": "https://go.waylonwalker.com/ublue-os-obs-studio-portable/",
      "title": "⭐ ublue-os obs-studio-portable",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ublue-os/obs-studio-portable\" 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\"\u003eobs-studio-portable\u003c/a\u003e by \u003ca href=\"https://github.com/ublue-os\" 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\"\u003eublue-os\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eOCI container image of OBS Studio that bundles a curated collection of 3rd party plugins\u003c/p\u003e\n",
      "content_text": "\nThe work on [obs-studio-portable](https://github.com/ublue-os/obs-studio-portable) by [ublue-os](https://github.com/ublue-os).\n\nOCI container image of OBS Studio that bundles a curated collection of 3rd party plugins\n",
      "summary": "The work on obs-studio-portable by ublue-os.",
      "date_published": "2024-05-21T01:44:25Z",
      "date_modified": "2024-05-21T01:44:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/andydunstall-piko/",
      "url": "https://go.waylonwalker.com/andydunstall-piko/",
      "title": "⭐ andydunstall piko",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/andydunstall\" 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\"\u003eandydunstall\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/andydunstall/piko\" 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\"\u003epiko\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eAn open-source alternative to Ngrok, designed to serve production traffic and be simple to host (particularly on Kubernetes)\u003c/p\u003e\n",
      "content_text": "\n[andydunstall](https://github.com/andydunstall) has done a fantastic job with [piko](https://github.com/andydunstall/piko). Highly recommend taking a look.\n\nAn open-source alternative to Ngrok, designed to serve production traffic and be simple to host (particularly on Kubernetes)\n",
      "summary": "andydunstall has done a fantastic job with piko. Highly recommend taking a look.",
      "date_published": "2024-05-16T13:54:42Z",
      "date_modified": "2024-05-16T13:54:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-277/",
      "url": "https://go.waylonwalker.com/thought-277/",
      "title": "💭 How Ahrefs Gets a Billion Dollar-Worth Infrastructure With a 9...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tech.ahrefs.com/how-ahrefs-gets-a-billion-dollar-worth-infrastructure-with-a-90-discount-5edd473b2399\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/tech.ahrefs.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/tech.ahrefs.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etech.ahrefs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e2024 has been a wild year for infra with going “back” to on prem being made popular by \u003ca href=\"https://twitter.com/dhh\"\u003e@dhh\u003c/a\u003e.  Well it looks like ahrefs saw right through the cloud trends an decided to ride the anti cloud train until it came back around to the station.\u003c/p\u003e\n\u003cp\u003eBeing just a bit critical of the article it is impossible to get an apples to apples without actually running something of this scale and spending too much to find out.  I cant imagine raw ec2 and ebs being the cheapest route into aws.  They used no serverless tech in their article, but I digress, because I like this own your shit and build good product train.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhat about People?!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis follow up does dive into the typical gut reaction that people cost a lot of money, you must account for them.  You see when you hire people who are actually good at what they do, and run lean a lot of cost goes away, you have levels of management that disappear, levels of tooling that don’t need to exist, departments of IT don’t need to exist.\u003c/p\u003e\n\u003cp\u003eColo’s are the new hotness, and will continue to grow!\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eI just notices that they didn’t even account for egress, support and taxes, egress costs would make  a difference.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tech.ahrefs.com/how-ahrefs-gets-a-billion-dollar-worth-infrastructure-with-a-90-discount-5edd473b2399\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etech.ahrefs.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n2024 has been a wild year for infra with going \"back\" to on prem being made popular by [@dhh](https://twitter.com/dhh).  Well it looks like ahrefs saw right through the cloud trends an decided to ride the anti cloud train until it came back around to the station.\n\nBeing just a bit critical of the article it is impossible to get an apples to apples without actually running something of this scale and spending too much to find out.  I cant imagine raw ec2 and ebs being the cheapest route into aws.  They used no serverless tech in their article, but I digress, because I like this own your shit and build good product train.\n\n\u003e What about People?!\n\nThis follow up does dive into the typical gut reaction that people cost a lot of money, you must account for them.  You see when you hire people who are actually good at what they do, and run lean a lot of cost goes away, you have levels of management that disappear, levels of tooling that don't need to exist, departments of IT don't need to exist.  \n\nColo's are the new hotness, and will continue to grow!\n\n---\n\nI just notices that they didn't even account for egress, support and taxes, egress costs would make  a difference.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tech.ahrefs.com/how-ahrefs-gets-a-billion-dollar-worth-infrastructure-with-a-90-discount-5edd473b2399",
      "date_published": "2024-05-16T01:38:42Z",
      "date_modified": "2024-05-16T01:38:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infra",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-276/",
      "url": "https://go.waylonwalker.com/thought-276/",
      "title": "💭 Safer Bash Shebang Recipes - Just Programmer's Manual",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://just.systems/man/en/safer-bash-shebang-recipes.html?highlight=pipefail#safer-bash-shebang-recipes\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/just.systems.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/just.systems.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSafer Bash Shebang Recipes - Just Programmer\u0026#39;s Manual\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejust.systems\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWhen using justfiles each line is ran separately from the last, unless you specify the file to be ran by something other than just such as bash.  If you want variables to persist you need to set a shebang.\u003c/p\u003e\n\u003cp\u003eAlso if you are using your script i a way that you want it to exit when it fails you need to set -e and  -o pipefail.  This is critical if you are thinking about using just for production scripts like ci/cd.  I’ve hit too bugs where ci passes, but no artifacts were created issues for this exact reason.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efoo:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e#!/usr/bin/env bash\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eset\u003c/span\u003e -euxo pipefail\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003ehello\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Yo\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$hello\u003c/span\u003e\u003cspan class=\"s2\"\u003e from Bash!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://just.systems/man/en/safer-bash-shebang-recipes.html?highlight=pipefail#safer-bash-shebang-recipes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSafer Bash Shebang Recipes - Just Programmer\u0026#39;s Manual\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejust.systems\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWhen using justfiles each line is ran separately from the last, unless you specify the file to be ran by something other than just such as bash.  If you want variables to persist you need to set a shebang.\n\nAlso if you are using your script i a way that you want it to exit when it fails you need to set -e and  -o pipefail.  This is critical if you are thinking about using just for production scripts like ci/cd.  I've hit too bugs where ci passes, but no artifacts were created issues for this exact reason.\n\n``` bash\nfoo:\n  #!/usr/bin/env bash\n  set -euxo pipefail\n  hello='Yo'\n  echo \"$hello from Bash!\"\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://just.systems/man/en/safer-bash-shebang-recipes.html?highlight=pipefail#safer-bash-shebang-recipes",
      "date_published": "2024-05-14T22:29:49Z",
      "date_modified": "2024-05-14T22:29:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "just",
        "justfile",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-275/",
      "url": "https://go.waylonwalker.com/thought-275/",
      "title": "💭 Justfile Cheat Sheet by linux_china - Download free from Cheat...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cheatography.com/linux-china/cheat-sheets/justfile/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://media.cheatography.com/storage/thumb/linux-china_justfile.600.jpg\" alt=\"Justfile Cheat Sheet — Just is a command runner https://github.com/casey/just\" loading=\"lazy\"/ data-glightbox=\"description: Justfile Cheat Sheet — Just is a command runner https://github.com/casey/just\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJustfile Cheat Sheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eJust is a command runner https://github.com/casey/just\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCheatography · cheatography.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a dope ass cheat sheet for justfiles.  It’s filled with good examples that are short and to the point, probably all from the docs, but anyways I need to do some like this for myself.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cheatography.com/linux-china/cheat-sheets/justfile/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://media.cheatography.com/storage/thumb/linux-china_justfile.600.jpg\" alt=\"Justfile Cheat Sheet — Just is a command runner https://github.com/casey/just\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJustfile Cheat Sheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eJust is a command runner https://github.com/casey/just\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCheatography \u0026middot; cheatography.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a dope ass cheat sheet for justfiles.  It's filled with good examples that are short and to the point, probably all from the docs, but anyways I need to do some like this for myself.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://cheatography.com/linux-china/cheat-sheets/justfile/",
      "date_published": "2024-05-14T22:17:30Z",
      "date_modified": "2024-05-14T22:17:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cheatsheet",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-274/",
      "url": "https://go.waylonwalker.com/thought-274/",
      "title": "💭 A quote from Tim Paul",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/May/13/tim-paul/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/simonwillison.net.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/simonwillison.net.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Tim Paul\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’m no developer, but I got the AI part working in about an hour. What took longer was the other stuff: identifying the problem, designing and building the UI, setting …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn this Tim Paul quote finishes hard and such a good point.  None of the stuff around llms just work.  Good ui’s,  front end, back end, infrastructure, product.  All these things still need to exist, and in fact for ai to be good we need to still go hard on them otherwise everything will die in a heaping pile of \u003ca href=\"https://simonwillison.net/2024/May/8/slop/\" 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\"\u003eai slop\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI’m no developer, but I got the AI part working in about an hour.\u003c/p\u003e\n\u003cp\u003eWhat took longer was the other stuff: identifying the problem, designing and building the UI, setting up the templating, routes and data architecture.\u003c/p\u003e\n\u003cp\u003eIt reminded me that, in order to capitalise on the potential of AI technologies, we need to really invest in the other stuff too, especially data infrastructure.\u003c/p\u003e\n\u003cp\u003eIt would be ironic, and a huge shame, if AI hype sucked all the investment out of those things.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e— \u003ca href=\"https://www.timpaul.co.uk/posts/using-ai-to-generate-web-forms-from-pdfs/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.timpaul.co.uk.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.timpaul.co.uk.png\" class=\"has-avatar  has-avatar-before\"\u003eTim Paul\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2024/May/13/tim-paul/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eA quote from Tim Paul\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI’m no developer, but I got the AI part working in about an hour. What took longer was the other stuff: identifying the problem, designing and building the UI, setting …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn this Tim Paul quote finishes hard and such a good point.  None of the stuff around llms just work.  Good ui's,  front end, back end, infrastructure, product.  All these things still need to exist, and in fact for ai to be good we need to still go hard on them otherwise everything will die in a heaping pile of [ai slop](https://simonwillison.net/2024/May/8/slop/)\n\n\u003e I’m no developer, but I got the AI part working in about an hour.\n\u003e\n\u003e What took longer was the other stuff: identifying the problem, designing and building the UI, setting up the templating, routes and data architecture.\n\u003e\n\u003e It reminded me that, in order to capitalise on the potential of AI technologies, we need to really invest in the other stuff too, especially data infrastructure.\n\u003e\n\u003e It would be ironic, and a huge shame, if AI hype sucked all the investment out of those things.\n\n— [Tim Paul](https://www.timpaul.co.uk/posts/using-ai-to-generate-web-forms-from-pdfs/)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2024/May/13/tim-paul/",
      "date_published": "2024-05-14T02:21:17Z",
      "date_modified": "2024-05-14T02:21:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-273/",
      "url": "https://go.waylonwalker.com/thought-273/",
      "title": "💭 PopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://popsql.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"//images.ctfassets.net/iv1sg9nibjwl/L9cy5FXJHXiAvZABkKvwa/5308dd58add6c033ac404c556010f445/homepage_og.jpg\" alt=\"PopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos — PopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\" loading=\"lazy\"/ data-glightbox=\"description: PopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos — PopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePopSQL · popsql.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ePopSql looks like a very innovative product to bring collaboration to data exploration and visualization in a way you would expect from something like vscode liveshare.  This looks far more appealing than a traditional BI data tool.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://popsql.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"//images.ctfassets.net/iv1sg9nibjwl/L9cy5FXJHXiAvZABkKvwa/5308dd58add6c033ac404c556010f445/homepage_og.jpg\" alt=\"PopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos — PopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePopSQL - Collaborative SQL Editor - Bring Order to SQL Chaos\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\n\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePopSQL \u0026middot; popsql.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nPopSql looks like a very innovative product to bring collaboration to data exploration and visualization in a way you would expect from something like vscode liveshare.  This looks far more appealing than a traditional BI data tool.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://popsql.com/",
      "date_published": "2024-05-12T19:29:58Z",
      "date_modified": "2024-05-12T19:29:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-272/",
      "url": "https://go.waylonwalker.com/thought-272/",
      "title": "💭 Pricing | PopSQL",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://popsql.com/pricing\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://popsql.com/static/images/og/pricing.jpg\" alt=\"Pricing | PopSQL — PopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\" loading=\"lazy\"/ data-glightbox=\"description: Pricing | PopSQL — PopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePricing | PopSQL\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePopSQL · popsql.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003einteresting pricing model from popsql (pronounces Popsicle).  At a glance you pay for data retention, want the abiltiy to recall all the queries you ran within the last year, run at a higher frequency, you jump a pricing tier.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://popsql.com/pricing\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://popsql.com/static/images/og/pricing.jpg\" alt=\"Pricing | PopSQL — PopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePricing | PopSQL\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePopSQL is a unified SQL collaboration workspace that connects everyone in the data analysis process so you can obtain better insights by asking the right questions, together.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePopSQL \u0026middot; popsql.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ninteresting pricing model from popsql (pronounces Popsicle).  At a glance you pay for data retention, want the abiltiy to recall all the queries you ran within the last year, run at a higher frequency, you jump a pricing tier.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://popsql.com/pricing",
      "date_published": "2024-05-12T19:27:05Z",
      "date_modified": "2024-05-12T19:27:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-271/",
      "url": "https://go.waylonwalker.com/thought-271/",
      "title": "💭 Dax Raad - SST, Build modern full-stack applications on AWS wi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"V_2OLtsD0N8\" title=\"Dax Raad - SST, Build modern full-stack applications on AWS with Ease\" playlabel=\"Play: Dax Raad - SST, Build modern full-stack applications on AWS with Ease\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003esuch a sick episode with dax.\u003c/p\u003e\n\u003cp\u003eSST’s free tier will be free as long as aws allows a free tier, their free tier literally costs them nothing.\u003c/p\u003e\n\u003cp\u003eThey talked about keeping SST small, the limitations that brings, but also the number of problems that just go away when you only have 3 people building.  Lots of process disappears, everyone can trust everyone, no one needs to wait for approval, everyone is their own PM and just builds cool shit.  They don’t have to worry about big costs and making payroll because they are profitable so much higher than their costs.\u003c/p\u003e\n\u003cp\u003eIf they can get through phase one of just being the go platform for a very specific audience of users, and gain marketshare, the ideas of offerings on top of this are endless.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"V_2OLtsD0N8\" title=\"Dax Raad - SST, Build modern full-stack applications on AWS with Ease\" playlabel=\"Play: Dax Raad - SST, Build modern full-stack applications on AWS with Ease\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nsuch a sick episode with dax.\n\nSST's free tier will be free as long as aws allows a free tier, their free tier literally costs them nothing.\n\nThey talked about keeping SST small, the limitations that brings, but also the number of problems that just go away when you only have 3 people building.  Lots of process disappears, everyone can trust everyone, no one needs to wait for approval, everyone is their own PM and just builds cool shit.  They don't have to worry about big costs and making payroll because they are profitable so much higher than their costs.\n\nIf they can get through phase one of just being the go platform for a very specific audience of users, and gain marketshare, the ideas of offerings on top of this are endless.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=V_2OLtsD0N8\u0026t=4604",
      "date_published": "2024-05-12T19:24:28Z",
      "date_modified": "2024-05-12T19:24:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sst",
        "serverless",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-270/",
      "url": "https://go.waylonwalker.com/thought-270/",
      "title": "💭 Install Pokemon TCG Live on Steam Deck - Installation Guide - ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zfN4hk7FelI\" title=\"Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen\" playlabel=\"Play: Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI had no idea that you could just drop an msi installer right in steam.  This worked for me, and was much easier to install pokemon tcg live in 05-2024 on ubuntu 22-04.  I added the msi to steam from my downloads, hit start, failed right away like he said it would.  changed compatability to proton experimental, and it opened right up.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDownload the official installer from pokemon tcg\u003c/li\u003e\n\u003cli\u003eAdd non steam game\u003c/li\u003e\n\u003cli\u003eclick show all file types\u003c/li\u003e\n\u003cli\u003enavigate to downloaded msi\u003c/li\u003e\n\u003cli\u003eclick gear icon \u0026gt; compatability \u0026gt; proton experimental\u003c/li\u003e\n\u003cli\u003eclick play\u003c/li\u003e\n\u003cli\u003eprofit\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"zfN4hk7FelI\" title=\"Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen\" playlabel=\"Play: Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI had no idea that you could just drop an msi installer right in steam.  This worked for me, and was much easier to install pokemon tcg live in 05-2024 on ubuntu 22-04.  I added the msi to steam from my downloads, hit start, failed right away like he said it would.  changed compatability to proton experimental, and it opened right up.\n\n* Download the official installer from pokemon tcg\n* Add non steam game\n* click show all file types\n* navigate to downloaded msi\n* click gear icon \u003e compatability \u003e proton experimental\n* click play\n* profit\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=zfN4hk7FelI",
      "date_published": "2024-05-11T13:27:19Z",
      "date_modified": "2024-05-11T13:27:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/starfederation-datastar/",
      "url": "https://go.waylonwalker.com/starfederation-datastar/",
      "title": "⭐ starfederation datastar",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/starfederation/datastar\" 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\"\u003edatastar\u003c/a\u003e by \u003ca href=\"https://github.com/starfederation\" 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\"\u003estarfederation\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe hypermedia framework.\u003c/p\u003e\n",
      "content_text": "\nThe work on [datastar](https://github.com/starfederation/datastar) by [starfederation](https://github.com/starfederation).\n\nThe hypermedia framework.\n",
      "summary": "The work on datastar by starfederation.",
      "date_published": "2024-05-10T19:07:04Z",
      "date_modified": "2024-05-10T19:07:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-269/",
      "url": "https://go.waylonwalker.com/thought-269/",
      "title": "💭 Fields - Pydantic",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.pydantic.dev/2.7/concepts/fields/#field-representation\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pydantic.dev/docs/og/validation/2.7/concepts/fields.png\" alt=\"Fields\" loading=\"lazy\"/ data-glightbox=\"description: Fields\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFields\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePydantic Docs · docs.pydantic.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode\u003eexclude=True\u003c/code\u003e and \u003ccode\u003erepr=False\u003c/code\u003e is a good pydantic combination for secret attributes such as user passwords, or hashed passwords.  exclude keeps it out of model_dumps, and repr keeps it out of the logs.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003erepr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003erepr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;John\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e42\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; name=\u0026#39;John\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.pydantic.dev/2.7/concepts/fields/#field-representation\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pydantic.dev/docs/og/validation/2.7/concepts/fields.png\" alt=\"Fields\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFields\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePydantic Docs \u0026middot; docs.pydantic.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n`exclude=True` and `repr=False` is a good pydantic combination for secret attributes such as user passwords, or hashed passwords.  exclude keeps it out of model_dumps, and repr keeps it out of the logs.\n\n``` python\nfrom pydantic import BaseModel, Field\n\n\nclass User(BaseModel):\n    name: str = Field(repr=True)  \n    age: int = Field(repr=False)\n\n\nuser = User(name='John', age=42)\nprint(user)\n#\u003e name='John'\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.pydantic.dev/2.7/concepts/fields/#field-representation",
      "date_published": "2024-05-09T20:28:27Z",
      "date_modified": "2024-05-09T20:28:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "pydantic",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/just-picker/",
      "url": "https://go.waylonwalker.com/just-picker/",
      "title": "just picker",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/casey/just\" 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\"\u003e\u003ccode\u003ejust\u003c/code\u003e\u003c/a\u003e has been by go to tool for saving\ncommands in a way that I can replay them and have team members replay them\nwithout relying on the shell history of any given machine.  This is my go to\ndefault step, it lets you pick a just command to run with a fuzzy picker.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefault:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  @just --list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n[`just`](https://github.com/casey/just) has been by go to tool for saving\ncommands in a way that I can replay them and have team members replay them\nwithout relying on the shell history of any given machine.  This is my go to\ndefault step, it lets you pick a just command to run with a fuzzy picker.\n\n``` bash\ndefault:\n  @just --list\n```\n",
      "summary": "has been by go to tool for saving commands in a way that I can replay them and have team members replay them without relying on the shell history of any...",
      "date_published": "2024-05-08T20:48:23Z",
      "date_modified": "2024-05-08T20:48:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-268/",
      "url": "https://go.waylonwalker.com/thought-268/",
      "title": "💭 Hatch v1.10.0 - Hatch",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hatch.pypa.io/latest/blog/2024/05/02/hatch-v1100/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHatch v1.10.0 - Hatch\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehatch.pypa.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHatch be flyin.\u003c/p\u003e\n\u003cp\u003eThis new release of hatch includes support for the new package installer \u003ccode\u003euv\u003c/code\u003e which is just mind blowing fast compared to anything else we have in python right now.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eenvs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003einstaller\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;uv\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe other features are cool too, check them out.  I’ll probably be using the test runner, but I’ve been waiting for the uv support since uv launched.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hatch.pypa.io/latest/blog/2024/05/02/hatch-v1100/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHatch v1.10.0 - Hatch\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehatch.pypa.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHatch be flyin.\n\nThis new release of hatch includes support for the new package installer `uv` which is just mind blowing fast compared to anything else we have in python right now.\n\n``` toml\n[tool.hatch.envs.default]\ninstaller = \"uv\"\n```\n\nThe other features are cool too, check them out.  I'll probably be using the test runner, but I've been waiting for the uv support since uv launched.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hatch.pypa.io/latest/blog/2024/05/02/hatch-v1100/",
      "date_published": "2024-05-02T14:06:57Z",
      "date_modified": "2024-05-02T14:06:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-267/",
      "url": "https://go.waylonwalker.com/thought-267/",
      "title": "💭 Using journalctl - The Ultimate Guide To Logging",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.loggly.com/ultimate-guide/using-journalctl/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.loggly.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.loggly.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eloggly.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI had a boot issue on my sons fresh ubuntu 24.04 install and journalctl came in clutch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ejournalctl -p \u003cspan class=\"m\"\u003e3\u003c/span\u003e -xb \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003e-p 3 gives me priority 3\u003c/li\u003e\n\u003cli\u003e-x gives me extra catalog information when available\u003c/li\u003e\n\u003cli\u003e-b gives me the current boot.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.loggly.com/ultimate-guide/using-journalctl/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eloggly.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\n\nI had a boot issue on my sons fresh ubuntu 24.04 install and journalctl came in clutch.\n\n``` bash\njournalctl -p 3 -xb \n```\n\n* -p 3 gives me priority 3\n* -x gives me extra catalog information when available\n* -b gives me the current boot.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.loggly.com/ultimate-guide/using-journalctl/",
      "date_published": "2024-05-02T01:20:51Z",
      "date_modified": "2024-05-02T01:20:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-266/",
      "url": "https://go.waylonwalker.com/thought-266/",
      "title": "💭 Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : g...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2006590\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/@@/launchpad-og-image.png\" alt=\"Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu — Suddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.\nI tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).\n\u0026lt;p\u0026gt;ProblemType: Bug\nDistroRelease: Ubuntu 22.10\nPackage: xorg 1:7.7+23ubuntu2\nProcVersionSignature: Ubuntu 5.19.0-29.30-generic 5.19.17\nUname: Linux 5.19.0-29-generic x86_64\nNonfreeKernelModules: nvidia_modeset nvidia\n.proc.driver.nvidia.capabilities.gpu0: Error: path was not a regular file.\n.proc.driver.nvidia.capabilities…\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu — Suddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.\nI tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).\n\u0026lt;p\u0026gt;ProblemType: Bug\nDistroRelease: Ubuntu 22.10\nPackage: xorg 1:7.7+23ubuntu2\nProcVersionSignature: Ubuntu 5.19.0-29.30-generic 5.19.17\nUname: Linux 5.19.0-29-generic x86_64\nNonfreeKernelModules: nvidia_modeset nvidia\n.proc.driver.nvidia.capabilities.gpu0: Error: path was not a regular file.\n.proc.driver.nvidia.capabilities…\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eBug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eSuddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.\nI tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).\u003cp\u003e\u003c/p\u003e\n\u003cp\u003eProblemType: Bug\nDistr…\u003c/p\u003e\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eLaunchpad · bugs.launchpad.net\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThis Thread saved my son’s ubuntu 24.04 install.\nHis was failing to start with the following error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGdm: GdmSession: no session desktop files installed, aborting...\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://twitter.com/_WaylonWalker/status/1785825677079441482\"\u003ehttps://twitter.com/_WaylonWalker/status/1785825677079441482\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install --reinstall ubuntu-session\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2006590\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/@@/launchpad-og-image.png\" alt=\"Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu — Suddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.\nI tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).\n\nProblemType: Bug\nDistroRelease: Ubuntu 22.10\nPackage: xorg 1:7.7+23ubuntu2\nProcVersionSignature: Ubuntu 5.19.0-29.30-generic 5.19.17\nUname: Linux 5.19.0-29-generic x86_64\nNonfreeKernelModules: nvidia_modeset nvidia\n.proc.driver.nvidia.capabilities.gpu0: Error: path was not a regular file.\n.proc.driver.nvidia.capabilities...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSuddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.\nI tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).\n\nProblemType: Bug\nDistr...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLaunchpad \u0026middot; bugs.launchpad.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis Thread saved my son's ubuntu 24.04 install.\nHis was failing to start with the following error.\n\n``` bash\nGdm: GdmSession: no session desktop files installed, aborting...\n```\n\nhttps://twitter.com/_WaylonWalker/status/1785825677079441482\n\n\n``` bash\nsudo apt install --reinstall ubuntu-session\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2006590",
      "date_published": "2024-05-02T00:54:02Z",
      "date_modified": "2024-05-02T00:54:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "ubuntu",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-265/",
      "url": "https://go.waylonwalker.com/thought-265/",
      "title": "💭 Alir3z4/html2text: Convert HTML to Markdown-formatted text.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/Alir3z4/html2text\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/5029258963a688758e88dbdf68b8fdaeab1f0108974579b18bbdeb4230699ed9/Alir3z4/html2text\" alt=\"GitHub - Alir3z4/html2text: Convert HTML to Markdown-formatted text. — Convert HTML to Markdown-formatted text. Contribute to Alir3z4/html2text development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - Alir3z4/html2text: Convert HTML to Markdown-formatted text. — Convert HTML to Markdown-formatted text. Contribute to Alir3z4/html2text development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - Alir3z4/html2text: Convert HTML to Markdown-formatted text.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eConvert HTML to Markdown-formatted text. Contribute to Alir3z4/html2text development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSuper neat tool to convert \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 to markdown\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ehtml2text\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml2text\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml2text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;p\u0026gt;\u0026lt;strong\u0026gt;Zed\u0026#39;s\u0026lt;/strong\u0026gt; dead baby, \u0026lt;em\u0026gt;Zed\u0026#39;s\u0026lt;/em\u0026gt; dead.\u0026lt;/p\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eZed\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;s** dead baby, _Zed\u0026#39;\u003c/span\u003e\u003cspan class=\"n\"\u003es_\u003c/span\u003e \u003cspan class=\"n\"\u003edead\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt even plays nicely with rich.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.markdown\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkdown\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.console\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ehtml2text\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emd\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkdown\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml2text\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml2text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;p\u0026gt;\u0026lt;strong\u0026gt;Zed\u0026#39;s\u0026lt;/strong\u0026gt; dead baby, \u0026lt;em\u0026gt;Zed\u0026#39;s\u0026lt;/em\u0026gt; dead.\u0026lt;/p\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emd\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/Alir3z4/html2text\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/5029258963a688758e88dbdf68b8fdaeab1f0108974579b18bbdeb4230699ed9/Alir3z4/html2text\" alt=\"GitHub - Alir3z4/html2text: Convert HTML to Markdown-formatted text. — Convert HTML to Markdown-formatted text. Contribute to Alir3z4/html2text development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - Alir3z4/html2text: Convert HTML to Markdown-formatted text.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eConvert HTML to Markdown-formatted text. Contribute to Alir3z4/html2text development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSuper neat tool to convert html to markdown\n\n``` python\n\u003e\u003e\u003e import html2text\n\u003e\u003e\u003e\n\u003e\u003e\u003e print(html2text.html2text(\"\u003cp\u003e\u003cstrong\u003eZed's\u003c/strong\u003e dead baby, \u003cem\u003eZed's\u003c/em\u003e dead.\u003c/p\u003e\"))\n**Zed's** dead baby, _Zed's_ dead.\n```\n\nIt even plays nicely with rich.\n\n``` python\nfrom rich.markdown import Markdown\nfrom rich.console import Console\nimport html2text\nconsole = Console()\nmd = Markdown(html2text.html2text(\"\u003cp\u003e\u003cstrong\u003eZed's\u003c/strong\u003e dead baby, \u003cem\u003eZed's\u003c/em\u003e dead.\u003c/p\u003e\"))\nconsole.print(md)\n``` \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/Alir3z4/html2text",
      "date_published": "2024-05-01T17:50:26Z",
      "date_modified": "2024-05-01T17:50:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-264/",
      "url": "https://go.waylonwalker.com/thought-264/",
      "title": "💭 I Interviewed Uncle Bob - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"UBXXw2JSloo\" title=\"I Interviewed Uncle Bob\" playlabel=\"Play: I Interviewed Uncle Bob\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eFantastic interview with Uncle Bob, really it was more of a 2 way conversation.  So many of Uncle Bob’s takes have been taken out of context, its cool to hear some of the well actuallys, and the experience behind some of the reasoning.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"UBXXw2JSloo\" title=\"I Interviewed Uncle Bob\" playlabel=\"Play: I Interviewed Uncle Bob\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nFantastic interview with Uncle Bob, really it was more of a 2 way conversation.  So many of Uncle Bob's takes have been taken out of context, its cool to hear some of the well actuallys, and the experience behind some of the reasoning.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=UBXXw2JSloo",
      "date_published": "2024-05-01T02:34:03Z",
      "date_modified": "2024-05-01T02:34:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "programming",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-263/",
      "url": "https://go.waylonwalker.com/thought-263/",
      "title": "💭 How an empty S3 bucket can make your AWS bill explode | by Mac...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/medium.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/medium.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emedium.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eImagine waking up to a $1,300 for running an example project!  That sounds like peanuts for a cloud bill but for an individual trying to learn that hits my monthly budget real hard.\u003c/p\u003e\n\u003cp\u003eThat’s what happened to Marciej, make sure you check out the full article and give them a 👏 on Medium if you have an account.\u003c/p\u003e\n\u003cp\u003eThe more I see things come out about aws, the more it makes me sick, and confirm my feelings that I cannot possibly use them for a side project without some real $$ planning to come out of it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYes, S3 charges for unauthorized requests (4xx) as well[1]. That’s expected behavior.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThey offer no DDOS protection against 4xx or 5xx requests against your bucket.  Absolutely bonkers that you have ZERO control over this.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003eThis response just feels absolutely gross.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI notified the AWS security team. I suggested that they restrict the unfortunate S3 bucket name to protect their customers from unexpected charges, and to protect the impacted companies from data leaks. But they were unwilling to address misconfigurations of third-party products.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIt sounds like this guy followed some default instructions for an example site, HOW MANY OTHERS have done this or will do this? And AWS has no response other than to take thier money.\u003c/p\u003e\n\u003cp\u003eAfter contacting them he was able to get it cancelled, but this is no guarantee.  We’ve seen other cloud vendors stick users like this with a few thousand dollar bills after cutting their bill to 5% of the original.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAWS was kind enough to cancel my S3 bill. However, they emphasized that this was done as an exception.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e2024 is wild on the cloud hosting front, own your shit or be careful.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emedium.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nImagine waking up to a $1,300 for running an example project!  That sounds like peanuts for a cloud bill but for an individual trying to learn that hits my monthly budget real hard.\n\nThat's what happened to Marciej, make sure you check out the full article and give them a 👏 on Medium if you have an account.\n\nThe more I see things come out about aws, the more it makes me sick, and confirm my feelings that I cannot possibly use them for a side project without some real $$ planning to come out of it.\n\n\u003e Yes, S3 charges for unauthorized requests (4xx) as well[1]. That’s expected behavior.\n\nThey offer no DDOS protection against 4xx or 5xx requests against your bucket.  Absolutely bonkers that you have ZERO control over this.\n\n---\n\nThis response just feels absolutely gross.\n\n\u003e I notified the AWS security team. I suggested that they restrict the unfortunate S3 bucket name to protect their customers from unexpected charges, and to protect the impacted companies from data leaks. But they were unwilling to address misconfigurations of third-party products.\n\nIt sounds like this guy followed some default instructions for an example site, HOW MANY OTHERS have done this or will do this? And AWS has no response other than to take thier money.\n\nAfter contacting them he was able to get it cancelled, but this is no guarantee.  We've seen other cloud vendors stick users like this with a few thousand dollar bills after cutting their bill to 5% of the original.\n\n\u003e AWS was kind enough to cancel my S3 bill. However, they emphasized that this was done as an exception.\n\n2024 is wild on the cloud hosting front, own your shit or be careful.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1",
      "date_published": "2024-05-01T02:31:56Z",
      "date_modified": "2024-05-01T02:31:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "aws",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-262/",
      "url": "https://go.waylonwalker.com/thought-262/",
      "title": "💭 Media Types",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.iana.org/assignments/media-types/media-types.xhtml#text\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.iana.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.iana.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMedia Types\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eiana.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA full list of standard \u003ccode\u003eAccept\u003c/code\u003e types.\u003c/p\u003e\n\u003cp\u003eThis is a handy reference.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.iana.org/assignments/media-types/media-types.xhtml#text\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMedia Types\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eiana.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA full list of standard `Accept` types.\n\nThis is a handy reference.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.iana.org/assignments/media-types/media-types.xhtml#text",
      "date_published": "2024-04-30T18:15:43Z",
      "date_modified": "2024-04-30T18:15:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-260/",
      "url": "https://go.waylonwalker.com/thought-260/",
      "title": "💭 Network Types - Pydantic",
      "content_html": "\u003cfigure\u003e\n![https://docs.pydantic.dev/2.7/api/networks/\u003ca href=\"/tags/pydantic/\" class=\"hashtag-tag\" data-tag=\"pydantic\" data-count=\"3\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#pydantic\u003c/a\u003e.networks.EmailStr](/static/https://docs.pydantic.dev/2.7/api/networks/\u003ca href=\"/tags/pydantic/\" class=\"hashtag-tag\" data-tag=\"pydantic\" data-count=\"3\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#pydantic\u003c/a\u003e.networks.EmailStr)\n\u003c/figure\u003e\n\u003cp\u003epydantic has a nice built in email validator \u003ccode\u003eEmailStr\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIt requires an optional pydantic dependency\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install email-validator\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen you can validate email addresses.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eEmailStr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eEmailStr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;contact@mail.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; email=\u0026#39;contact@mail.com\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://docs.pydantic.dev/2.7/api/networks/\u003ca href=\"/tags/pydantic/\" class=\"hashtag-tag\" data-tag=\"pydantic\" data-count=3 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#pydantic\u003c/a\u003e.networks.EmailStr](/static/https://docs.pydantic.dev/2.7/api/networks/\u003ca href=\"/tags/pydantic/\" class=\"hashtag-tag\" data-tag=\"pydantic\" data-count=3 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#pydantic\u003c/a\u003e.networks.EmailStr)\n\npydantic has a nice built in email validator `EmailStr`\n\nIt requires an optional pydantic dependency \n\n``` bash\npip install email-validator\n```\n\nThen you can validate email addresses.\n\n``` python\nfrom pydantic import BaseModel, EmailStr\n\nclass Model(BaseModel):\n    email: EmailStr\n\nprint(Model(email='contact@mail.com'))\n#\u003e email='contact@mail.com'\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.pydantic.dev/2.7/api/networks/#pydantic.networks.EmailStr",
      "date_published": "2024-04-30T18:12:26Z",
      "date_modified": "2024-04-30T18:12:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-259/",
      "url": "https://go.waylonwalker.com/thought-259/",
      "title": "💭 rich.panel — Rich 13.6.0 documentation",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://rich.readthedocs.io/en/stable/reference/panel.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://rich.readthedocs.io/en/stable/reference/panel.html\" alt=\"https://rich.readthedocs.io/en/stable/reference/panel.html\"/ data-glightbox=\"description: https://rich.readthedocs.io/en/stable/reference/panel.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is my go to rich response container for clis written in python.  It creates a nice box around the content on the screen and provides some nice separation in the output.  It can be overdone, but comes in clutch when looking for that print statement in a long output.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://rich.readthedocs.io/en/stable/reference/panel.html](/static/https://rich.readthedocs.io/en/stable/reference/panel.html)\n\nThis is my go to rich response container for clis written in python.  It creates a nice box around the content on the screen and provides some nice separation in the output.  It can be overdone, but comes in clutch when looking for that print statement in a long output.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://rich.readthedocs.io/en/stable/reference/panel.html",
      "date_published": "2024-04-30T18:10:37Z",
      "date_modified": "2024-04-30T18:10:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "terminal",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-258/",
      "url": "https://go.waylonwalker.com/thought-258/",
      "title": "💭 Handling Errors - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/handling-errors/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/handling-errors.png\" alt=\"Handling Errors - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Handling Errors - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHandling Errors - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis page shows how to customize your \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 errors.  I found this very useful to setup common templates so that I can return the same 404’s both programatically and by default, so it all looks the same to the end user.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.responses\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJSONResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"ne\"\u003eException\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.exception_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eunicorn_exception_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eJSONResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e418\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Oops! \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eexc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e did something. There goes a rainbow...\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/unicorns/\u003c/span\u003e\u003cspan class=\"si\"\u003e{name}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eread_unicorn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;yolo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;unicorn_name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003chr/\u003e\n\u003cp\u003eThis post sat in draft for months.  I stumbled upon it again and found great success returning good error messages based on user preferences.  the default remains json, but if a user requests \u003ccode\u003etext/html\u003c/code\u003e it will be an \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 response, and text for \u003ccode\u003eapplication/rtf\u003c/code\u003e or \u003ccode\u003etext/plain\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/handling-errors/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/handling-errors.png\" alt=\"Handling Errors - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHandling Errors - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis page shows how to customize your fastapi errors.  I found this very useful to setup common templates so that I can return the same 404's both programatically and by default, so it all looks the same to the end user.\n\n\n``` python\nfrom fastapi import FastAPI, Request\nfrom fastapi.responses import JSONResponse\n\n\nclass UnicornException(Exception):\n    def __init__(self, name: str):\n        self.name = name\n\n\napp = FastAPI()\n\n\n@app.exception_handler(UnicornException)\nasync def unicorn_exception_handler(request: Request, exc: UnicornException):\n    return JSONResponse(\n        status_code=418,\n        content={\"message\": f\"Oops! {exc.name} did something. There goes a rainbow...\"},\n    )\n\n\n@app.get(\"/unicorns/{name}\")\nasync def read_unicorn(name: str):\n    if name == \"yolo\":\n        raise UnicornException(name=name)\n    return {\"unicorn_name\": name}\n```\n\n---\n\n\nThis post sat in draft for months.  I stumbled upon it again and found great success returning good error messages based on user preferences.  the default remains json, but if a user requests `text/html` it will be an html response, and text for `application/rtf` or `text/plain`\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/handling-errors/",
      "date_published": "2024-04-30T18:08:35Z",
      "date_modified": "2024-04-30T18:08:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-257/",
      "url": "https://go.waylonwalker.com/thought-257/",
      "title": "💭 Creating SSH Apps with Charm Wish and Laravel Prompts | Joe Ta...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.joe.codes/creating-ssh-apps-with-charm-wish-and-laravel-prompts\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://blog.joe.codes/img/asset/YXNzZXRzL2NoYXJtLXdpc2guanBn?p=seo_pro_og\u0026amp;s=fa781be7bdd202e6f43d603e96ae6959\" alt=\"Creating SSH Apps with Charm Wish and Laravel Prompts — Building PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and use your CLI app.\" loading=\"lazy\"/ data-glightbox=\"description: Creating SSH Apps with Charm Wish and Laravel Prompts — Building PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and use your CLI app.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCreating SSH Apps with Charm Wish and Laravel Prompts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBuilding PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and us...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJoe Tannenbaum · blog.joe.codes\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJoe has a sick cli.labs site for deploying tui applications.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh cli.lab.joe.codes\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.joe.codes/creating-ssh-apps-with-charm-wish-and-laravel-prompts\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://blog.joe.codes/img/asset/YXNzZXRzL2NoYXJtLXdpc2guanBn?p=seo_pro_og\u0026amp;s=fa781be7bdd202e6f43d603e96ae6959\" alt=\"Creating SSH Apps with Charm Wish and Laravel Prompts — Building PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and use your CLI app.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCreating SSH Apps with Charm Wish and Laravel Prompts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBuilding PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and us...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJoe Tannenbaum \u0026middot; blog.joe.codes\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJoe has a sick cli.labs site for deploying tui applications.\n\n``` bash\nssh cli.lab.joe.codes\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.joe.codes/creating-ssh-apps-with-charm-wish-and-laravel-prompts",
      "date_published": "2024-04-30T18:05:21Z",
      "date_modified": "2024-04-30T18:05:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "ssh",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-256/",
      "url": "https://go.waylonwalker.com/thought-256/",
      "title": "💭 white-space - CSS: Cascading Style Sheets | MDN",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/white-space\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developer.mozilla.org/mdn-social-image.46ac2375.png\" alt=\"white-space - CSS | MDN — The white-space CSS property sets how white space inside an element is handled.\" loading=\"lazy\"/ data-glightbox=\"description: white-space - CSS | MDN — The white-space CSS property sets how white space inside an element is handled.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewhite-space - CSS | MDN\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe white-space CSS property sets how white space inside an element is handled.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMDN Web Docs · developer.mozilla.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\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 can preserve newline \u003ccode\u003e\\n\u003c/code\u003e characters by styling an element with \u003ccode\u003ewhite-space: pre-wrap;\u003c/code\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003epre-wrap\nSequences of white space are preserved. Lines are broken at newline characters, at \u003cbr/\u003e, and as necessary to fill line boxes.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/white-space\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developer.mozilla.org/mdn-social-image.46ac2375.png\" alt=\"white-space - CSS | MDN — The white-space CSS property sets how white space inside an element is handled.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ewhite-space - CSS | MDN\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe white-space CSS property sets how white space inside an element is handled.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMDN Web Docs \u0026middot; developer.mozilla.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nhtml can preserve newline `\\n` characters by styling an element with `white-space: pre-wrap;`\n\n\u003e pre-wrap\n    Sequences of white space are preserved. Lines are broken at newline characters, at \u003cbr\u003e, and as necessary to fill line boxes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developer.mozilla.org/en-US/docs/Web/CSS/white-space",
      "date_published": "2024-04-30T18:03:17Z",
      "date_modified": "2024-04-30T18:03:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "html",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-255/",
      "url": "https://go.waylonwalker.com/thought-255/",
      "title": "💭 \u003c/\u003e htmx ~ The response-targets Extension",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/extensions/response-targets/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ The htmx Response Targets Extension Extension\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e response-targets extension allows me to respond to errors from the backend and do normal htmx swaps.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eby default htmx will only swap on 200 and 300 responses\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eLoad the extension in head\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://unpkg.com/htmx.org@1.9.12/dist/ext/response-targets.js\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUse  the extension on an endpoint that might return a 400.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-ext\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;response-targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;response-div\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-post\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/register\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003ehx-target\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#response-div\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003ehx-target-5\u003c/span\u003e\u003cspan class=\"err\"\u003e*=\u0026#34;#\u003c/span\u003e\u003cspan class=\"na\"\u003eserious-errors\u003c/span\u003e\u003cspan class=\"err\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003ehx-target-404\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#not-found\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        Register!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;serious-errors\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;not-found\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/extensions/response-targets/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ The htmx Response Targets Extension Extension\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe htmx response-targets extension allows me to respond to errors from the backend and do normal htmx swaps.\n\n\u003e !!! note\n    by default htmx will only swap on 200 and 300 responses\n\nLoad the extension in head\n\n``` html\n\u003cscript src=\"https://unpkg.com/htmx.org@1.9.12/dist/ext/response-targets.js\"\u003e\u003c/script\u003e\n```\n\nUse  the extension on an endpoint that might return a 400.\n\n\n``` html\n\u003cdiv hx-ext=\"response-targets\"\u003e\n    \u003cdiv id=\"response-div\"\u003e\u003c/div\u003e\n    \u003cbutton hx-post=\"/register\"\n            hx-target=\"#response-div\"\n            hx-target-5*=\"#serious-errors\"\n            hx-target-404=\"#not-found\"\u003e\n        Register!\n    \u003c/button\u003e\n    \u003cdiv id=\"serious-errors\"\u003e\u003c/div\u003e\n    \u003cdiv id=\"not-found\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/extensions/response-targets/",
      "date_published": "2024-04-30T18:00:54Z",
      "date_modified": "2024-04-30T18:00:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-254/",
      "url": "https://go.waylonwalker.com/thought-254/",
      "title": "💭 How to Restart All Pods in a Kubernetes Namespace | Boot.dev",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.boot.dev/open-source/how-to-restart-all-pods-in-a-kubernetes-namespace/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.boot.dev.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.boot.dev.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehttps://boot.dev/blog/devops/how-to-restart-all-pods-in-a-kubernetes-namespace/\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.boot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAs of kubernetes 1.15 there is an easy way to restart all pods in a deployment.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl -n \u003cspan class=\"o\"\u003e{\u003c/span\u003eNAMESPACE\u003cspan class=\"o\"\u003e}\u003c/span\u003e rollout restart deploy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThanks Lane give him a follow \u003ca href=\"https://twitter.com/wagslane\"\u003e@wagslane\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.boot.dev/open-source/how-to-restart-all-pods-in-a-kubernetes-namespace/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehttps://boot.dev/blog/devops/how-to-restart-all-pods-in-a-kubernetes-namespace/\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.boot.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAs of kubernetes 1.15 there is an easy way to restart all pods in a deployment.\n\n``` bash\nkubectl -n {NAMESPACE} rollout restart deploy\n```\n\nThanks Lane give him a follow [@wagslane](https://twitter.com/wagslane)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.boot.dev/open-source/how-to-restart-all-pods-in-a-kubernetes-namespace/",
      "date_published": "2024-04-25T21:59:56Z",
      "date_modified": "2024-04-25T21:59:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/showmount-e/",
      "url": "https://go.waylonwalker.com/showmount-e/",
      "title": "showmount-e",
      "content_html": "\u003cp\u003eTIL how to display the list of nfs mounts on your network.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eshowmount -e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can even look for mounts of other machines on your network.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eshowmount -e \u0026lt;hostname\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nTIL how to display the list of nfs mounts on your network.\n\n``` bash\nshowmount -e\n```\n\nYou can even look for mounts of other machines on your network.\n\n``` bash\nshowmount -e \u003chostname\u003e\n```\n",
      "summary": "TIL how to display the list of nfs mounts on your network.",
      "date_published": "2024-04-25T20:15:29Z",
      "date_modified": "2024-04-25T20:15:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/control-minio-token-access/",
      "url": "https://go.waylonwalker.com/control-minio-token-access/",
      "title": "control minio token access",
      "content_html": "\u003cp\u003eTo allow access only to the \u003cbucket\u003e, you can pass add the Resource field  to\nthe User Policy when you create a new token.\u003c/bucket\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;Version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2012-10-17\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;Statement\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Effect\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Allow\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Action\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;admin:*\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Effect\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Allow\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Action\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;kms:*\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Effect\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Allow\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Action\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;s3:*\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;Resource\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;arn:aws:s3:::\u0026lt;bucket\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;arn:aws:s3:::\u0026lt;bucket\u0026gt;/*\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nTo allow access only to the \u003cbucket\u003e, you can pass add the Resource field  to\nthe User Policy when you create a new token.\n\n``` json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"admin:*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"kms:*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:*\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::\u003cbucket\u003e\",\n        \"arn:aws:s3:::\u003cbucket\u003e/*\"\n      ]\n    }\n  ]\n}\n```\n",
      "summary": "To allow access only to the , you can pass add the Resource field to the User Policy when you create a new token.",
      "date_published": "2024-04-24T17:03:34Z",
      "date_modified": "2024-04-24T17:03:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/how-to-list-sqlite-tables/",
      "url": "https://go.waylonwalker.com/how-to-list-sqlite-tables/",
      "title": "How to List Sqlite tables",
      "content_html": "\u003cp\u003eYou can inspect sqlite tables with the sqlite shell.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003enote that you get into the shell with \u003ccode\u003esqlite3 database.db\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etables\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI also learned that \u003ccode\u003e.tables\u003c/code\u003e, \u003ccode\u003e.index\u003c/code\u003e and \u003ccode\u003e.schema\u003c/code\u003e are helper functions that\nquery the \u003ccode\u003esqlite_master\u003c/code\u003e table on the \u003ccode\u003emain\u003c/code\u003e database.\u003c/p\u003e\n\u003cp\u003eHere is an output from my redka database.  The sqlite_master table contains all\nthe sqlite objects type, name, tbl_name, rootpage, and sql to create them.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ sqlite3 database.db \u003cspan class=\"s2\"\u003e\u0026#34;SELECT * from sqlite_master;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etable\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey\u003cspan class=\"p\"\u003e|\u003c/span\u003e2\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE TABLE rkey \u003cspan class=\"o\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    id       integer primary key,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    key      text not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003etype\u003c/span\u003e     integer not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        version  integer not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    etime    integer,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        mtime    integer not null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eindex\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey_key_idx\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey\u003cspan class=\"p\"\u003e|\u003c/span\u003e3\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE UNIQUE INDEX rkey_key_idx on rkey \u003cspan class=\"o\"\u003e(\u003c/span\u003ekey\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eindex\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey_etime_idx\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey\u003cspan class=\"p\"\u003e|\u003c/span\u003e4\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE INDEX rkey_etime_idx on rkey \u003cspan class=\"o\"\u003e(\u003c/span\u003eetime\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewhere etime is not null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etrigger\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey_on_type_update\u003cspan class=\"p\"\u003e|\u003c/span\u003erkey\u003cspan class=\"p\"\u003e|\u003c/span\u003e0\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE TRIGGER rkey_on_type_update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebefore update of \u003cspan class=\"nb\"\u003etype\u003c/span\u003e on rkey\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e each row\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewhen old.type is not new.type\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebegin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eselect\u003c/span\u003e raise\u003cspan class=\"o\"\u003e(\u003c/span\u003eabort, \u003cspan class=\"s1\"\u003e\u0026#39;key type mismatch\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eend\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etable\u003cspan class=\"p\"\u003e|\u003c/span\u003erstring\u003cspan class=\"p\"\u003e|\u003c/span\u003erstring\u003cspan class=\"p\"\u003e|\u003c/span\u003e5\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE TABLE rstring \u003cspan class=\"o\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    key_id integer not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    value  blob not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    foreign key \u003cspan class=\"o\"\u003e(\u003c/span\u003ekey_id\u003cspan class=\"o\"\u003e)\u003c/span\u003e references rkey \u003cspan class=\"o\"\u003e(\u003c/span\u003eid\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          on delete cascade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eindex\u003cspan class=\"p\"\u003e|\u003c/span\u003erstring_pk_idx\u003cspan class=\"p\"\u003e|\u003c/span\u003erstring\u003cspan class=\"p\"\u003e|\u003c/span\u003e6\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE UNIQUE INDEX rstring_pk_idx on rstring \u003cspan class=\"o\"\u003e(\u003c/span\u003ekey_id\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eview\u003cspan class=\"p\"\u003e|\u003c/span\u003evstring\u003cspan class=\"p\"\u003e|\u003c/span\u003evstring\u003cspan class=\"p\"\u003e|\u003c/span\u003e0\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE VIEW vstring as\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eselect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    rkey.id as key_id, rkey.key, rstring.value,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        datetime\u003cspan class=\"o\"\u003e(\u003c/span\u003eetime/1000, \u003cspan class=\"s1\"\u003e\u0026#39;unixepoch\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e as etime,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        datetime\u003cspan class=\"o\"\u003e(\u003c/span\u003emtime/1000, \u003cspan class=\"s1\"\u003e\u0026#39;unixepoch\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e as mtime\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  from rkey join rstring on rkey.id \u003cspan class=\"o\"\u003e=\u003c/span\u003e rstring.key_id\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  where rkey.type \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    and \u003cspan class=\"o\"\u003e(\u003c/span\u003erkey.etime is null or rkey.etime \u0026gt; unixepoch\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;subsec\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etable\u003cspan class=\"p\"\u003e|\u003c/span\u003erhash\u003cspan class=\"p\"\u003e|\u003c/span\u003erhash\u003cspan class=\"p\"\u003e|\u003c/span\u003e7\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE TABLE rhash \u003cspan class=\"o\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    key_id integer not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    field text not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    value blob not null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    foreign key \u003cspan class=\"o\"\u003e(\u003c/span\u003ekey_id\u003cspan class=\"o\"\u003e)\u003c/span\u003e references rkey \u003cspan class=\"o\"\u003e(\u003c/span\u003eid\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      on delete cascade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eindex\u003cspan class=\"p\"\u003e|\u003c/span\u003erhash_pk_idx\u003cspan class=\"p\"\u003e|\u003c/span\u003erhash\u003cspan class=\"p\"\u003e|\u003c/span\u003e8\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE UNIQUE INDEX rhash_pk_idx on rhash \u003cspan class=\"o\"\u003e(\u003c/span\u003ekey_id, field\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eindex\u003cspan class=\"p\"\u003e|\u003c/span\u003erhash_key_id_idx\u003cspan class=\"p\"\u003e|\u003c/span\u003erhash\u003cspan class=\"p\"\u003e|\u003c/span\u003e9\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE INDEX rhash_key_id_idx on rhash \u003cspan class=\"o\"\u003e(\u003c/span\u003ekey_id\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eview\u003cspan class=\"p\"\u003e|\u003c/span\u003evhash\u003cspan class=\"p\"\u003e|\u003c/span\u003evhash\u003cspan class=\"p\"\u003e|\u003c/span\u003e0\u003cspan class=\"p\"\u003e|\u003c/span\u003eCREATE VIEW vhash as\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eselect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    rkey.id as key_id, rkey.key, rhash.field, rhash.value,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        datetime\u003cspan class=\"o\"\u003e(\u003c/span\u003eetime/1000, \u003cspan class=\"s1\"\u003e\u0026#39;unixepoch\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e as etime,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        datetime\u003cspan class=\"o\"\u003e(\u003c/span\u003emtime/1000, \u003cspan class=\"s1\"\u003e\u0026#39;unixepoch\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e as mtime\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  from rkey join rhash on rkey.id \u003cspan class=\"o\"\u003e=\u003c/span\u003e rhash.key_id\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  where rkey.type \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    and \u003cspan class=\"o\"\u003e(\u003c/span\u003erkey.etime is null or rkey.etime \u0026gt; unixepoch\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;subsec\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nYou can inspect sqlite tables with the sqlite shell.\n\n\u003e note that you get into the shell with `sqlite3 database.db`\n\n``` sql\n.tables\n```\n\nI also learned that `.tables`, `.index` and `.schema` are helper functions that\nquery the `sqlite_master` table on the `main` database.\n\nHere is an output from my redka database.  The sqlite_master table contains all\nthe sqlite objects type, name, tbl_name, rootpage, and sql to create them.\n\n``` bash\n❯ sqlite3 database.db \"SELECT * from sqlite_master;\"\ntable|rkey|rkey|2|CREATE TABLE rkey (\n    id       integer primary key,\n    key      text not null,\n    type     integer not null,\n        version  integer not null,\n    etime    integer,\n        mtime    integer not null\n)\nindex|rkey_key_idx|rkey|3|CREATE UNIQUE INDEX rkey_key_idx on rkey (key)\nindex|rkey_etime_idx|rkey|4|CREATE INDEX rkey_etime_idx on rkey (etime)\nwhere etime is not null\ntrigger|rkey_on_type_update|rkey|0|CREATE TRIGGER rkey_on_type_update\nbefore update of type on rkey\nfor each row\nwhen old.type is not new.type\nbegin\n    select raise(abort, 'key type mismatch');\nend\ntable|rstring|rstring|5|CREATE TABLE rstring (\n    key_id integer not null,\n    value  blob not null,\n\n    foreign key (key_id) references rkey (id)\n          on delete cascade\n)\nindex|rstring_pk_idx|rstring|6|CREATE UNIQUE INDEX rstring_pk_idx on rstring (key_id)\nview|vstring|vstring|0|CREATE VIEW vstring as\n  select\n    rkey.id as key_id, rkey.key, rstring.value,\n        datetime(etime/1000, 'unixepoch') as etime,\n        datetime(mtime/1000, 'unixepoch') as mtime\n  from rkey join rstring on rkey.id = rstring.key_id\n  where rkey.type = 1\n    and (rkey.etime is null or rkey.etime \u003e unixepoch('subsec'))\ntable|rhash|rhash|7|CREATE TABLE rhash (\n    key_id integer not null,\n    field text not null,\n    value blob not null,\n\n    foreign key (key_id) references rkey (id)\n      on delete cascade\n)\nindex|rhash_pk_idx|rhash|8|CREATE UNIQUE INDEX rhash_pk_idx on rhash (key_id, field)\nindex|rhash_key_id_idx|rhash|9|CREATE INDEX rhash_key_id_idx on rhash (key_id)\nview|vhash|vhash|0|CREATE VIEW vhash as\n  select\n    rkey.id as key_id, rkey.key, rhash.field, rhash.value,\n        datetime(etime/1000, 'unixepoch') as etime,\n        datetime(mtime/1000, 'unixepoch') as mtime\n  from rkey join rhash on rkey.id = rhash.key_id\n  where rkey.type = 4\n    and (rkey.etime is null or rkey.etime \u003e unixepoch('subsec'))\n```\n",
      "summary": "You can inspect sqlite tables with the sqlite shell.",
      "date_published": "2024-04-23T20:03:27Z",
      "date_modified": "2024-04-23T20:03:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/redka-runs-on-sqlite/",
      "url": "https://go.waylonwalker.com/redka-runs-on-sqlite/",
      "title": "Redka Runs on SQLite",
      "content_html": "\u003cp\u003eWith the liscense changes to redis there are several new forks out there.  One\nthat I am particularly interested in is\n\u003ca href=\"https://github.com/nalgeon/redka\" 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\"\u003eredka\u003c/a\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.jpillora.com/nalgeon/redka \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod +x redka\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./redka database.db\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe now have redis running on port 6379 that we can connect to with a redis\nclient. And we have a sqlite database that we can inspect.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ sqlite3 database.db \u003cspan class=\"s2\"\u003e\u0026#34;SELECT name FROM sqlite_master;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erkey\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erkey_key_idx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erkey_etime_idx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erkey_on_type_update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erstring\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erstring_pk_idx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evstring\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erhash\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erhash_pk_idx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erhash_key_id_idx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evhash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe can look at the values in the vstring table.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esqlite3 database.db \u003cspan class=\"s2\"\u003e\u0026#34;SELECT * from vstring;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1\u003cspan class=\"p\"\u003e|\u003c/span\u003ehi\u003cspan class=\"p\"\u003e|\u003c/span\u003ehello there you\u003cspan class=\"o\"\u003e||\u003c/span\u003e2024-04-17 01:46:26\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nWith the liscense changes to redis there are several new forks out there.  One\nthat I am particularly interested in is\n[redka](https://github.com/nalgeon/redka).\n\n``` bash\ncurl https://i.jpillora.com/nalgeon/redka | bash\nchmod +x redka\n./redka database.db\n```\n\nWe now have redis running on port 6379 that we can connect to with a redis\nclient. And we have a sqlite database that we can inspect.\n\n``` bash\n❯ sqlite3 database.db \"SELECT name FROM sqlite_master;\"\nrkey\nrkey_key_idx\nrkey_etime_idx\nrkey_on_type_update\nrstring\nrstring_pk_idx\nvstring\nrhash\nrhash_pk_idx\nrhash_key_id_idx\nvhash\n```\n\nWe can look at the values in the vstring table.\n\n``` bash\nsqlite3 database.db \"SELECT * from vstring;\"\n1|hi|hello there you||2024-04-17 01:46:26\n```\n",
      "summary": "With the liscense changes to redis there are several new forks out there. One that I am particularly interested in is redka.",
      "date_published": "2024-04-22T19:54:24Z",
      "date_modified": "2024-04-22T19:54:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "infrastructure"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/am-i-vulnerable-to-the-xz-backdoor/",
      "url": "https://go.waylonwalker.com/am-i-vulnerable-to-the-xz-backdoor/",
      "title": "Am I vulnerable to the xz backdoor?",
      "content_html": "\u003cp\u003eThe main system that I am concerned about is my arch BTW machine. I found a\ngreat \u003ca href=\"https://archlinux.org/news/the-xz-package-has-been-backdoored/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/archlinux.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/archlinux.org.png\" class=\"has-avatar  has-avatar-before\"\u003earticle\u003c/a\u003e\nfrom the official archlinux site covering it.\u003c/p\u003e\n\u003cp\u003eFor my machine I am concerned with this line.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1)\ncontain this backdoor.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI checked my xz package with \u003ca href=\"/paru/\" class=\"glossary-term\" title=\"paru is a package manager for archlinux that installs packages from the \u003ca href=\"/aur/\" class=\"glossary-term\" title=\"Arch User Repository, a collection of community maintained packages for archlinux.\"\u003eAUR\u003c/a\u003e.\"\u003eparu\u003c/a\u003e, and I am good.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -Qii zx\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThe main system that I am concerned about is my arch BTW machine. I found a\ngreat [article](https://archlinux.org/news/the-xz-package-has-been-backdoored/)\nfrom the official archlinux site covering it.\n\nFor my machine I am concerned with this line.\n\n\u003e The xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1)\n\u003e contain this backdoor.\n\nI checked my xz package with paru, and I am good.\n\n``` bash\nparu -Qii zx\n```\n",
      "summary": "The main system that I am concerned about is my arch BTW machine. I found a great article from the official archlinux site covering it.",
      "date_published": "2024-04-21T07:53:54Z",
      "date_modified": "2024-04-21T07:53:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/arch-dependencies/",
      "url": "https://go.waylonwalker.com/arch-dependencies/",
      "title": "arch dependencies",
      "content_html": "\u003cp\u003e\u003ca href=\"/paru/\" class=\"glossary-term\" title=\"paru is a package manager for archlinux that installs packages from the \u003ca href=\"/aur/\" class=\"glossary-term\" title=\"Arch User Repository, a collection of community maintained packages for archlinux.\"\u003eAUR\u003c/a\u003e.\"\u003eparu\u003c/a\u003e has some nice features that I rarely use, and hav to look up when I need\nthem.  Here are two commands to help with dependency management.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ paru -Qii nodejs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eName            : nodejs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eVersion         : 21.7.2-1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDescription     : Evented I/O \u003cspan class=\"k\"\u003efor\u003c/span\u003e V8 javascript\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eArchitecture    : x86_64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eURL             : https://nodejs.org/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLicenses        : MIT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGroups          : None\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eProvides        : None\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDepends On      : icu  libuv  libnghttp2  libnghttp3  libngtcp2  openssl  zlib  brotli  c-ares\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOptional Deps   : npm: nodejs package manager \u003cspan class=\"o\"\u003e[\u003c/span\u003einstalled\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRequired By     : node-gyp  nodejs-nopt  npm  semver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOptional For    : None\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eConflicts With  : None\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eReplaces        : None\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstalled Size  : 46.86 MiB\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePackager        : Felix Yan \u0026lt;felixonmars@archlinux.org\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBuild Date      : Thu \u003cspan class=\"m\"\u003e04\u003c/span\u003e Apr \u003cspan class=\"m\"\u003e2024\u003c/span\u003e 05:11:09 AM CDT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstall Date    : Mon \u003cspan class=\"m\"\u003e15\u003c/span\u003e Apr \u003cspan class=\"m\"\u003e2024\u003c/span\u003e 07:27:02 AM CDT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstall Reason  : Installed as a dependency \u003cspan class=\"k\"\u003efor\u003c/span\u003e another package\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInstall Script  : No\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eValidated By    : Signature\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBackup Files    : None\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExtended Data   : \u003cspan class=\"nv\"\u003epkgtype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003epkg\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can check all the packages depended on by nodejs by running the following.\nThis is everything from all of the repos you have configured, not what you have\ninstalled.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ pactree --reverse --sync --depth \u003cspan class=\"m\"\u003e1\u003c/span\u003e nodejs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enodejs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─acorn\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─ansible-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─asar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─babel-cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─babel-core\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─bash-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─blinksocks\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─bower\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─browserify\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─coffeescript\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─dot-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─emscripten\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─eslint\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─eslint-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─eslint_d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─gitlab\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─gnomon\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─grunt-cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─gtop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─gulp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─hedgedoc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─jake\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─markdownlint-cli2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─marked\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─marked-man\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─matrix-appservice-irc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─modclean\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─node-gyp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─nodejs-emojione\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─nodejs-material-design-icons\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─nodejs-nopt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─nodejs-source-map\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─nodejs-yaml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─npm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─openui5\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─pm2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─prettier\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─pyright\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─rapydscript-ng\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─s3rver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─semver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─serverless\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─stylelint\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─stylus\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─svelte-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─tailwindcss-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─ts-node\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─typescript\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─typescript-svelte-plugin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─uglify-js\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─vscode-css-languageserver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─vscode-html-languageserver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─vscode-json-languageserver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─vue-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─vue-typescript-plugin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─wasm-bindgen\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─web-ext\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─wrangler\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─yaml-language-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├─yarn\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nparu has some nice features that I rarely use, and hav to look up when I need\nthem.  Here are two commands to help with dependency management.\n\n``` bash\n❯ paru -Qii nodejs\nName            : nodejs\nVersion         : 21.7.2-1\nDescription     : Evented I/O for V8 javascript\nArchitecture    : x86_64\nURL             : https://nodejs.org/\nLicenses        : MIT\nGroups          : None\nProvides        : None\nDepends On      : icu  libuv  libnghttp2  libnghttp3  libngtcp2  openssl  zlib  brotli  c-ares\nOptional Deps   : npm: nodejs package manager [installed]\nRequired By     : node-gyp  nodejs-nopt  npm  semver\nOptional For    : None\nConflicts With  : None\nReplaces        : None\nInstalled Size  : 46.86 MiB\nPackager        : Felix Yan \u003cfelixonmars@archlinux.org\u003e\nBuild Date      : Thu 04 Apr 2024 05:11:09 AM CDT\nInstall Date    : Mon 15 Apr 2024 07:27:02 AM CDT\nInstall Reason  : Installed as a dependency for another package\nInstall Script  : No\nValidated By    : Signature\nBackup Files    : None\nExtended Data   : pkgtype=pkg\n```\n\nYou can check all the packages depended on by nodejs by running the following.\nThis is everything from all of the repos you have configured, not what you have\ninstalled.\n\n``` bash\n❯ pactree --reverse --sync --depth 1 nodejs\n\nnodejs\n├─acorn\n├─ansible-language-server\n├─asar\n├─babel-cli\n├─babel-core\n├─bash-language-server\n├─blinksocks\n├─bower\n├─browserify\n├─coffeescript\n├─dot-language-server\n├─emscripten\n├─eslint\n├─eslint-language-server\n├─eslint_d\n├─gitlab\n├─gnomon\n├─grunt-cli\n├─gtop\n├─gulp\n├─hedgedoc\n├─jake\n├─markdownlint-cli2\n├─marked\n├─marked-man\n├─matrix-appservice-irc\n├─modclean\n├─node-gyp\n├─nodejs-emojione\n├─nodejs-material-design-icons\n├─nodejs-nopt\n├─nodejs-source-map\n├─nodejs-yaml\n├─npm\n├─openui5\n├─pm2\n├─prettier\n├─pyright\n├─rapydscript-ng\n├─s3rver\n├─semver\n├─serverless\n├─stylelint\n├─stylus\n├─svelte-language-server\n├─tailwindcss-language-server\n├─ts-node\n├─typescript\n├─typescript-svelte-plugin\n├─uglify-js\n├─vscode-css-languageserver\n├─vscode-html-languageserver\n├─vscode-json-languageserver\n├─vue-language-server\n├─vue-typescript-plugin\n├─wasm-bindgen\n├─web-ext\n├─wrangler\n├─yaml-language-server\n├─yarn\n```\n",
      "summary": "paru has some nice features that I rarely use, and hav to look up when I need them. Here are two commands to help with dependency management.",
      "date_published": "2024-04-20T07:42:21Z",
      "date_modified": "2024-04-20T07:42:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "arch"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-253/",
      "url": "https://go.waylonwalker.com/thought-253/",
      "title": "💭 ⭐⭐⭐⭐⭐ Changelog Master Feed",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/master\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.changelog.com/static/images/share/twitter-master-8e71f3d7acf22cec2efb6c4633ba01e8.png\" alt=\"Changelog Master Feed — Your one-stop shop for all Changelog podcasts.\" loading=\"lazy\"/ data-glightbox=\"description: Changelog Master Feed — Your one-stop shop for all Changelog podcasts.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eChangelog Master Feed\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYour one-stop shop for all Changelog podcasts.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eJerod (It’s ya boi) and Adam are my favorite tech news nerds, and have the sickest podcasts in tech.  Yes plural podcasts they run seven podcasts maybe more.  If you want it short and sweet they got the best 15 minutes of tech news each week this is it.  My favorite is Ship it, sad to see Gerhard go, but Justin and Autumn are crushing it.  Every episode is highly polished and surrounded by the sickest beats in podcasting.\u003c/p\u003e\n\u003cp\u003eSubscribe to one pod if you want, but I recommend collecting them all with the master feed.\u003c/p\u003e\n\u003cp\u003e⭐⭐⭐⭐⭐\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/master\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.changelog.com/static/images/share/twitter-master-8e71f3d7acf22cec2efb6c4633ba01e8.png\" alt=\"Changelog Master Feed — Your one-stop shop for all Changelog podcasts.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eChangelog Master Feed\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYour one-stop shop for all Changelog podcasts.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nJerod (It's ya boi) and Adam are my favorite tech news nerds, and have the sickest podcasts in tech.  Yes plural podcasts they run seven podcasts maybe more.  If you want it short and sweet they got the best 15 minutes of tech news each week this is it.  My favorite is Ship it, sad to see Gerhard go, but Justin and Autumn are crushing it.  Every episode is highly polished and surrounded by the sickest beats in podcasting.\n\nSubscribe to one pod if you want, but I recommend collecting them all with the master feed.\n\n⭐⭐⭐⭐⭐\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/master",
      "date_published": "2024-04-20T01:47:19Z",
      "date_modified": "2024-04-20T01:47:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-252/",
      "url": "https://go.waylonwalker.com/thought-252/",
      "title": "💭 MarkdownDown",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://markdowndown.vercel.app/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://markdowndown.vercel.app/og.png\" alt=\"MarkdownDown — Convert any webpage to a clean markdown w/ images downloaded.\" loading=\"lazy\"/ data-glightbox=\"description: MarkdownDown — Convert any webpage to a clean markdown w/ images downloaded.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMarkdownDown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eConvert any webpage to a clean markdown w/ images downloaded.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMarkdownDown · markdowndown.vercel.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSmall web app to convert \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 into markdown.  Pretty cool idea. I actually want to look into this for reader and see how well it would work.  Right now I am just pulling descriptions, but maybe I can pull full web pages, and keep the full intent of the first 200 words or so in the cards.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://markdowndown.vercel.app/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://markdowndown.vercel.app/og.png\" alt=\"MarkdownDown — Convert any webpage to a clean markdown w/ images downloaded.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMarkdownDown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eConvert any webpage to a clean markdown w/ images downloaded.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMarkdownDown \u0026middot; markdowndown.vercel.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSmall web app to convert html into markdown.  Pretty cool idea. I actually want to look into this for reader and see how well it would work.  Right now I am just pulling descriptions, but maybe I can pull full web pages, and keep the full intent of the first 200 words or so in the cards.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://markdowndown.vercel.app/",
      "date_published": "2024-04-20T01:38:35Z",
      "date_modified": "2024-04-20T01:38:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-251/",
      "url": "https://go.waylonwalker.com/thought-251/",
      "title": "💭 Boston Dynamics’ new humanoid moves like no robot you’ve ever ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn.arstechnica.net/wp-content/uploads/2024/04/atlas-yellow-1152x648.jpg\" alt=\"Boston Dynamics’ new humanoid moves like no robot you’ve ever seen — All-electric, 360° joints give the new Atlas plenty of inhuman movements.\" loading=\"lazy\"/ data-glightbox=\"description: Boston Dynamics’ new humanoid moves like no robot you’ve ever seen — All-electric, 360° joints give the new Atlas plenty of inhuman movements.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBoston Dynamics’ new humanoid moves like no robot you’ve ever seen\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAll-electric, 360° joints give the new Atlas plenty of inhuman movements.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eArs Technica · arstechnica.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAward for the creepiest way to stand up a robot from lying flat.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn.arstechnica.net/wp-content/uploads/2024/04/atlas-yellow-1152x648.jpg\" alt=\"Boston Dynamics’ new humanoid moves like no robot you’ve ever seen — All-electric, 360° joints give the new Atlas plenty of inhuman movements.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBoston Dynamics’ new humanoid moves like no robot you’ve ever seen\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAll-electric, 360° joints give the new Atlas plenty of inhuman movements.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eArs Technica \u0026middot; arstechnica.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAward for the creepiest way to stand up a robot from lying flat.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization/",
      "date_published": "2024-04-20T01:36:39Z",
      "date_modified": "2024-04-20T01:36:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-250/",
      "url": "https://go.waylonwalker.com/thought-250/",
      "title": "💭 Rug pull, not cool! (Changelog \u0026 Friends #40)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/40\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://snap.fly.dev/friends/40/img\" alt=\"Rug pull, not cool! (Changelog \u0026amp; Friends #40) — If Changelog News had an extended edition, this might be it! Jerod \u0026amp; Adam discuss Hashicorp\u0026#39;s Cease and Desist letter, Redis getting forked, Boston Dymanics\u0026#39; scary cool new robot, Justin Searls\u0026#39; extensive use of the Apple Vision Pro, Thorston Ball moving from Vim to Zed, Firefox becoming hard to use, Beeper joining Aut...\" loading=\"lazy\"/ data-glightbox=\"description: Rug pull, not cool! (Changelog \u0026amp; Friends #40) — If Changelog News had an extended edition, this might be it! Jerod \u0026amp; Adam discuss Hashicorp\u0026#39;s Cease and Desist letter, Redis getting forked, Boston Dymanics\u0026#39; scary cool new robot, Justin Searls\u0026#39; extensive use of the Apple Vision Pro, Thorston Ball moving from Vim to Zed, Firefox becoming hard to use, Beeper joining Aut...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRug pull, not cool! (Changelog \u0026amp; Friends #40)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf Changelog News had an extended edition, this might be it! Jerod \u0026amp; Adam discuss Hashicorp\u0026#39;s Cease and Desist letter, Redis getting forked, Boston Dymanics\u0026#39; scary cool new robot, Justin Searls\u0026#39; ex...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFive star episode with Jarod and Adam shootin the crap.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003ca href=\"https://opentofu.org/blog/our-response-to-hashicorps-cease-and-desist/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/opentofu.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/opentofu.org.png\" class=\"has-avatar  has-avatar-before\"\u003eThe massive Cease and Desist\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSucks that the guest had to back out, what a wild world 2024 is.  Filled with license and pricing changes.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003ca href=\"https://registerspill.thorstenball.com/p/from-vim-to-zed\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/registerspill.thorstenball.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/registerspill.thorstenball.com.png\" class=\"has-avatar  has-avatar-before\"\u003eFrom Vim to Zed\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eInteresting to hear the journey into zed, way to go Thorston diving all the way into working at zed.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003ca href=\"https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/arstechnica.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/arstechnica.com.png\" class=\"has-avatar  has-avatar-before\"\u003eBoston Dynamics’ new Atlas\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI later saw this through a YT short, and man does it hold up to the creepy level that they described.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003ca href=\"https://markdowndown.vercel.app/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/markdowndown.vercel.app.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/markdowndown.vercel.app.ico\" class=\"has-avatar  has-avatar-before\"\u003eMarkdownDown\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis is a legit cool service, that converts \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 into markdown\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/40\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/friends/40/img\" alt=\"Rug pull, not cool! (Changelog \u0026amp; Friends #40) — If Changelog News had an extended edition, this might be it! Jerod \u0026amp; Adam discuss Hashicorp\u0026#39;s Cease and Desist letter, Redis getting forked, Boston Dymanics\u0026#39; scary cool new robot, Justin Searls\u0026#39; extensive use of the Apple Vision Pro, Thorston Ball moving from Vim to Zed, Firefox becoming hard to use, Beeper joining Aut...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRug pull, not cool! (Changelog \u0026amp; Friends #40)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf Changelog News had an extended edition, this might be it! Jerod \u0026amp; Adam discuss Hashicorp\u0026#39;s Cease and Desist letter, Redis getting forked, Boston Dymanics\u0026#39; scary cool new robot, Justin Searls\u0026#39; ex...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFive star episode with Jarod and Adam shootin the crap.\n\n\u003e [The massive Cease and Desist](https://opentofu.org/blog/our-response-to-hashicorps-cease-and-desist/)\n\nSucks that the guest had to back out, what a wild world 2024 is.  Filled with license and pricing changes.\n\n\u003e [From Vim to Zed](https://registerspill.thorstenball.com/p/from-vim-to-zed)\n\nInteresting to hear the journey into zed, way to go Thorston diving all the way into working at zed.\n\n\u003e\t[Boston Dynamics' new Atlas](https://arstechnica.com/gadgets/2024/04/boston-dynamics-debuts-humanoid-robot-destined-for-commercialization)\n\nI later saw this through a YT short, and man does it hold up to the creepy level that they described.\n\n\u003e [MarkdownDown](https://markdowndown.vercel.app/)\n\nThis is a legit cool service, that converts html into markdown\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/friends/40",
      "date_published": "2024-04-20T01:36:03Z",
      "date_modified": "2024-04-20T01:36:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier-trust/",
      "url": "https://go.waylonwalker.com/copier-trust/",
      "title": "copier trust",
      "content_html": "\u003cp\u003eI recently had to update my copier-gallery command to trust my own templates\nbecause some of them have shell scripts that run afterwards.  Be warned that\nthis could be a dangerous feature to run on random templates you get off the\ninternet, but these are all mine, so if I wreck it its my own fault.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopier copy --trust \u0026lt;template\u0026gt; \u0026lt;destination\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAll the the copier copy api can be found with help.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ copier copy --help\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopier copy 8.3.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCopy from a template \u003cspan class=\"nb\"\u003esource\u003c/span\u003e to a destination.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUsage:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    copier copy \u003cspan class=\"o\"\u003e[\u003c/span\u003eSWITCHES\u003cspan class=\"o\"\u003e]\u003c/span\u003e template_src destination_path\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHidden-switches:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -h, --help                         Prints this \u003cspan class=\"nb\"\u003ehelp\u003c/span\u003e message and quits\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --help-all                         Prints \u003cspan class=\"nb\"\u003ehelp\u003c/span\u003e messages of all sub-commands and quits\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -v, --version                      Prints the program\u003cspan class=\"err\"\u003e\u0026#39;\u003c/span\u003es version and quits\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSwitches:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -C, --no-cleanup                   On error, \u003cspan class=\"k\"\u003edo\u003c/span\u003e not delete destination \u003cspan class=\"k\"\u003eif\u003c/span\u003e it was\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       created by Copier.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --UNSAFE, --trust                  Allow templates with unsafe features \u003cspan class=\"o\"\u003e(\u003c/span\u003eJinja\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       extensions, migrations, tasks\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -a, --answers-file VALUE:str       Update using this path \u003cspan class=\"o\"\u003e(\u003c/span\u003erelative to\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       \u003cspan class=\"sb\"\u003e`\u003c/span\u003edestination_path\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e to find the answers file\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -d, --data \u003cspan class=\"nv\"\u003eVARIABLE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eVALUE:str      Make VARIABLE available as VALUE when rendering the\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       template\u003cspan class=\"p\"\u003e;\u003c/span\u003e may be given multiple \u003cspan class=\"nb\"\u003etimes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -f, --force                        Same as \u003cspan class=\"sb\"\u003e`\u003c/span\u003e--defaults --overwrite\u003cspan class=\"sb\"\u003e`\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -g, --prereleases                  Use prereleases to compare template VCS tags.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -l, --defaults                     Use default answers to questions, which might be\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       null \u003cspan class=\"k\"\u003eif\u003c/span\u003e not specified.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -n, --pretend                      Run but \u003cspan class=\"k\"\u003edo\u003c/span\u003e not make any changes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -q, --quiet                        Suppress status output\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -r, --vcs-ref VALUE:str            Git reference to checkout in \u003cspan class=\"sb\"\u003e`\u003c/span\u003etemplate_src\u003cspan class=\"sb\"\u003e`\u003c/span\u003e. If you\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       \u003cspan class=\"k\"\u003edo\u003c/span\u003e not specify it, it will try to checkout the\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       latest git tag, as sorted using the PEP \u003cspan class=\"m\"\u003e440\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       algorithm. If you want to checkout always the\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       latest version, use \u003cspan class=\"sb\"\u003e`\u003c/span\u003e--vcs-ref\u003cspan class=\"o\"\u003e=\u003c/span\u003eHEAD\u003cspan class=\"sb\"\u003e`\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -s, --skip VALUE:str               Skip specified files \u003cspan class=\"k\"\u003eif\u003c/span\u003e they exist already\u003cspan class=\"p\"\u003e;\u003c/span\u003e may be\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       given multiple \u003cspan class=\"nb\"\u003etimes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -w, --overwrite                    Overwrite files that already exist, without asking.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -x, --exclude VALUE:str            A name or shell-style pattern matching files or\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       folders that must not be copied\u003cspan class=\"p\"\u003e;\u003c/span\u003e may be given\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                       multiple \u003cspan class=\"nb\"\u003etimes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI recently had to update my copier-gallery command to trust my own templates\nbecause some of them have shell scripts that run afterwards.  Be warned that\nthis could be a dangerous feature to run on random templates you get off the\ninternet, but these are all mine, so if I wreck it its my own fault.\n\n``` bash\ncopier copy --trust \u003ctemplate\u003e \u003cdestination\u003e\n```\n\nAll the the copier copy api can be found with help.\n\n``` bash\n❯ copier copy --help\ncopier copy 8.3.0\n\nCopy from a template source to a destination.\n\nUsage:\n    copier copy [SWITCHES] template_src destination_path\n\nHidden-switches:\n    -h, --help                         Prints this help message and quits\n    --help-all                         Prints help messages of all sub-commands and quits\n    -v, --version                      Prints the program's version and quits\n\nSwitches:\n    -C, --no-cleanup                   On error, do not delete destination if it was\n                                       created by Copier.\n    --UNSAFE, --trust                  Allow templates with unsafe features (Jinja\n                                       extensions, migrations, tasks)\n    -a, --answers-file VALUE:str       Update using this path (relative to\n                                       `destination_path`) to find the answers file\n    -d, --data VARIABLE=VALUE:str      Make VARIABLE available as VALUE when rendering the\n                                       template; may be given multiple times\n    -f, --force                        Same as `--defaults --overwrite`.\n    -g, --prereleases                  Use prereleases to compare template VCS tags.\n    -l, --defaults                     Use default answers to questions, which might be\n                                       null if not specified.\n    -n, --pretend                      Run but do not make any changes\n    -q, --quiet                        Suppress status output\n    -r, --vcs-ref VALUE:str            Git reference to checkout in `template_src`. If you\n                                       do not specify it, it will try to checkout the\n                                       latest git tag, as sorted using the PEP 440\n                                       algorithm. If you want to checkout always the\n                                       latest version, use `--vcs-ref=HEAD`.\n    -s, --skip VALUE:str               Skip specified files if they exist already; may be\n                                       given multiple times\n    -w, --overwrite                    Overwrite files that already exist, without asking.\n    -x, --exclude VALUE:str            A name or shell-style pattern matching files or\n                                       folders that must not be copied; may be given\n                                       multiple times\n```\n",
      "summary": "I recently had to update my copier-gallery command to trust my own templates because some of them have shell scripts that run afterwards. Be warned that this...",
      "date_published": "2024-04-19T20:41:06Z",
      "date_modified": "2024-04-19T20:41:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-249/",
      "url": "https://go.waylonwalker.com/thought-249/",
      "title": "💭 argocd automated sync",
      "content_html": "\u003c!-- embed not found: none --\u003e\n\u003cp\u003e![[none]]\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eargoproj.io/v1alpha1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eApplication\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ekanboard\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eargocd\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edestination\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ekanboard\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eserver\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://kubernetes.default.svc\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esource\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ekanboard\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erepoURL\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://github.com/waylonwalker/homelab-argo\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etargetRevision\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHEAD\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esyncPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eautomated\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eprune\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: none --\u003e\n![[none]]\n\n```  yaml\n---\n\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n  name: kanboard\n  namespace: argocd\nspec:\n  project: default\n  destination:\n    namespace: kanboard\n    server: 'https://kubernetes.default.svc'\n  source:\n    path: kanboard\n    repoURL: 'https://github.com/waylonwalker/homelab-argo'\n    targetRevision: HEAD\n  syncPolicy:\n    automated:\n      prune: true\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!none",
      "date_published": "2024-04-19T19:36:47Z",
      "date_modified": "2024-04-19T19:36:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-248/",
      "url": "https://go.waylonwalker.com/thought-248/",
      "title": "💭 Manual Upgrades | K3s",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.k3s.io/upgrades/manual\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.k3s.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.k3s.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eManual Upgrades | K3s\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou can upgrade K3s by using the installation script, or by manually installing the binary of the desired version.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.k3s.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can give k3s an install channel to install \u003ccode\u003estable\u003c/code\u003e,  \u003ccode\u003elatest\u003c/code\u003e, or specific versions like \u003ccode\u003e1.26\u003c/code\u003e.  This is handy to make sure that you install the same version on all of your workers.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -sfL https://get.k3s.io \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nv\"\u003eINSTALL_K3S_CHANNEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003elatest \u0026lt;EXISTING_K3S_ENV\u0026gt; sh -s - \u0026lt;EXISTING_K3S_ARGS\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.k3s.io/upgrades/manual\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eManual Upgrades | K3s\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou can upgrade K3s by using the installation script, or by manually installing the binary of the desired version.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.k3s.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nYou can give k3s an install channel to install `stable`,  `latest`, or specific versions like `1.26`.  This is handy to make sure that you install the same version on all of your workers.\n\n``` bash\ncurl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest \u003cEXISTING_K3S_ENV\u003e sh -s - \u003cEXISTING_K3S_ARGS\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.k3s.io/upgrades/manual",
      "date_published": "2024-04-19T12:51:03Z",
      "date_modified": "2024-04-19T12:51:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "k3s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ipython-f2/",
      "url": "https://go.waylonwalker.com/ipython-f2/",
      "title": "ipython f2",
      "content_html": "\u003cp\u003eToday I accidentally ran f2 in ipython to discover that it opens your $EDITOR!\nI use this feature quite often in zsh, it is bound to \u003ccode\u003e\u0026lt;c-e\u0026gt;\u003c/code\u003e for me, and since\nI have my environment variable \u003ccode\u003eEDITOR\u003c/code\u003e set to \u003ccode\u003envim\u003c/code\u003e it opens nvim when I hit\n\u003ccode\u003e\u0026lt;c-e\u0026gt;\u003c/code\u003e.  Today I discovered that Ipython has this bound to \u003ccode\u003eF2\u003c/code\u003e.  If you know\nhow to set it to \u003ccode\u003e\u0026lt;c-e\u0026gt;\u003c/code\u003e let me know I’ve tried, a lot.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eEDITOR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003envim\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eipython\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;F2\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ebetter yet add \u003ccode\u003eexport EDITOR=nvim\u003c/code\u003e to your .zshrc\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ~/.zshrc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eEDITOR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003envim\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I accidentally ran f2 in ipython to discover that it opens your $EDITOR!\nI use this feature quite often in zsh, it is bound to `\u003cc-e\u003e` for me, and since\nI have my environment variable `EDITOR` set to `nvim` it opens nvim when I hit\n`\u003cc-e\u003e`.  Today I discovered that Ipython has this bound to `F2`.  If you know\nhow to set it to `\u003cc-e\u003e` let me know I've tried, a lot.\n\n``` bash\nexport EDITOR=nvim\nipython\n\u003cF2\u003e\n```\n\nbetter yet add `export EDITOR=nvim` to your .zshrc\n\n``` bash\n# ~/.zshrc\nexport EDITOR=nvim\n```\n",
      "summary": "Today I accidentally ran f2 in ipython to discover that it opens your $EDITOR! I use this feature quite often in zsh, it is bound to for me, and since I have...",
      "date_published": "2024-04-18T20:40:41Z",
      "date_modified": "2024-04-18T20:40:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-247/",
      "url": "https://go.waylonwalker.com/thought-247/",
      "title": "💭 Devin's Upwork \"side hustle\" exposed (Changelog News #90)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/news/90\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://snap.fly.dev/news/90/img\" alt=\"Devin\u0026#39;s Upwork \u0026#34;side hustle\u0026#34; exposed (Changelog News #90) — YouTuber \u0026#34;Internet of Bugs\u0026#34; breaks down why AI \u0026#34;software engineer\u0026#34; Devin is no Upwork hero, Redka is Anton Zhiyanov\u0026#39;s attempt to reimplement Redis with SQLite, OpenTofu issues its response to Hashicorp\u0026#39;s Cease and Desist letter, Brian LeRoux introduces Enhance WASM \u0026amp; PumpkinOS is not your average PalmOS emulator.\" loading=\"lazy\"/ data-glightbox=\"description: Devin\u0026#39;s Upwork \u0026#34;side hustle\u0026#34; exposed (Changelog News #90) — YouTuber \u0026#34;Internet of Bugs\u0026#34; breaks down why AI \u0026#34;software engineer\u0026#34; Devin is no Upwork hero, Redka is Anton Zhiyanov\u0026#39;s attempt to reimplement Redis with SQLite, OpenTofu issues its response to Hashicorp\u0026#39;s Cease and Desist letter, Brian LeRoux introduces Enhance WASM \u0026amp; PumpkinOS is not your average PalmOS emulator.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDevin\u0026#39;s Upwork \u0026#34;side hustle\u0026#34; exposed (Changelog News #90)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYouTuber \u0026#34;Internet of Bugs\u0026#34; breaks down why AI \u0026#34;software engineer\u0026#34; Devin is no Upwork hero, Redka is Anton Zhiyanov\u0026#39;s attempt to reimplement Redis with SQLite, OpenTofu issues its response to Hashi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn 2024 is such a shit show, now Devin seems to be out as a complete scam.  It’s really teaching us to have skepticism for what you find on the internet.  Turns out that when broken down frame by frame much of the description in the video was a straight up lie.  Personally it seemed quite plausible that it was percentage points better than the competition, but I was not holding my breath for it to be a hands off engineer.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/news/90\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/news/90/img\" alt=\"Devin\u0026#39;s Upwork \u0026#34;side hustle\u0026#34; exposed (Changelog News #90) — YouTuber \u0026#34;Internet of Bugs\u0026#34; breaks down why AI \u0026#34;software engineer\u0026#34; Devin is no Upwork hero, Redka is Anton Zhiyanov\u0026#39;s attempt to reimplement Redis with SQLite, OpenTofu issues its response to Hashicorp\u0026#39;s Cease and Desist letter, Brian LeRoux introduces Enhance WASM \u0026amp; PumpkinOS is not your average PalmOS emulator.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDevin\u0026#39;s Upwork \u0026#34;side hustle\u0026#34; exposed (Changelog News #90)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYouTuber \u0026#34;Internet of Bugs\u0026#34; breaks down why AI \u0026#34;software engineer\u0026#34; Devin is no Upwork hero, Redka is Anton Zhiyanov\u0026#39;s attempt to reimplement Redis with SQLite, OpenTofu issues its response to Hashi...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn 2024 is such a shit show, now Devin seems to be out as a complete scam.  It's really teaching us to have skepticism for what you find on the internet.  Turns out that when broken down frame by frame much of the description in the video was a straight up lie.  Personally it seemed quite plausible that it was percentage points better than the competition, but I was not holding my breath for it to be a hands off engineer.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/news/90",
      "date_published": "2024-04-18T01:18:04Z",
      "date_modified": "2024-04-18T01:18:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tech",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-246/",
      "url": "https://go.waylonwalker.com/thought-246/",
      "title": "💭 sql - How can I list the tables in a SQLite database file that...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/82875/how-can-i-list-the-tables-in-a-sqlite-database-file-that-was-opened-with-attach#answer-83195\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI learned about the sqlite_master table from this stack overflow answer.  This helps make a lot of sense to how sqlite works.  The master table contains all the sqlite objects and the sql to create them.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe .tables, and .schema “helper” functions don’t look into ATTACHed databases: they just query the SQLITE_MASTER table for the “main” database. Consequently, if you used\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esqlite3 database.db \u003cspan class=\"s2\"\u003e\u0026#34;SELECT * from sqlite_master;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/82875/how-can-i-list-the-tables-in-a-sqlite-database-file-that-was-opened-with-attach#answer-83195\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI learned about the sqlite_master table from this stack overflow answer.  This helps make a lot of sense to how sqlite works.  The master table contains all the sqlite objects and the sql to create them.\n\n\u003e The .tables, and .schema \"helper\" functions don't look into ATTACHed databases: they just query the SQLITE_MASTER table for the \"main\" database. Consequently, if you used\n\n``` bash\nsqlite3 database.db \"SELECT * from sqlite_master;\"\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/82875/how-can-i-list-the-tables-in-a-sqlite-database-file-that-was-opened-with-attach#answer-83195",
      "date_published": "2024-04-18T01:13:59Z",
      "date_modified": "2024-04-18T01:13:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sqlmodel-indexes/",
      "url": "https://go.waylonwalker.com/sqlmodel-indexes/",
      "title": "sqlmodel indexes",
      "content_html": "\u003cp\u003eI’ve really been enjoying using sqlmodel for my projects that need a database.\nOne thing that I definitely lacked on for too long was indexing my database.  I\nhit a point with one database where it was taking 7s for pretty simple\npaginated queries to return 10 records.\u003c/p\u003e\n\u003cp\u003eFor every field that you will be querying on, you can create an index, by\nsetting it equal to \u003ccode\u003eField(index=True)\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eHero\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprimary_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eindex\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esecret_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eindex\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cem\u003eexample courtesy of the docs\u003c/em\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e primary keys are indexed by default.\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe docs cover this pretty well, and in quite depth - \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/indexes/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/sqlmodel.tiangolo.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/sqlmodel.tiangolo.com.png\" class=\"has-avatar  has-avatar-before\"\u003eOptimizing Queries\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nI've really been enjoying using sqlmodel for my projects that need a database.\nOne thing that I definitely lacked on for too long was indexing my database.  I\nhit a point with one database where it was taking 7s for pretty simple\npaginated queries to return 10 records.\n\nFor every field that you will be querying on, you can create an index, by\nsetting it equal to `Field(index=True)`\n\n``` python\nclass Hero(SQLModel, table=True):\n    id: int | None = Field(default=None, primary_key=True)\n    name: str = Field(index=True)\n    secret_name: str\n    age: int | None = Field(default=None, index=True)\n```\n\n_example courtesy of the docs_\n\n!!! Note\n     primary keys are indexed by default.\n\n\u003e The docs cover this pretty well, and in quite depth - [Optimizing Queries](https://sqlmodel.tiangolo.com/tutorial/indexes/)\n",
      "summary": "I've really been enjoying using sqlmodel for my projects that need a database. One thing that I definitely lacked on for too long was indexing my database. I...",
      "date_published": "2024-04-17T21:55:25Z",
      "date_modified": "2024-04-17T21:55:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-245/",
      "url": "https://go.waylonwalker.com/thought-245/",
      "title": "💭 inline-snapshot",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://15r10nk.github.io/inline-snapshot/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e15r10nk.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a cool snapshot testing tool that automatically creates, and updates test values for you.\u003c/p\u003e\n\u003cp\u003eStarting with some test code.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003einline_snapshot\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esomething\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e1548\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"mi\"\u003e18489\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_something\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003esomething\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003enow if I run \u003ccode\u003epytest\u003c/code\u003e my tests will fail because my assert will fail, but if I run \u003ccode\u003epytest --inline-snapshot=create\u003c/code\u003e it will fill out my snapshot values and the file will then look like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003einline_snapshot\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esomething\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e1548\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"mi\"\u003e18489\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_something\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003esomething\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e28620972\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://15r10nk.github.io/inline-snapshot/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e15r10nk.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a cool snapshot testing tool that automatically creates, and updates test values for you.\n\nStarting with some test code.\n\n``` python\nfrom inline_snapshot import snapshot\n\n\ndef something():\n    return 1548 * 18489\n\n\ndef test_something():\n    assert something() == snapshot()\n```\n\nnow if I run `pytest` my tests will fail because my assert will fail, but if I run `pytest --inline-snapshot=create` it will fill out my snapshot values and the file will then look like this.\n\n``` python\nfrom inline_snapshot import snapshot\n\n\ndef something():\n    return 1548 * 18489\n\n\ndef test_something():\n    assert something() == snapshot(28620972)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://15r10nk.github.io/inline-snapshot/",
      "date_published": "2024-04-17T18:37:15Z",
      "date_modified": "2024-04-17T18:37:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "testing",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-inline-snapshot/",
      "url": "https://go.waylonwalker.com/python-inline-snapshot/",
      "title": "python inline snapshot",
      "content_html": "\u003cp\u003e\u003ccode\u003einline-snapshot\u003c/code\u003e is a new tool that I am trying out for python testing.  It\ntakes snapshots of your outputs and places them inline with the test.\u003c/p\u003e\n\u003cp\u003eHere is the most basic starter.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003einline_snapshot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_one\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow when I run \u003ccode\u003epytest\u003c/code\u003e my tests will \u003cstrong\u003efail\u003c/strong\u003e because my assert has no value, but if I\nrun \u003ccode\u003epytest --inline-snapshot=create\u003c/code\u003e it will fill out my snapshot values and the\nfile will then look like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003einline_snapshot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_one\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt also works with pydantic models.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enickname\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_my_model_instance\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003eMyModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Waylon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMyModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Waylon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_my_model_fields\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eme\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMyModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Waylon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enickname\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Waylon\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003eme\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Waylon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003eme\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eage\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003eme\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003enickname\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Waylon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n`inline-snapshot` is a new tool that I am trying out for python testing.  It\ntakes snapshots of your outputs and places them inline with the test.\n\nHere is the most basic starter.\n\n``` python\nimport inline_snapshot\n\ndef test_one():\n    assert 1 == snapshot()\n```\n\nNow when I run `pytest` my tests will **fail** because my assert has no value, but if I\nrun `pytest --inline-snapshot=create` it will fill out my snapshot values and the\nfile will then look like this.\n\n``` python\nimport inline_snapshot\n\ndef test_one():\n    assert 1 == snapshot(1)\n```\n\nIt also works with pydantic models.\n\n``` python\nclass MyModel(BaseModel):\n    name: str\n    age: int\n    nickname: str | None = None\n\n\ndef test_my_model_instance():\n    assert MyModel(name=\"Waylon\", age=1) == snapshot(MyModel(name=\"Waylon\", age=1))\n\n\ndef test_my_model_fields():\n    me = MyModel(name=\"Waylon\", age=1, nickname='Waylon')\n    assert me.name == snapshot(\"Waylon\")\n    assert me.age == snapshot(1)\n    assert me.nickname == snapshot(\"Waylon\")\n```\n",
      "summary": "is a new tool that I am trying out for python testing. It takes snapshots of your outputs and places them inline with the test.",
      "date_published": "2024-04-17T13:32:53Z",
      "date_modified": "2024-04-17T13:32:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nalgeon-redka/",
      "url": "https://go.waylonwalker.com/nalgeon-redka/",
      "title": "⭐ nalgeon redka",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/nalgeon\" 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\"\u003enalgeon\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/nalgeon/redka\" 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\"\u003eredka\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eRedis re-implemented with SQLite\u003c/p\u003e\n",
      "content_text": "\n[nalgeon](https://github.com/nalgeon) has done a fantastic job with [redka](https://github.com/nalgeon/redka). Highly recommend taking a look.\n\nRedis re-implemented with SQLite\n",
      "summary": "nalgeon has done a fantastic job with redka. Highly recommend taking a look.",
      "date_published": "2024-04-17T12:06:05Z",
      "date_modified": "2024-04-17T12:06:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-244/",
      "url": "https://go.waylonwalker.com/thought-244/",
      "title": "💭 nalgeon/redka: Redis re-implemented with SQLite",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/nalgeon/redka\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/783038627/6aedc9a7-e25a-4b0e-a6ba-3169932ee993\" alt=\"GitHub - nalgeon/redka: Redis re-implemented with SQL — Redis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - nalgeon/redka: Redis re-implemented with SQL — Redis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - nalgeon/redka: Redis re-implemented with SQL\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRedis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eRedka a sick new redis compatable api, that uses sqlite as its backend datastore.  It feels lightweight to use as it is a single small binary.  Data does not have to fit into memory as it uses sqlite to store data.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/nalgeon/redka\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/783038627/6aedc9a7-e25a-4b0e-a6ba-3169932ee993\" alt=\"GitHub - nalgeon/redka: Redis re-implemented with SQL — Redis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - nalgeon/redka: Redis re-implemented with SQL\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRedis re-implemented with SQL. Contribute to nalgeon/redka development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nRedka a sick new redis compatable api, that uses sqlite as its backend datastore.  It feels lightweight to use as it is a single small binary.  Data does not have to fit into memory as it uses sqlite to store data.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/nalgeon/redka",
      "date_published": "2024-04-17T01:59:08Z",
      "date_modified": "2024-04-17T01:59:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "redis",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sqlite-vacuum/",
      "url": "https://go.waylonwalker.com/sqlite-vacuum/",
      "title": "sqlite vacuum",
      "content_html": "\u003cp\u003eToday I learned how to VACUUM a sqlite database and cut its size in about half.\nIt’s a database that I have had running for quite awhile and has some decent\ntraffic on it.\u003c/p\u003e\n\u003cp\u003eWhy is it important to do a VACUUM? In short its becuase the file system gets\nfragmented with as data is updated. On delete the files are removed from the\ndatabase and marked as available for reuse in the filesystem, but the space is\nnot reclaimed.\u003c/p\u003e\n\u003cp\u003eTo VACUUM a database, run the following sql command.  You can do it right form\nthe sqlite shell by running \u003ccode\u003esqlite3\u003c/code\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYou will need about double the current size of the database as free space to\ndo the VACUUM, you need space for a full copy, journaling or write ahead\nlogs, and the existing database.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eVACUUM\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe docs are fantastic for \u003ca href=\"https://www.sqlite.org/lang_vacuum.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.sqlite.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.sqlite.org.ico\" class=\"has-avatar  has-avatar-before\"\u003evacuum\u003c/a\u003e.\u003c/p\u003e\n",
      "content_text": "\nToday I learned how to VACUUM a sqlite database and cut its size in about half.\nIt's a database that I have had running for quite awhile and has some decent\ntraffic on it.\n\nWhy is it important to do a VACUUM? In short its becuase the file system gets\nfragmented with as data is updated. On delete the files are removed from the\ndatabase and marked as available for reuse in the filesystem, but the space is\nnot reclaimed.\n\nTo VACUUM a database, run the following sql command.  You can do it right form\nthe sqlite shell by running `sqlite3`.\n\n\u003e You will need about double the current size of the database as free space to\n\u003e do the VACUUM, you need space for a full copy, journaling or write ahead\n\u003e logs, and the existing database.\n\n``` sql\nVACUUM;\n```\n\nThe docs are fantastic for [vacuum](https://www.sqlite.org/lang_vacuum.html).\n",
      "summary": "Today I learned how to VACUUM a sqlite database and cut its size in about half. It's a database that I have had running for quite awhile and has some decent...",
      "date_published": "2024-04-16T21:31:24Z",
      "date_modified": "2024-04-16T21:31:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "data"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-243/",
      "url": "https://go.waylonwalker.com/thought-243/",
      "title": "💭 Arch Linux - News: The xz package has been backdoored",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://archlinux.org/news/the-xz-package-has-been-backdoored/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/archlinux.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/archlinux.org.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eArch Linux - News: The xz package has been backdoored\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003earchlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCheck your system to see if you are vulnerable to the xz backdoor.\u003c/p\u003e\n\u003cp\u003eI found this line most pertanent to me.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1) contain this backdoor.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAlso it appears that arch is not vulnerable as it does not directly link openssh to liblzma, so the known attack vecotor is not possible.  read to the end of the linked article for more.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://archlinux.org/news/the-xz-package-has-been-backdoored/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eArch Linux - News: The xz package has been backdoored\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003earchlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCheck your system to see if you are vulnerable to the xz backdoor.\n\nI found this line most pertanent to me.\n\n\u003e The xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1) contain this backdoor.\n\nAlso it appears that arch is not vulnerable as it does not directly link openssh to liblzma, so the known attack vecotor is not possible.  read to the end of the linked article for more.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://archlinux.org/news/the-xz-package-has-been-backdoored/",
      "date_published": "2024-04-16T13:00:33Z",
      "date_modified": "2024-04-16T13:00:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "arch",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-242/",
      "url": "https://go.waylonwalker.com/thought-242/",
      "title": "💭 My harpoon config",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eInstall it\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"s2\"\u003e\u0026#34;ThePrimeagen/harpoon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003ebranch\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;harpoon2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003edependencies\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;nvim-lua/plenary.nvim\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker.plugins.harpoon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eharpoon config\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;harpoon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eM\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eM.setup\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- REQUIRED\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- REQUIRED\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F10\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F9\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon.ui\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etoggle_quick_menu\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F1\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F2\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F3\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- these are cnext/cprev\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- vim.keymap.set(\u0026#34;n\u0026#34;, \u0026#34;\u0026lt;F4\u0026gt;\u0026#34;, function() harpoon:list():select(4) end)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- vim.keymap.set(\u0026#34;n\u0026#34;, \u0026#34;\u0026lt;F5\u0026gt;\u0026#34;, function() harpoon:list():select(5) end)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F6\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Toggle previous \u0026amp; next buffers stored within Harpoon list\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F7\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003eprev\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;F8\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\u003cspan class=\"n\"\u003enext\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- basic telescope configuration\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003econf\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;telescope.config\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"n\"\u003evalues\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e \u003cspan class=\"nf\"\u003etoggle_telescope\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eharpoon_files\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eitem\u003c/span\u003e \u003cspan class=\"kr\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eipairs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eharpoon_files.items\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"kr\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable.insert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eitem.value\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;telescope.pickers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"n\"\u003enew\u003c/span\u003e\u003cspan class=\"p\"\u003e({},\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eprompt_title\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Harpoon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efinder\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;telescope.finders\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"n\"\u003enew_table\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresults\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epreviewer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003econf.file_previewer\u003c/span\u003e\u003cspan class=\"p\"\u003e({}),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esorter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003econf.generic_sorter\u003c/span\u003e\u003cspan class=\"p\"\u003e({}),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}):\u003c/span\u003e\u003cspan class=\"n\"\u003efind\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-e\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003etoggle_telescope\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eharpoon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003edesc\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Open harpoon window\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nInstall it\n\n``` lua\n\t{\n\t\t\"ThePrimeagen/harpoon\",\n\t\tbranch = \"harpoon2\",\n\t\tdependencies = { \"nvim-lua/plenary.nvim\" },\n\t\tconfig = function()\n\t\t\trequire(\"waylonwalker.plugins.harpoon\").setup()\n\t\tend,\n\t},\n```\n\nharpoon config\n\n``` lua\nlocal harpoon = require(\"harpoon\")\nM = {}\n\nM.setup = function()\n\n-- REQUIRED\nharpoon:setup()\n-- REQUIRED\n\nvim.keymap.set(\"n\", \"\u003cF10\u003e\", function() harpoon:list():append() end)\nvim.keymap.set(\"n\", \"\u003cF9\u003e\", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end)\n\nvim.keymap.set(\"n\", \"\u003cF1\u003e\", function() harpoon:list():select(1) end)\nvim.keymap.set(\"n\", \"\u003cF2\u003e\", function() harpoon:list():select(2) end)\nvim.keymap.set(\"n\", \"\u003cF3\u003e\", function() harpoon:list():select(3) end)\n-- these are cnext/cprev\n-- vim.keymap.set(\"n\", \"\u003cF4\u003e\", function() harpoon:list():select(4) end)\n-- vim.keymap.set(\"n\", \"\u003cF5\u003e\", function() harpoon:list():select(5) end)\nvim.keymap.set(\"n\", \"\u003cF6\u003e\", function() harpoon:list():select(6) end)\n\n-- Toggle previous \u0026 next buffers stored within Harpoon list\nvim.keymap.set(\"n\", \"\u003cF7\u003e\", function() harpoon:list():prev() end)\nvim.keymap.set(\"n\", \"\u003cF8\u003e\", function() harpoon:list():next() end)\n\n-- basic telescope configuration\nlocal conf = require(\"telescope.config\").values\nlocal function toggle_telescope(harpoon_files)\n    local file_paths = {}\n    for _, item in ipairs(harpoon_files.items) do\n        table.insert(file_paths, item.value)\n    end\n\n    require(\"telescope.pickers\").new({}, {\n        prompt_title = \"Harpoon\",\n        finder = require(\"telescope.finders\").new_table({\n            results = file_paths,\n        }),\n        previewer = conf.file_previewer({}),\n        sorter = conf.generic_sorter({}),\n    }):find()\nend\n\nvim.keymap.set(\"n\", \"\u003cC-e\u003e\", function() toggle_telescope(harpoon:list()) end,\n    { desc = \"Open harpoon window\" })\n\nend\n\nreturn M\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2024-04-16T01:34:38Z",
      "date_modified": "2024-04-16T01:34:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailwind-animations/",
      "url": "https://go.waylonwalker.com/tailwind-animations/",
      "title": "Tailwind Animations",
      "content_html": "\u003cp\u003eI learned that tailwind animations are pretty easy to add only needing a few\nclasses.  For some reason though my brain broke, thinking that I could\ndynamically change the number and you can’t cause there are only so many pre\ncompiled classes without using an arbitrary value with brackets.\u003c/p\u003e\n\u003cp\u003eHere are the classes that I used to transition my colors very slowly.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;square\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;transition-colors ease-in-out duration-700\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd the entire square element.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;square\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;w-16 h-16 bg-rose-500 rounded border border-4 border-rose-800 hover:bg-indigo-600 hover:border-yellow-500 transition-colors ease-in-out duration-700\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI learned that tailwind animations are pretty easy to add only needing a few\nclasses.  For some reason though my brain broke, thinking that I could\ndynamically change the number and you can't cause there are only so many pre\ncompiled classes without using an arbitrary value with brackets.\n\nHere are the classes that I used to transition my colors very slowly.\n\n``` html\n\u003cdiv id=\"square\"\n      class=\"transition-colors ease-in-out duration-700\"\u003e\n\u003c/div\u003e\n```\n\nAnd the entire square element.\n\n``` html\n\u003cdiv id=\"square\"\n      class=\"w-16 h-16 bg-rose-500 rounded border border-4 border-rose-800 hover:bg-indigo-600 hover:border-yellow-500 transition-colors ease-in-out duration-700\"\u003e\n\u003c/div\u003e\n```\n",
      "summary": "I learned that tailwind animations are pretty easy to add only needing a few classes. For some reason though my brain broke, thinking that I could...",
      "date_published": "2024-04-15T21:19:21Z",
      "date_modified": "2024-04-15T21:19:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/how-to-kill-ollama-server/",
      "url": "https://go.waylonwalker.com/how-to-kill-ollama-server/",
      "title": "How to kill ollama server",
      "content_html": "\u003cp\u003eI recently updated \u003ca href=\"https://ollama.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/ollama.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/ollama.com.png\" class=\"has-avatar  has-avatar-before\"\u003eollama\u003c/a\u003e, and it now installs a systemd\nservice that I was not expecting.  Seems like a great option, but I hadn’t\nexpeted this and I was able to kill it previously.  It was using up gpu, and I\ndo other things on my machine with a gpu.  I tried pkill, kill, and everything,\nit was still coming back.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNo matter what it comes back\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# stop it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl stop ollama.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# disable it if you want\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl disable ollama.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# confirm its status\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl status ollama.service\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can confirm this with the following command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# checking running processes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eps aux \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep ollama\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epgrep ollama\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# checking gpu processes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egpustat --show-cmd --show-pid\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNext time you want to start you can do it as before with \u003ccode\u003eollama serve\u003c/code\u003e.\u003c/p\u003e\n",
      "content_text": "\nI recently updated [ollama](https://ollama.com/), and it now installs a systemd\nservice that I was not expecting.  Seems like a great option, but I hadn't\nexpeted this and I was able to kill it previously.  It was using up gpu, and I\ndo other things on my machine with a gpu.  I tried pkill, kill, and everything,\nit was still coming back.\n\n\u003e No matter what it comes back\n\n``` bash\n# stop it\nsystemctl stop ollama.service\n\n# disable it if you want\nsystemctl disable ollama.service\n\n# confirm its status\nsystemctl status ollama.service\n```\n\nYou can confirm this with the following command.\n\n``` bash\n# checking running processes\nps aux | grep ollama\npgrep ollama\n\n# checking gpu processes\ngpustat --show-cmd --show-pid\n```\n\nNext time you want to start you can do it as before with `ollama serve`.\n",
      "summary": "I recently updated ollama, and it now installs a systemd service that I was not expecting. Seems like a great option, but I hadn't expeted this and I was...",
      "date_published": "2024-04-14T18:31:36Z",
      "date_modified": "2024-04-14T18:31:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "llm"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-241/",
      "url": "https://go.waylonwalker.com/thought-241/",
      "title": "💭 From Vim To Zed - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ZRnWmNdf5IE\" title=\"From Vim To Zed\" playlabel=\"Play: From Vim To Zed\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI found this statement quite intriguing.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emulti-cursors are just macros.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis is quite a philisophical video and mostly prime talking about the things that make vim vim, and what prime needs in and editor vs what he can live without.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ZRnWmNdf5IE\" title=\"From Vim To Zed\" playlabel=\"Play: From Vim To Zed\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI found this statement quite intriguing.\n\n\u003e multi-cursors are just macros.\n\nThis is quite a philisophical video and mostly prime talking about the things that make vim vim, and what prime needs in and editor vs what he can live without.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ZRnWmNdf5IE\u0026t=612",
      "date_published": "2024-04-13T13:42:56Z",
      "date_modified": "2024-04-13T13:42:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/composing-typer-clis/",
      "url": "https://go.waylonwalker.com/composing-typer-clis/",
      "title": "Composing Typer clis",
      "content_html": "\u003cp\u003eTyper makes it easy to compose your cli applications, like you might with a web\nrouter if you are more familiar with that.  This allows you to build smaller\napplications that compose into a larger application.\u003c/p\u003e\n\u003cp\u003eYou will see similar patterns in the wild, namely the \u003ccode\u003eaws\u003c/code\u003e cli which always\nhas the \u003ccode\u003eaws \u0026lt;command\u0026gt; \u0026lt;subcommand\u0026gt;\u003c/code\u003e pattern.\u003c/p\u003e\n\u003cp\u003eLets setup the cli app itself first.  You can put it in \u003ccode\u003eproject/cli/cli.py\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etyper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eproject.cli.api\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eapi_app\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eproject.cli.config\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003econfig_app\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eproject.cli.user\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003euser_app\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eproject.cli.run\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003erun_app\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etyper\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTyper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_typer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eapi_app\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;api\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_typer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econfig_app\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;config\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_typer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003euser_app\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_typer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erun_app\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;run\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCreating an app that will become a command is the same as creating a regular\napp in Typer.  We need to create a callback that will become our command, and a\ncommand that will become our subcommand in the parent app.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etyper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.console\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eproject.config\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig_app\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etyper\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTyper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@config_app.callback\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;model cli\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@config_app.command\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eshow\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eproject_config\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eget_config\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efokais_config\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSetting up the entrypoint in pyproject.toml.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003escripts\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"c\"\u003e# \u0026lt;- this project is part of the config DO NOT change it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;project.cli.cli:app\u0026#34;\u003c/span\u003e \u003cspan class=\"c\"\u003e# \u0026lt;- This project is the project name, DO change it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow you can see each cli application as a sub command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ project --help\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e Usage: project \u003cspan class=\"o\"\u003e[\u003c/span\u003eOPTIONS\u003cspan class=\"o\"\u003e]\u003c/span\u003e COMMAND \u003cspan class=\"o\"\u003e[\u003c/span\u003eARGS\u003cspan class=\"o\"\u003e]\u003c/span\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────╮\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ --install-completion  \u003cspan class=\"o\"\u003e[\u003c/span\u003ebash\u003cspan class=\"p\"\u003e|\u003c/span\u003ezsh\u003cspan class=\"p\"\u003e|\u003c/span\u003efish\u003cspan class=\"p\"\u003e|\u003c/span\u003epowershell\u003cspan class=\"p\"\u003e|\u003c/span\u003epwsh\u003cspan class=\"o\"\u003e]\u003c/span\u003e  Install completion \u003cspan class=\"k\"\u003efor\u003c/span\u003e the specified shell.│\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│                                                        \u003cspan class=\"o\"\u003e[\u003c/span\u003edefault: None\u003cspan class=\"o\"\u003e]\u003c/span\u003e                            │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ --show-completion     \u003cspan class=\"o\"\u003e[\u003c/span\u003ebash\u003cspan class=\"p\"\u003e|\u003c/span\u003ezsh\u003cspan class=\"p\"\u003e|\u003c/span\u003efish\u003cspan class=\"p\"\u003e|\u003c/span\u003epowershell\u003cspan class=\"p\"\u003e|\u003c/span\u003epwsh\u003cspan class=\"o\"\u003e]\u003c/span\u003e  Show completion \u003cspan class=\"k\"\u003efor\u003c/span\u003e the specified shell,   │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│                                                        to copy it or customize the installation.  │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│                                                        \u003cspan class=\"o\"\u003e[\u003c/span\u003edefault: None\u003cspan class=\"o\"\u003e]\u003c/span\u003e                            │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ --help                                                 Show this message and exit.                │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e╰───────────────────────────────────────────────────────────────────────────────────────────────────╯\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────╮\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ api                        model cli                                                              │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ config                     config cli                                                             │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ user                       user cli                                                               │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ run                        run cli                                                                │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e╰───────────────────────────────────────────────────────────────────────────────────────────────────╯\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn the example above we can run the command \u003ccode\u003eproject config show\u003c/code\u003e to see the\ncurrent configuration of our project.\u003c/p\u003e\n",
      "content_text": "\nTyper makes it easy to compose your cli applications, like you might with a web\nrouter if you are more familiar with that.  This allows you to build smaller\napplications that compose into a larger application.\n\nYou will see similar patterns in the wild, namely the `aws` cli which always\nhas the `aws \u003ccommand\u003e \u003csubcommand\u003e` pattern.\n\nLets setup the cli app itself first.  You can put it in `project/cli/cli.py`.\n\n``` python\nimport typer\n\nfrom project.cli.api import api_app\nfrom project.cli.config import config_app\nfrom project.cli.user import user_app\nfrom project.cli.run import run_app\n\napp = typer.Typer()\n\napp.add_typer(api_app, name=\"api\")\napp.add_typer(config_app, name=\"config\")\napp.add_typer(user_app, name=\"user\")\napp.add_typer(run_app, name=\"run\")\n```\n\nCreating an app that will become a command is the same as creating a regular\napp in Typer.  We need to create a callback that will become our command, and a\ncommand that will become our subcommand in the parent app.\n\n``` python\nimport typer\nfrom rich.console import Console\n\nfrom project.config import get_config\n\nconfig_app = typer.Typer()\n\n@config_app.callback()\ndef config():\n    \"model cli\"\n\n\n@config_app.command()\ndef show(\n):\n    project_config = get_config(env)\n    Console().print(fokais_config)\n```\n\nSetting up the entrypoint in pyproject.toml.\n\n``` toml\n[project.scripts] # \u003c- this project is part of the config DO NOT change it\nproject = \"project.cli.cli:app\" # \u003c- This project is the project name, DO change it\n```\n\nNow you can see each cli application as a sub command.\n\n``` bash\n❯ project --help\n\n Usage: project [OPTIONS] COMMAND [ARGS]...\n\n╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────╮\n│ --install-completion  [bash|zsh|fish|powershell|pwsh]  Install completion for the specified shell.│\n│                                                        [default: None]                            │\n│ --show-completion     [bash|zsh|fish|powershell|pwsh]  Show completion for the specified shell,   │\n│                                                        to copy it or customize the installation.  │\n│                                                        [default: None]                            │\n│ --help                                                 Show this message and exit.                │\n╰───────────────────────────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────╮\n│ api                        model cli                                                              │\n│ config                     config cli                                                             │\n│ user                       user cli                                                               │\n│ run                        run cli                                                                │\n╰───────────────────────────────────────────────────────────────────────────────────────────────────╯\n```\n\nIn the example above we can run the command `project config show` to see the\ncurrent configuration of our project.\n",
      "summary": "Typer makes it easy to compose your cli applications, like you might with a web router if you are more familiar with that. This allows you to build smaller...",
      "date_published": "2024-04-13T08:27:26Z",
      "date_modified": "2024-04-13T08:27:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailwind-custom-size/",
      "url": "https://go.waylonwalker.com/tailwind-custom-size/",
      "title": "tailwind arbitrary values",
      "content_html": "\u003cp\u003eI learned not to fear the arbitrary size feature of tailwind.  While building\nout \u003ca href=\"https://reader.waylonwalker.com\"\u003ereader.waylonwalker.com\u003c/a\u003e I kept getting\ncontent flowing off the screen, and struggling to keep it on the screen.  I\nreally felt that I should be able to do this with vanilla tailwind, but after\nsome encouragement from Twitter I decided to lean on arbitrary values and it\nworked.\u003c/p\u003e\n\u003cp\u003eDon’t fear the arbitrary values.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eli\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;max-w-[100vw]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eli\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eLearn more about using-arbitrary-values from their docs\n\u003ca href=\"https://tailwindcss.com/docs/adding-custom-styles#using-arbitrary-values\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/tailwindcss.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/tailwindcss.com.png\" class=\"has-avatar  has-avatar-before\"\u003edocs\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI learned not to fear the arbitrary size feature of tailwind.  While building\nout [reader.waylonwalker.com](https://reader.waylonwalker.com) I kept getting\ncontent flowing off the screen, and struggling to keep it on the screen.  I\nreally felt that I should be able to do this with vanilla tailwind, but after\nsome encouragement from Twitter I decided to lean on arbitrary values and it\nworked.\n\nDon't fear the arbitrary values.\n\n``` html\n\u003cli class=\"max-w-[100vw]\"\u003e\n\u003c/li\u003e\n```\n\nLearn more about using-arbitrary-values from their docs\n[docs](https://tailwindcss.com/docs/adding-custom-styles#using-arbitrary-values)\n",
      "summary": "I learned not to fear the arbitrary size feature of tailwind. While building out reader.waylonwalker.com I kept getting content flowing off the screen, and...",
      "date_published": "2024-04-12T21:21:42Z",
      "date_modified": "2024-04-12T21:21:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-240/",
      "url": "https://go.waylonwalker.com/thought-240/",
      "title": "💭 Use an llm to automagically generate meaningful git commit mes...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://harper.blog/2024/03/11/use-an-llm-to-automagically-generate-meaningful-git-commit-messages/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://harper.blog/images/social_card_bg_harper_hu_8387c1b95157265.png\" alt=\"Use an llm to automagically generate meaningful git commit messages — I\" loading=\"lazy\"/ data-glightbox=\"description: Use an llm to automagically generate meaningful git commit messages — I\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUse an llm to automagically generate meaningful git commit messages\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eharper.blog\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is pretty sick, I wanted this early on when I was making lockhart.  I wanted to do the \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e hook thing but could not figure it out and did not know that \u003ccode\u003eprepare-commit-msg\u003c/code\u003e was a hook that I could use.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGit Hooked\nThen I remembered! Git hooks! Lol. Why would I have that in my brain - who knows!\u003c/p\u003e\n\u003cp\u003eI asked claude again, and they whipped up a simple script that would act as a hook that triggers with the prepare-commit-msg event.\u003c/p\u003e\n\u003cp\u003eThis is awesome, cuz if you want to add a git message, you can skip the hook. But if you are lazy, you exclude the message and it will call the LLM.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSimon Willison’s llm cli comes in clutch here, it has such a good intereface to allow a prompt to be piped in, but the system prompt be set by -s.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003egpt\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;!f() { git diff \u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e | llm -s \\\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecat ~/.config/prompts/commit-system-prompt.txt\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\\\u0026#34; }; f\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eI love hacking on projects, but often I am super bad at making commits that make sense.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI completely relate to this statement, and this is why I am trying it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://harper.blog/2024/03/11/use-an-llm-to-automagically-generate-meaningful-git-commit-messages/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://harper.blog/images/social_card_bg_harper_hu_8387c1b95157265.png\" alt=\"Use an llm to automagically generate meaningful git commit messages — I\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUse an llm to automagically generate meaningful git commit messages\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eharper.blog\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is pretty sick, I wanted this early on when I was making lockhart.  I wanted to do the git hook thing but could not figure it out and did not know that `prepare-commit-msg` was a hook that I could use.\n\n\u003e Git Hooked\n\u003e Then I remembered! Git hooks! Lol. Why would I have that in my brain - who knows!\n\u003e \n\u003e I asked claude again, and they whipped up a simple script that would act as a hook that triggers with the prepare-commit-msg event.\n\u003e\n\u003e This is awesome, cuz if you want to add a git message, you can skip the hook. But if you are lazy, you exclude the message and it will call the LLM.\n\n\nSimon Willison's llm cli comes in clutch here, it has such a good intereface to allow a prompt to be piped in, but the system prompt be set by -s.\n\n``` bash\ngpt = \"!f() { git diff $1 | llm -s \\\"$(cat ~/.config/prompts/commit-system-prompt.txt)\\\" }; f\"\n```\n\n\n\u003e I love hacking on projects, but often I am super bad at making commits that make sense.\n\nI completely relate to this statement, and this is why I am trying it.\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://harper.blog/2024/03/11/use-an-llm-to-automagically-generate-meaningful-git-commit-messages/",
      "date_published": "2024-04-11T13:35:50Z",
      "date_modified": "2024-04-11T13:35:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fix-npm-global-install-needs-sudo/",
      "url": "https://go.waylonwalker.com/fix-npm-global-install-needs-sudo/",
      "title": "fix npm global install needs sudo",
      "content_html": "\u003cp\u003eEach time I go to set up npm I am frustrated by the errors saying that I don’t\nhave permission to \u003ccode\u003enpm i -g \u0026lt;package\u0026gt;\u003c/code\u003e, and it’s frustrating.  And I forget\nwhat I need to do to tell npm to install packages in a directory I own, and my\nshell to look there so that I can use the executables.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir ~/.npm-global\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eNPM_CONFIG_PREFIX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e~/.npm-global\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e:~/.npm-global/bin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor the fix to remain persistent you need to put these two lines in your shell\nprofile like \u003ccode\u003e~/.bashrc\u003c/code\u003e or \u003ccode\u003e~/.zshrc\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eNPM_CONFIG_PREFIX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e~/.npm-global\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e:~/.npm-global/bin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nEach time I go to set up npm I am frustrated by the errors saying that I don't\nhave permission to `npm i -g \u003cpackage\u003e`, and it's frustrating.  And I forget\nwhat I need to do to tell npm to install packages in a directory I own, and my\nshell to look there so that I can use the executables.\n\n``` bash\nmkdir ~/.npm-global\nexport NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin\n```\n\nFor the fix to remain persistent you need to put these two lines in your shell\nprofile like `~/.bashrc` or `~/.zshrc`.\n\n``` bash\nexport NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin\n```\n",
      "summary": "Each time I go to set up npm I am frustrated by the errors saying that I don't have permission to , and it's frustrating. And I forget what I need to do to...",
      "date_published": "2024-04-11T13:28:17Z",
      "date_modified": "2024-04-11T13:28:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darkmode-scrollbars/",
      "url": "https://go.waylonwalker.com/darkmode-scrollbars/",
      "title": "darkmode scrollbars",
      "content_html": "\u003cp\u003eIf you are designing a website in dark mode the scrollbars can be finicky to\nmatch the theme.  Here is a pretty sane default that looks nice without being\nobnoxiously contrast to the rest of the site.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eheight\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ewidth\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-track\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e24\u003c/span\u003e \u003cspan class=\"mi\"\u003e24\u003c/span\u003e \u003cspan class=\"mi\"\u003e27\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-track\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e39\u003c/span\u003e \u003cspan class=\"mi\"\u003e39\u003c/span\u003e \u003cspan class=\"mi\"\u003e42\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e82\u003c/span\u003e \u003cspan class=\"mi\"\u003e82\u003c/span\u003e \u003cspan class=\"mi\"\u003e91\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nd\"\u003ehover\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e113\u003c/span\u003e \u003cspan class=\"mi\"\u003e113\u003c/span\u003e \u003cspan class=\"mi\"\u003e122\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e82\u003c/span\u003e \u003cspan class=\"mi\"\u003e82\u003c/span\u003e \u003cspan class=\"mi\"\u003e91\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nd\"\u003ehover\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e113\u003c/span\u003e \u003cspan class=\"mi\"\u003e113\u003c/span\u003e \u003cspan class=\"mi\"\u003e122\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-corner\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e39\u003c/span\u003e \u003cspan class=\"mi\"\u003e39\u003c/span\u003e \u003cspan class=\"mi\"\u003e42\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWant a rounded scrollbar thumb? add these styles.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eborder-radius\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.25\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eborder-radius\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9999\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eborder-radius\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.25\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eborder-radius\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9999\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis makes a very nice looking default darkmode scrollbar.\u003c/p\u003e\n",
      "content_text": "\nIf you are designing a website in dark mode the scrollbars can be finicky to\nmatch the theme.  Here is a pretty sane default that looks nice without being\nobnoxiously contrast to the rest of the site.\n\n``` html\n    \u003cstyle\u003e\n        ::-webkit-scrollbar {\n            height: 1rem;\n            width: 1rem;\n        }\n\n        ::-webkit-scrollbar-track {\n            background-color: rgb(24 24 27);\n        }\n\n        body::-webkit-scrollbar-track {\n            background-color: rgb(39 39 42);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background-color: rgb(82 82 91);\n        }\n\n        ::-webkit-scrollbar-thumb:hover {\n            background-color: rgb(113 113 122);\n        }\n\n        body::-webkit-scrollbar-thumb {\n            background-color: rgb(82 82 91);\n        }\n\n        body::-webkit-scrollbar-thumb:hover {\n            background-color: rgb(113 113 122);\n        }\n\n        ::-webkit-scrollbar-corner {\n            background-color: rgb(39 39 42);\n        }\n    \u003c/style\u003e\n```\n\nWant a rounded scrollbar thumb? add these styles.\n\n``` css\n::-webkit-scrollbar-thumb {\n    border-radius: 0.25rem;\n    border-radius: 9999px;\n}\n\nbody::-webkit-scrollbar-thumb {\n    border-radius: 0.25rem;\n    border-radius: 9999px;\n}\n```\n\nThis makes a very nice looking default darkmode scrollbar.\n",
      "summary": "If you are designing a website in dark mode the scrollbars can be finicky to match the theme. Here is a pretty sane default that looks nice without being...",
      "date_published": "2024-04-10T11:56:38Z",
      "date_modified": "2024-04-10T11:56:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-239/",
      "url": "https://go.waylonwalker.com/thought-239/",
      "title": "💭 node.js - How to fix npm throwing error without sudo - Stack O...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/16151018/how-to-fix-npm-throwing-error-without-sudo#answer-41395398\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIts sad that this is not the accepted answer.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir ~/.npm-global\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eNPM_CONFIG_PREFIX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e~/.npm-global\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e:~/.npm-global/bin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/16151018/how-to-fix-npm-throwing-error-without-sudo#answer-41395398\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIts sad that this is not the accepted answer.\n\n\n``` bash\nmkdir ~/.npm-global\nexport NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/16151018/how-to-fix-npm-throwing-error-without-sudo#answer-41395398",
      "date_published": "2024-04-09T18:21:02Z",
      "date_modified": "2024-04-09T18:21:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/updating-cloudflare-pages-using-the-wrangler-cli/",
      "url": "https://go.waylonwalker.com/updating-cloudflare-pages-using-the-wrangler-cli/",
      "title": "Udating Cloudflare Pages using the Wrangler cli",
      "content_html": "\u003cp\u003eBefore deploying to cloudflare pages with wrangler you need a cloudflare api\ntoken.  You can get one at\n\u003ca href=\"https://dash.cloudflare.com/profile/api-tokens\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dash.cloudflare.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dash.cloudflare.com.png\" class=\"has-avatar  has-avatar-before\"\u003edash.cloudflare.com/profile/api-tokens\u003c/a\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/7b566e55-98ff-4d96-b0bc-3c4e5b619d68.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/7b566e55-98ff-4d96-b0bc-3c4e5b619d68.png\" alt=\"cloudflare-pages-api-token.png\"/ data-glightbox=\"description: cloudflare-pages-api-token.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"install-wrangler\"\u003eInstall Wrangler \u003ca href=\"#install-wrangler\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNext install wrangler using npm.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpm i -g wrangler\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"create-a-project\"\u003eCreate a Project \u003ca href=\"#create-a-project\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBefore you deploy to cloudflare pages you need to create a project.  You might\nalready have one, or you might want to create one in the webui, but you have\nthe option to create it at the command line with wrangler.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx wrangler pages deploy markout --project-name reader-waylonwalker-com --branch markout\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"deploy\"\u003eDeploy \u003ca href=\"#deploy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow you can deploy your static application using wrangler to cloudflare pages.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIn this example I have my application built into the markout directory, and\nsince the production branch is named \u003ccode\u003emarkout\u003c/code\u003e I need to pass that in here as\nwell.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewrangler pages deploy markout --project-name reader-waylonwalker-com --branch markout\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nBefore deploying to cloudflare pages with wrangler you need a cloudflare api\ntoken.  You can get one at\n[dash.cloudflare.com/profile/api-tokens](https://dash.cloudflare.com/profile/api-tokens).\n\n![cloudflare-pages-api-token.png](https://dropper.waylonwalker.com/api/file/7b566e55-98ff-4d96-b0bc-3c4e5b619d68.png)\n\n## Install Wrangler\n\nNext install wrangler using npm.\n\n``` bash\nnpm i -g wrangler\n```\n\n## Create a Project\n\nBefore you deploy to cloudflare pages you need to create a project.  You might\nalready have one, or you might want to create one in the webui, but you have\nthe option to create it at the command line with wrangler.\n\n``` bash\nnpx wrangler pages deploy markout --project-name reader-waylonwalker-com --branch markout\n```\n\n## Deploy\n\nNow you can deploy your static application using wrangler to cloudflare pages.\n\n\u003e In this example I have my application built into the markout directory, and\n\u003e since the production branch is named `markout` I need to pass that in here as\n\u003e well.\n\n``` bash\nwrangler pages deploy markout --project-name reader-waylonwalker-com --branch markout\n```\n",
      "summary": "Before deploying to cloudflare pages with wrangler you need a cloudflare api token. You can get one at dash.cloudflare.com/profile/api-tokens.",
      "date_published": "2024-04-09T17:03:51Z",
      "date_modified": "2024-04-09T17:03:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infrastructure",
        "deployment",
        "cloudflare"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-238/",
      "url": "https://go.waylonwalker.com/thought-238/",
      "title": "💭 google chrome - Webkit scrollbar CSS, always a white box in co...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/35968553/webkit-scrollbar-css-always-a-white-box-in-corner\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is how you fix the stupid corner section of a double scroll bar being white on a dark theme site.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-corner\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ebackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ergba\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe question included an example image where you can see white squares everywhere there are horizontal and vertical scroll bars.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://i.stack.imgur.com/P6b7f.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://i.stack.imgur.com/P6b7f.png\" alt=\"the corner\"/ data-glightbox=\"description: the corner\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/35968553/webkit-scrollbar-css-always-a-white-box-in-corner\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is how you fix the stupid corner section of a double scroll bar being white on a dark theme site.\n\n\n``` css\n::-webkit-scrollbar-corner {\n  background: rgba(0,0,0,0);\n}\n```\n\nThe question included an example image where you can see white squares everywhere there are horizontal and vertical scroll bars.\n\n![the corner](https://i.stack.imgur.com/P6b7f.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/35968553/webkit-scrollbar-css-always-a-white-box-in-corner",
      "date_published": "2024-04-09T16:55:55Z",
      "date_modified": "2024-04-09T16:55:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/scheduling-cron-jobs-in-kubernetes/",
      "url": "https://go.waylonwalker.com/scheduling-cron-jobs-in-kubernetes/",
      "title": "scheduling cron jobs in kubernetes",
      "content_html": "\u003cp\u003eFor my reader app I am using cronjobs to schedule my a new build and upload to\ncloudflare pages every hour.  In this example I have built a docker image\n\u003ccode\u003edocker.io/waylonwalker/reader-waylonwalker-com\u003c/code\u003e and pushed it to dockerhub.\nIt uses a \u003ccode\u003eCLOUDFLARE_API_TOKEN\u003c/code\u003e secret to access cloudflare, and the\nentrypoint itself does the build and upload.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eNamespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ereader\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ereader\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebatch/v1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eCronJob\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ereader-cronjob\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ereader\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eschedule\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;0 * * * *\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esuccessfulJobsHistoryLimit\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e6\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003efailedJobsHistoryLimit\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e6\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ejobTemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ereader-container\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edocker.io/waylonwalker/reader-waylonwalker-com:latest\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eCLOUDFLARE_API_TOKEN\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                  \u003c/span\u003e\u003cspan class=\"nt\"\u003evalueFrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                    \u003c/span\u003e\u003cspan class=\"nt\"\u003esecretKeyRef\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                      \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecloudflare-secret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                      \u003c/span\u003e\u003cspan class=\"nt\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecloudflare-secret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003erestartPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eOnFailure\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nFor my reader app I am using cronjobs to schedule my a new build and upload to\ncloudflare pages every hour.  In this example I have built a docker image\n`docker.io/waylonwalker/reader-waylonwalker-com` and pushed it to dockerhub.\nIt uses a `CLOUDFLARE_API_TOKEN` secret to access cloudflare, and the\nentrypoint itself does the build and upload.\n\n``` yaml\napiVersion: v1\nkind: Namespace\nmetadata:\n  creationTimestamp: null\n  name: reader\n  namespace: reader\n\n---\napiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: reader-cronjob\n  namespace: reader\nspec:\n  schedule: \"0 * * * *\"\n  successfulJobsHistoryLimit: 6\n  failedJobsHistoryLimit: 6\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n            - name: reader-container\n              image: docker.io/waylonwalker/reader-waylonwalker-com:latest\n              env:\n                - name: CLOUDFLARE_API_TOKEN\n                  valueFrom:\n                    secretKeyRef:\n                      name: cloudflare-secret\n                      key: cloudflare-secret\n          restartPolicy: OnFailure\n```\n",
      "summary": "For my reader app I am using cronjobs to schedule my a new build and upload to cloudflare pages every hour. In this example I have built a docker image and...",
      "date_published": "2024-04-08T16:56:46Z",
      "date_modified": "2024-04-08T16:56:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-237/",
      "url": "https://go.waylonwalker.com/thought-237/",
      "title": "💭 Cache Ruins Everything Around Me - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"j8oD976nhZk\" title=\"Cache Ruins Everything Around Me\" playlabel=\"Play: Cache Ruins Everything Around Me\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is an interesting problem.  I want to make a solution for this on \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e-patterns.  I would make user specific routes with an \u003ccode\u003ehx-get\u003c/code\u003e rather than serving the whole page, serve a partial with \u003ccode\u003ehx-oob\u003c/code\u003es to fill in user specific data with a no cache on the cdn level.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"j8oD976nhZk\" title=\"Cache Ruins Everything Around Me\" playlabel=\"Play: Cache Ruins Everything Around Me\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis is an interesting problem.  I want to make a solution for this on htmx-patterns.  I would make user specific routes with an `hx-get` rather than serving the whole page, serve a partial with `hx-oob`s to fill in user specific data with a no cache on the cdn level.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=j8oD976nhZk",
      "date_published": "2024-04-08T13:50:43Z",
      "date_modified": "2024-04-08T13:50:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-236/",
      "url": "https://go.waylonwalker.com/thought-236/",
      "title": "💭 building a youtube tool in 24 hours to prove a point - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ws86p5iUaRs\" title=\"building a youtube tool in 24 hours to prove a point\" playlabel=\"Play: building a youtube tool in 24 hours to prove a point\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eSo cool to see ROX build this over the course of a day.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"ws86p5iUaRs\" title=\"building a youtube tool in 24 hours to prove a point\" playlabel=\"Play: building a youtube tool in 24 hours to prove a point\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nSo cool to see ROX build this over the course of a day.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=ws86p5iUaRs",
      "date_published": "2024-04-08T13:35:15Z",
      "date_modified": "2024-04-08T13:35:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/digitalharbor7-digitalharbor/",
      "url": "https://go.waylonwalker.com/digitalharbor7-digitalharbor/",
      "title": "⭐ DigitalHarbor7 DigitalHarbor",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/DigitalHarbor7/DigitalHarbor\" 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\"\u003eDigitalHarbor\u003c/a\u003e by \u003ca href=\"https://github.com/DigitalHarbor7\" 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\"\u003eDigitalHarbor7\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [DigitalHarbor](https://github.com/DigitalHarbor7/DigitalHarbor) by [DigitalHarbor7](https://github.com/DigitalHarbor7).\n\nNo description available.\n",
      "summary": "Looking for inspiration? DigitalHarbor by DigitalHarbor7.",
      "date_published": "2024-04-07T19:23:52Z",
      "date_modified": "2024-04-07T19:23:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/blueswen-fastapi-observability/",
      "url": "https://go.waylonwalker.com/blueswen-fastapi-observability/",
      "title": "⭐ blueswen fastapi-observability",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/blueswen/fastapi-observability\" 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\"\u003efastapi-observability\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/blueswen\" 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\"\u003eblueswen\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eObserve \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 app with three pillars of observability: Traces (Tempo), Metrics (Prometheus), Logs (Loki) on Grafana through OpenTelemetry and OpenMetrics.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [fastapi-observability](https://github.com/blueswen/fastapi-observability), an amazing project by [blueswen](https://github.com/blueswen). It's worth exploring!\n\nObserve FastAPI app with three pillars of observability: Traces (Tempo), Metrics (Prometheus), Logs (Loki) on Grafana through OpenTelemetry and OpenMetrics.\n",
      "summary": "I'm really excited about fastapi-observability, an amazing project by blueswen. It's worth exploring!",
      "date_published": "2024-04-07T19:05:14Z",
      "date_modified": "2024-04-07T19:05:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jinja-macros/",
      "url": "https://go.waylonwalker.com/jinja-macros/",
      "title": "jinja macros",
      "content_html": "\u003cp\u003eI am working on a page for\n\u003ca href=\"https://htmx-patterns.waylonwalker.com\"\u003ehtmx-patterns\u003c/a\u003e and I ran into a\nsituation with lots of duplication.  Especially when i am using tailwind I run\ninto situations where the duplication can get tedious to maintiain.  The\nsolution I found is macros.\u003c/p\u003e\n\u003cp\u003eNow I can use the same code for all of my links, and call the macro to use it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% macro link(id, text, boosted=false) -%}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    {% if id is none %}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e      pointer-events-none bg-terminal-950 text-terminal-900 ring-terminal-900\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    {% else %}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e      bg-terminal-950 hover:bg-terminal-900 hover:text-terminal-400 text-terminal-500 shadow-lg shadow-terminal-300/20 hover:shadow-terminal-300/30 ring-terminal-300\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    {% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e      cursor-pointer block text-center font-bold py-2 px-4 rounded w-full ring-1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e{%\u003c/span\u003e \u003cspan class=\"na\"\u003eif\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e \u003cspan class=\"na\"\u003eis\u003c/span\u003e \u003cspan class=\"na\"\u003enot\u003c/span\u003e \u003cspan class=\"na\"\u003enone\u003c/span\u003e \u003cspan class=\"err\"\u003e%}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;boosted\u0026#39;, id=id) }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e{%\u003c/span\u003e \u003cspan class=\"na\"\u003eendif\u003c/span\u003e \u003cspan class=\"err\"\u003e%}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e{%\u003c/span\u003e \u003cspan class=\"na\"\u003eif\u003c/span\u003e \u003cspan class=\"na\"\u003eboosted\u003c/span\u003e \u003cspan class=\"err\"\u003e%}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehx-boost\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e{%\u003c/span\u003e \u003cspan class=\"na\"\u003eendif\u003c/span\u003e \u003cspan class=\"err\"\u003e%}\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ text }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{%- endmacro %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;text-3xl font-light mt-0 max-w-xl text-center prose-xl mt-8 text-terminal-500\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Boosted Links\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;flex flex-row gap-4\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ link(prev_id, \u0026#39;Previous\u0026#39;, boosted=True) }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ link(next_id, \u0026#39;Next\u0026#39;, boosted=True) }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;text-3xl font-light mt-0 max-w-xl text-center prose-xl mt-8 text-terminal-500\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Normal Links\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;flex flex-row gap-4\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ link(prev_id, \u0026#39;Previous\u0026#39;, boosted=False) }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ link(next_id, \u0026#39;Next\u0026#39;, boosted=False) }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI am working on a page for\n[htmx-patterns](https://htmx-patterns.waylonwalker.com) and I ran into a\nsituation with lots of duplication.  Especially when i am using tailwind I run\ninto situations where the duplication can get tedious to maintiain.  The\nsolution I found is macros.\n\nNow I can use the same code for all of my links, and call the macro to use it.\n\n``` html\n{% macro link(id, text, boosted=false) -%}\n\u003ca\n    class=\"\n    {% if id is none %}\n      pointer-events-none bg-terminal-950 text-terminal-900 ring-terminal-900\n    {% else %}\n      bg-terminal-950 hover:bg-terminal-900 hover:text-terminal-400 text-terminal-500 shadow-lg shadow-terminal-300/20 hover:shadow-terminal-300/30 ring-terminal-300\n    {% endif %}\n      cursor-pointer block text-center font-bold py-2 px-4 rounded w-full ring-1\n    \"\n    {% if id is not none %}\n    href=\"{{ url_for('boosted', id=id) }}\"\n    {% endif %}\n    {% if boosted %}\n    hx-boost=\"true\"\n    {% endif %}\u003e\n    {{ text }}\n\u003c/a\u003e\n{%- endmacro %}\n\n\u003ch2 class='text-3xl font-light mt-0 max-w-xl text-center prose-xl mt-8 text-terminal-500'\u003e\n    Boosted Links\n\u003c/h2\u003e\n\n\u003cdiv class='flex flex-row gap-4'\u003e\n    {{ link(prev_id, 'Previous', boosted=True) }}\n    {{ link(next_id, 'Next', boosted=True) }}\n\u003c/div\u003e\n\n\u003ch2 class='text-3xl font-light mt-0 max-w-xl text-center prose-xl mt-8 text-terminal-500'\u003e\n    Normal Links\n\u003c/h2\u003e\n\n\u003cdiv class='flex flex-row gap-4'\u003e\n    {{ link(prev_id, 'Previous', boosted=False) }}\n    {{ link(next_id, 'Next', boosted=False) }}\n\u003c/div\u003e\n```\n",
      "summary": "I am working on a page for htmx-patterns and I ran into a situation with lots of duplication. Especially when i am using tailwind I run into situations where...",
      "date_published": "2024-04-07T14:54:08Z",
      "date_modified": "2024-04-07T14:54:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/avaiga-taipy/",
      "url": "https://go.waylonwalker.com/avaiga-taipy/",
      "title": "⭐ Avaiga taipy",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Avaiga/taipy\" 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\"\u003etaipy\u003c/a\u003e, created by \u003ca href=\"https://github.com/Avaiga\" 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\"\u003eAvaiga\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTurns Data and AI algorithms into production-ready web applications in no time.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [taipy](https://github.com/Avaiga/taipy), created by [Avaiga](https://github.com/Avaiga).\n\nTurns Data and AI algorithms into production-ready web applications in no time.\n",
      "summary": "If you're into interesting projects, don't miss out on taipy, created by Avaiga.",
      "date_published": "2024-04-07T00:34:46Z",
      "date_modified": "2024-04-07T00:34:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jinja-loop-variable-and-htmx/",
      "url": "https://go.waylonwalker.com/jinja-loop-variable-and-htmx/",
      "title": "jinja loop variable and htmx",
      "content_html": "\u003cp\u003ejinja has a loop variable that is very handy to use with \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e.  Whether you\nwant to implement a click to load more or an infinite scroll this loop variable\nis very handy.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% for person in persons %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eli\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e{%\u003c/span\u003e \u003cspan class=\"na\"\u003eif\u003c/span\u003e \u003cspan class=\"na\"\u003eloop\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003elast\u003c/span\u003e \u003cspan class=\"err\"\u003e%}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehx-get\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;infinite\u0026#39;, page=next_page) }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehx-trigger\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;intersect once\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehx-target\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#persons\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehx-swap\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;beforeend\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehx-indicator\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#persons-loading\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e{%\u003c/span\u003e \u003cspan class=\"na\"\u003eendif\u003c/span\u003e \u003cspan class=\"err\"\u003e%}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e{{\u003c/span\u003e \u003cspan class=\"na\"\u003eperson\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eupper\u003c/span\u003e\u003cspan class=\"err\"\u003e()\u003c/span\u003e \u003cspan class=\"err\"\u003e}}\u003c/span\u003e \u003cspan class=\"na\"\u003e-\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003e{{\u003c/span\u003e \u003cspan class=\"na\"\u003eperson\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003ephone_number\u003c/span\u003e \u003cspan class=\"err\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"na\"\u003eli\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% endfor %}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow for every chunk of contacts that we load we will trigger the infinite\nscroll by loading more once the last one has intersected the screen.\u003c/p\u003e\n",
      "content_text": "\njinja has a loop variable that is very handy to use with htmx.  Whether you\nwant to implement a click to load more or an infinite scroll this loop variable\nis very handy.\n\n``` html\n{% for person in persons %}\n\u003cli\n{% if loop.last %}\n    hx-get=\"{{ url_for('infinite', page=next_page) }}\"\n    hx-trigger=\"intersect once\"\n    hx-target=\"#persons\"\n    hx-swap='beforeend'\n    hx-indicator=\"#persons-loading\"\n{% endif %}\n    {{ person.name.upper() }} -\n    {{ person.phone_number }}\n\u003c/li\u003e\n{% endfor %}\n```\n\nNow for every chunk of contacts that we load we will trigger the infinite\nscroll by loading more once the last one has intersected the screen.\n",
      "summary": "jinja has a loop variable that is very handy to use with htmx. Whether you want to implement a click to load more or an infinite scroll this loop variable is...",
      "date_published": "2024-04-06T20:47:13Z",
      "date_modified": "2024-04-06T20:47:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "htmx",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastapi-jinja-url_for-with-query-params/",
      "url": "https://go.waylonwalker.com/fastapi-jinja-url_for-with-query-params/",
      "title": "fastapi jinja url_for with query params",
      "content_html": "\u003cp\u003eOut of the box \u003ca href=\"/starlette/\" class=\"glossary-term\" title=\"Starlette is a low level web framework for modern (as of 2025) async python development most famously used by \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.\"\u003eStarlette\u003c/a\u003e does not support url_for with query params.  When\ntrying to use url_for with query params it throws the following error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estarlette\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erouting\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eNoMatchFound\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003eroute\u003c/span\u003e \u003cspan class=\"n\"\u003eexists\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;infinite\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eparams\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;page\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn my searching for this I found \u003ca href=\"https://github.com/encode/starlette/issues/560\" 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\"\u003estarlette issue #560\u003c/a\u003e quite helpful, but not complete, as it did not work for me.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ejinja2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"nb\"\u003ehasattr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejinja2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pass_context\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epass_context\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ejinja2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epass_context\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epass_context\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ejinja2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtextfunction\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pass_context\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eurl_for_query\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003edict\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003eparams\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003edict\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eurl_for\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eparams\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"p\"\u003e{}:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eurllib.parse\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eparse_qs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eurlencode\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eurlparse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eurlunparse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Parse the URL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurlparse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Parse the query parameters\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003equery_params\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparse_qs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Update the query parameters with the new ones\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003equery_params\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupdate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparams\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Rebuild the query string\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupdated_query_string\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurlencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery_params\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edoseq\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Rebuild the URL with the updated query string\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupdated_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurlunparse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escheme\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003enetloc\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparams\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eupdated_query_string\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eparsed_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efragment\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenviron\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ENV\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qa\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;prod\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eupdated_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupdated_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;http\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eupdated_url\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_templates\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;url_for\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurl_for_query\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003ehttps\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e If you want url_for to work in production you need some way to convert http\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eto https.  Here is how I make it work, for local development I \u003ccode\u003eexport ENV=local\u003c/code\u003e then for each environment that I am running on a server I include\nit in the list and update \u003ccode\u003eENV\u003c/code\u003e appropriately.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenviron\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ENV\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qa\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;prod\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eupdated_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupdated_url\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;http\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp\u003eThe route might look something like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@infinite_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehome\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo access the home route using url_for in a jinja template you can use the\nfollowing, once you have applied the \u003ccode\u003eurl_for_query\u003c/code\u003e function as your default\n\u003ccode\u003eurl_for\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;home\u0026#39;, page=1) }}\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003eHome\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nOut of the box Starlette does not support url_for with query params.  When\ntrying to use url_for with query params it throws the following error.\n\n``` python\nstarlette.routing.NoMatchFound: No route exists for name \"infinite\" and params \"page\"\n```\n\nIn my searching for this I found [starlette issue #560](https://github.com/encode/starlette/issues/560) quite helpful, but not complete, as it did not work for me.\n\n``` python\nimport jinja2\n\nif hasattr(jinja2, \"pass_context\"):\n    pass_context = jinja2.pass_context\nelse:\n    pass_context = jinja2.contextfunction\n\n@pass_context\ndef url_for_query(context: dict, name: str, **params: dict) -\u003e str:\n    request = context[\"request\"]\n    url = str(request.url_for(name))\n    if params == {}:\n        return url\n    from urllib.parse import parse_qs, urlencode, urlparse, urlunparse\n\n    # Parse the URL\n    parsed_url = urlparse(url)\n\n    # Parse the query parameters\n    query_params = parse_qs(parsed_url.query)\n\n    # Update the query parameters with the new ones\n    query_params.update(params)\n\n    # Rebuild the query string\n    updated_query_string = urlencode(query_params, doseq=True)\n\n    # Rebuild the URL with the updated query string\n    updated_url = urlunparse(\n        (\n            parsed_url.scheme,\n            parsed_url.netloc,\n            parsed_url.path,\n            parsed_url.params,\n            updated_query_string,\n            parsed_url.fragment,\n        )\n    )\n\n    if os.environ.get(\"ENV\") in [\"dev\", \"qa\", \"prod\"]:\n        updated_url = updated_url.replace(\"http\", \"https\", 1)\n\n    return updated_url\n\ndef get_templates():\n    templates = Jinja2Templates(directory=\"templates\")\n    templates.env.globals[\"url_for\"] = url_for_query\n    return templates\n```\n\n!!! Note \"https\"\n     If you want url_for to work in production you need some way to convert http\n     to https.  Here is how I make it work, for local development I `export\n     ENV=local` then for each environment that I am running on a server I include\n     it in the list and update `ENV` appropriately.\n\n     ``` python\n         if os.environ.get(\"ENV\") in [\"dev\", \"qa\", \"prod\"]:\n             updated_url = updated_url.replace(\"http\", \"https\", 1)\n     ```\n\nThe route might look something like this.\n\n``` python\n@infinite_router.get(\"/\")\nasync def home(request: Request, page: int = 1, n: int = 10):\n  ...\n```\n\nTo access the home route using url_for in a jinja template you can use the\nfollowing, once you have applied the `url_for_query` function as your default\n`url_for`\n\n``` html\n\u003ca href=\"{{ url_for('home', page=1) }}\"\u003eHome\u003c/a\u003e\n```\n",
      "summary": "Out of the box Starlette does not support url_for with query params it throws the following error.",
      "date_published": "2024-04-05T20:43:32Z",
      "date_modified": "2024-04-05T20:43:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kind-cluster-with-argo/",
      "url": "https://go.waylonwalker.com/kind-cluster-with-argo/",
      "title": "setting up a kind cluster with argocd installed",
      "content_html": "\u003cp\u003eKind (Kubernetes in Docker) is a tool that makes it easy to create and tear\ndown local clusters quickly.  I like to use it to test out new workflows.\u003c/p\u003e\n\u003cp\u003eArgocd is a continuous delivery tool that makes it easy to setup gitops\nworkflows in kubernetes.\u003c/p\u003e\n\u003cp\u003eHere is how you can setup a new kind cluster and install argocd into it using\nhelm, the kubernetes package manager.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekind create cluster --name argocd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# your first time through you need to add the argocd repo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehelm repo add argo https://argoproj.github.io/argo-helm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehelm repo update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install argocd into the cluster\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehelm install argo argo/argo-cd --namespace argocd --create-namespace\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# deploy the app of apps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl apply -f apps/apps.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you want to add repos and apps to your cluster you can use the argo cli to\ndo that, but first you will need forward the argocd port and login.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Wait until Argo CD API server is available\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Waiting for Argo CD API server to be available...\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ewhile\u003c/span\u003e ! kubectl \u003cspan class=\"nb\"\u003ewait\u003c/span\u003e --for\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003econdition\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eavailable --timeout\u003cspan class=\"o\"\u003e=\u003c/span\u003e60s deployment/argo-argocd-server -n argocd\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Waiting for Argo CD API server to be ready...\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  sleep \u003cspan class=\"m\"\u003e10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl port-forward svc/argo-argocd-server -n argocd 8080:443 \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eargocd_admin_password\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ekubectl get secret argocd-initial-admin-secret -n argocd -o \u003cspan class=\"nv\"\u003ejsonpath\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{.data.password}\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e base64 -d\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eargocd login localhost:8080 --insecure --username admin --password \u003cspan class=\"nv\"\u003e$argocd_admin_password\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eargocd repo add https://github.com/fokais-com/app.fokais.git --username waylonwalker --password \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eGH_ARGO_PAT\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eargocd app create app-fokais-local --repo https://github.com/fokais-com/app.fokais.git --path k8s/overlays/local --dest-server https://kubernetes.default.svc --sync-policy automated --sync-option \u003cspan class=\"nv\"\u003ePrune\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nKind (Kubernetes in Docker) is a tool that makes it easy to create and tear\ndown local clusters quickly.  I like to use it to test out new workflows.\n\nArgocd is a continuous delivery tool that makes it easy to setup gitops\nworkflows in kubernetes.\n\nHere is how you can setup a new kind cluster and install argocd into it using\nhelm, the kubernetes package manager.\n\n``` bash\nkind create cluster --name argocd\n\n# your first time through you need to add the argocd repo\nhelm repo add argo https://argoproj.github.io/argo-helm\nhelm repo update\n\n# install argocd into the cluster\nhelm install argo argo/argo-cd --namespace argocd --create-namespace\n\n# deploy the app of apps\nkubectl apply -f apps/apps.yaml\n```\n\nIf you want to add repos and apps to your cluster you can use the argo cli to\ndo that, but first you will need forward the argocd port and login.\n\n``` bash\n# Wait until Argo CD API server is available\necho \"Waiting for Argo CD API server to be available...\"\nwhile ! kubectl wait --for=condition=available --timeout=60s deployment/argo-argocd-server -n argocd; do\n  echo \"Waiting for Argo CD API server to be ready...\"\n  sleep 10\ndone\n\n\nkubectl port-forward svc/argo-argocd-server -n argocd 8080:443 \u0026\nargocd_admin_password=$(kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath=\"{.data.password}\" | base64 -d)\nargocd login localhost:8080 --insecure --username admin --password $argocd_admin_password\nargocd repo add https://github.com/fokais-com/app.fokais.git --username waylonwalker --password ${GH_ARGO_PAT}\nargocd app create app-fokais-local --repo https://github.com/fokais-com/app.fokais.git --path k8s/overlays/local --dest-server https://kubernetes.default.svc --sync-policy automated --sync-option Prune=true\n```\n",
      "summary": "Kind (Kubernetes in Docker) is a tool that makes it easy to create and tear down local clusters quickly. I like to use it to test out new workflows.",
      "date_published": "2024-04-04T18:42:18Z",
      "date_modified": "2024-04-04T18:42:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-235/",
      "url": "https://go.waylonwalker.com/thought-235/",
      "title": "💭 Hogwarts Legacy Argyllshire Map: What does the button do? - Do...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dotesports.com/hp/news/hogwarts-legacy-argyllshire-map-what-does-the-button-do\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dotesports.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dotesports.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edotesports.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn this button had me stuck for way too long.  It definitely looks like a button once I see it, but I don’t recall coming into contact with many buttons in the game, I tried to set it ablaze, pull it, fly it, nothing.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://dotesports.com/hp/news/hogwarts-legacy-argyllshire-map-what-does-the-button-do\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edotesports.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn this button had me stuck for way too long.  It definitely looks like a button once I see it, but I don't recall coming into contact with many buttons in the game, I tried to set it ablaze, pull it, fly it, nothing.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://dotesports.com/hp/news/hogwarts-legacy-argyllshire-map-what-does-the-button-do",
      "date_published": "2024-04-03T01:45:36Z",
      "date_modified": "2024-04-03T01:45:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "hogwarts",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-234/",
      "url": "https://go.waylonwalker.com/thought-234/",
      "title": "💭 How can I add my YouTube videos via RSS? - SocialBee Help Docu...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://help.socialbee.com/article/129-how-can-i-add-my-youtube-videos-via-rss\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://help.socialbee.com/hc/theming_assets/01JC213B6DS38WMW6ZW40DHSV4\" alt=\"How can I add my YouTube videos via RSS? — You can share your videos or other people\" loading=\"lazy\"/ data-glightbox=\"description: How can I add my YouTube videos via RSS? — You can share your videos or other people\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow can I add my YouTube videos via RSS?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou can share your videos or other people\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSocialBee Help Documentation · help.socialbee.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eYouTube makes finding rss feeds way too hard.  Hats off to them for still supporting it, allowing you to find content outside the algorithm, and consuming content you asked for.  But i had no idea you had to search the source code to get it.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://help.socialbee.com/article/129-how-can-i-add-my-youtube-videos-via-rss\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://help.socialbee.com/hc/theming_assets/01JC213B6DS38WMW6ZW40DHSV4\" alt=\"How can I add my YouTube videos via RSS? — You can share your videos or other people\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow can I add my YouTube videos via RSS?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou can share your videos or other people\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSocialBee Help Documentation \u0026middot; help.socialbee.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nYouTube makes finding rss feeds way too hard.  Hats off to them for still supporting it, allowing you to find content outside the algorithm, and consuming content you asked for.  But i had no idea you had to search the source code to get it.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://help.socialbee.com/article/129-how-can-i-add-my-youtube-videos-via-rss",
      "date_published": "2024-04-03T01:42:29Z",
      "date_modified": "2024-04-03T01:42:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "rss",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-233/",
      "url": "https://go.waylonwalker.com/thought-233/",
      "title": "💭 sql - SQLite: COUNT slow on big tables - Stack Overflow",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/8988915/sqlite-count-slow-on-big-tables\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAnother interesting option for slow count queries in sqlite.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf you haven’t DELETEd any records, doing:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eSELECT\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eMAX\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eROWID\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eFROM\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;table\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eLIMIT\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/8988915/sqlite-count-slow-on-big-tables\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAnother interesting option for slow count queries in sqlite.\n\n\u003e If you haven't DELETEd any records, doing:\n\n``` sql\nSELECT MAX(ROWID) FROM \"table\" LIMIT 1;\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/8988915/sqlite-count-slow-on-big-tables",
      "date_published": "2024-04-01T20:59:40Z",
      "date_modified": "2024-04-01T20:59:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sql",
        "sqlite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-232/",
      "url": "https://go.waylonwalker.com/thought-232/",
      "title": "💭 Optimizing SQLite for servers",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kerkour.com/sqlite-for-servers\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://kerkour.com/icon-256.png\" alt=\"Optimizing SQLite for servers — SQLite is often misconceived as a \u0026amp;#34;toy database\u0026amp;#34;, only good for mobile applications and embedded systems because it\u0026amp;#39;s default configuration is optimized for embedded use cases, so most people trying it will encounter poor performances and the dreaded SQLITE_BUSY error. But what if I told you that by tuning a\" loading=\"lazy\"/ data-glightbox=\"description: Optimizing SQLite for servers — SQLite is often misconceived as a \u0026amp;#34;toy database\u0026amp;#34;, only good for mobile applications and embedded systems because it\u0026amp;#39;s default configuration is optimized for embedded use cases, so most people trying it will encounter poor performances and the dreaded SQLITE_BUSY error. But what if I told you that by tuning a\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOptimizing SQLite for servers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLite is often misconceived as a \u0026amp;#34;toy database\u0026amp;#34;, only good for mobile applications and embedded systems because it\u0026amp;#39;s default configuration is optimized for embedded use cases, so most ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSylvain Kerkour · kerkour.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eVery interesting article by Sylvain, suggested by Simon Willison.\u003c/p\u003e\n\u003cp\u003eDefinitely some things that I want to come back and try later on.\u003c/p\u003e\n\u003cp\u003eHere is the TLDR of the whole post\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePRAGMA \u003cspan class=\"nv\"\u003ejournal_mode\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e WAL\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePRAGMA \u003cspan class=\"nv\"\u003ebusy_timeout\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e 5000\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePRAGMA \u003cspan class=\"nv\"\u003esynchronous\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e NORMAL\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePRAGMA \u003cspan class=\"nv\"\u003ecache_size\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e 1000000000\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePRAGMA \u003cspan class=\"nv\"\u003eforeign_keys\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e true\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePRAGMA \u003cspan class=\"nv\"\u003etemp_store\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e memory\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis is interesting, and something I need to consider.  I definitely have an application with slow count queries.  I am not sure how to make it better as its not a full \u003ccode\u003ecount(*)\u003c/code\u003e so a count table doesn’t work, nor does counting by index.\u003c/p\u003e\n\u003cp\u003eI might need to have a table of cached results, and if a write matches the counter increase it, or update all counters on write.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCOUNT queries are slow\nSQLite doesn’t keep statistics about its indexes, unlike PostgreSQL, so COUNT queries are slow, even when using a WHERE clause on an indexed field: SQLite has to scan for all the matching records.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eOne solution is to use a trigger on INSERT and DELETE that updates a running count in a separate table then query that separate table to find the latest count.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kerkour.com/sqlite-for-servers\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://kerkour.com/icon-256.png\" alt=\"Optimizing SQLite for servers — SQLite is often misconceived as a \u0026amp;#34;toy database\u0026amp;#34;, only good for mobile applications and embedded systems because it\u0026amp;#39;s default configuration is optimized for embedded use cases, so most people trying it will encounter poor performances and the dreaded SQLITE_BUSY error. But what if I told you that by tuning a\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOptimizing SQLite for servers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLite is often misconceived as a \u0026amp;#34;toy database\u0026amp;#34;, only good for mobile applications and embedded systems because it\u0026amp;#39;s default configuration is optimized for embedded use cases, so most ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSylvain Kerkour \u0026middot; kerkour.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nVery interesting article by Sylvain, suggested by Simon Willison.\n\nDefinitely some things that I want to come back and try later on.\n\n\nHere is the TLDR of the whole post\n\n``` bash\nPRAGMA journal_mode = WAL;\nPRAGMA busy_timeout = 5000;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = 1000000000;\nPRAGMA foreign_keys = true;\nPRAGMA temp_store = memory;\n```\n\nThis is interesting, and something I need to consider.  I definitely have an application with slow count queries.  I am not sure how to make it better as its not a full `count(*)` so a count table doesn't work, nor does counting by index.\n\nI might need to have a table of cached results, and if a write matches the counter increase it, or update all counters on write.\n\n\u003e COUNT queries are slow\n\u003e SQLite doesn't keep statistics about its indexes, unlike PostgreSQL, so COUNT queries are slow, even when using a WHERE clause on an indexed field: SQLite has to scan for all the matching records.\n\n\u003e One solution is to use a trigger on INSERT and DELETE that updates a running count in a separate table then query that separate table to find the latest count.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kerkour.com/sqlite-for-servers",
      "date_published": "2024-04-01T20:55:23Z",
      "date_modified": "2024-04-01T20:55:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sql",
        "sqlite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-231/",
      "url": "https://go.waylonwalker.com/thought-231/",
      "title": "💭 From Nursing to Programming ft. Trash Puppy | Backend Banter 0...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"fsExvZY4pe4\" title=\"From Nursing to Programming feat. Trash Puppy | 047\" playlabel=\"Play: From Nursing to Programming feat. Trash Puppy | 047\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eInspiring story transitioning into tech from nursing.  I also came to tech through a set of circumstances that made it difficult for me to excel at my current job.  Looking back it is something that I was always interested in and I was just unsure how to get in, I am so glad that I figured it out, it has been such a great benefit to my family.\u003c/p\u003e\n\u003cp\u003eI really enjoyed listening to trshpuppy’s journey in through building projects, and choosing tech not based on what she wanted to learn, but what fit the project the best.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"fsExvZY4pe4\" title=\"From Nursing to Programming feat. Trash Puppy | 047\" playlabel=\"Play: From Nursing to Programming feat. Trash Puppy | 047\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nInspiring story transitioning into tech from nursing.  I also came to tech through a set of circumstances that made it difficult for me to excel at my current job.  Looking back it is something that I was always interested in and I was just unsure how to get in, I am so glad that I figured it out, it has been such a great benefit to my family.\n\nI really enjoyed listening to trshpuppy's journey in through building projects, and choosing tech not based on what she wanted to learn, but what fit the project the best.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=fsExvZY4pe4",
      "date_published": "2024-04-01T20:21:37Z",
      "date_modified": "2024-04-01T20:21:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "career",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jbranchaud-til/",
      "url": "https://go.waylonwalker.com/jbranchaud-til/",
      "title": "⭐ jbranchaud til",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/jbranchaud/til\" 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\"\u003etil\u003c/a\u003e from \u003ca href=\"https://github.com/jbranchaud\" 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\"\u003ejbranchaud\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e📝 Today I Learned\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [til](https://github.com/jbranchaud/til) from [jbranchaud](https://github.com/jbranchaud).\n\n:memo: Today I Learned\n",
      "summary": "I'm impressed by til from jbranchaud.",
      "date_published": "2024-04-01T03:22:57Z",
      "date_modified": "2024-04-01T03:22:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wyattbubbylee-hexa/",
      "url": "https://go.waylonwalker.com/wyattbubbylee-hexa/",
      "title": "⭐ wyattbubbylee Hexa",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/wyattbubbylee/Hexa\" 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\"\u003eHexa\u003c/a\u003e from \u003ca href=\"https://github.com/wyattbubbylee\" 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\"\u003ewyattbubbylee\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eHexa is a game engine\u003c/p\u003e\n",
      "content_text": "\nI came across [Hexa](https://github.com/wyattbubbylee/Hexa) from [wyattbubbylee](https://github.com/wyattbubbylee), and it's packed with great features and ideas.\n\nHexa is a game engine\n",
      "summary": "I came across Hexa from wyattbubbylee, and it's packed with great features and ideas.",
      "date_published": "2024-03-30T14:57:03Z",
      "date_modified": "2024-03-30T14:57:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-230/",
      "url": "https://go.waylonwalker.com/thought-230/",
      "title": "💭 Some Git poll results",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jvns.ca/blog/2024/03/28/git-poll-results/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/jvns.ca.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/jvns.ca.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSome Git poll results\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSome Git poll results\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJulia Evans · jvns.ca\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003egreat poll of \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e questions\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003epoll: did you know that in a git merge conflict, the order of the code is different when you do a merge/rebase?\u003c/p\u003e\n\u003cp\u003emerge:\u003c/p\u003e\n\u003ch1 id=\"your-code\"\u003e\u0026lt;\u0026lt;\u0026lt;\u0026lt;\u0026lt;\u0026lt;\u0026lt; HEAD\nYOUR CODE\u003c/h1\u003e\n\u003cp\u003eOTHER BRANCH’S CODE\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003ec694cf8aabe\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003cp\u003erebase:\u003c/p\u003e\n\u003ch1 id=\"other-branchs-code\"\u003e«««\u0026lt; HEAD\nOTHER BRANCH’S CODE\u003c/h1\u003e\n\u003cp\u003eYOUR CODE\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003ed945752 (your commit message)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis one explains a lot.  I \u003cem\u003ethink\u003c/em\u003e I knew this, I might have seen it somewhere, but I have definitely noticed it go both ways and confuse the crap out of me.  Feels very similar to how \u003ccode\u003e--ours\u003c/code\u003e and \u003ccode\u003e--theirs\u003c/code\u003e flip flops.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jvns.ca/blog/2024/03/28/git-poll-results/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSome Git poll results\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSome Git poll results\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eJulia Evans \u0026middot; jvns.ca\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ngreat poll of git questions\n\n\u003e poll: did you know that in a git merge conflict, the order of the code is different when you do a merge/rebase?\n\u003e \n\u003e merge:\n\u003e \n\u003e \\\u003c\\\u003c\\\u003c\\\u003c\\\u003c\\\u003c\\\u003c HEAD\n\u003e YOUR CODE\n\u003e =======\n\u003e OTHER BRANCH'S CODE\n\u003e \u003e\u003e\u003e\u003e\u003e\u003e\u003e c694cf8aabe\n\u003e \n\u003e rebase:\n\u003e \n\u003e \u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD\n\u003e OTHER BRANCH'S CODE\n\u003e =======\n\u003e YOUR CODE\n\u003e \u003e\u003e\u003e\u003e\u003e\u003e\u003e d945752 (your commit message)\n\n\nThis one explains a lot.  I _think_ I knew this, I might have seen it somewhere, but I have definitely noticed it go both ways and confuse the crap out of me.  Feels very similar to how `--ours` and `--theirs` flip flops.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jvns.ca/blog/2024/03/28/git-poll-results/",
      "date_published": "2024-03-29T02:04:41Z",
      "date_modified": "2024-03-29T02:04:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-229/",
      "url": "https://go.waylonwalker.com/thought-229/",
      "title": "💭 Sealed Secrets",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sealed-secrets.netlify.app/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esealed-secrets.netlify.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ekubeseal is a pretty simple to get started with way to manage secrets such that they can be stored in a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo and be picked up by your continuous delivery service.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSealed Secrets provides declarative Kubernetes Secret Management in a secure way. Since the Sealed Secrets are encrypted, they can be safely stored in a code repository. This enables an easy to implement GitOps flow that is very popular among the OSS community.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sealed-secrets.netlify.app/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esealed-secrets.netlify.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nkubeseal is a pretty simple to get started with way to manage secrets such that they can be stored in a git repo and be picked up by your continuous delivery service.\n\n\u003e Sealed Secrets provides declarative Kubernetes Secret Management in a secure way. Since the Sealed Secrets are encrypted, they can be safely stored in a code repository. This enables an easy to implement GitOps flow that is very popular among the OSS community.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sealed-secrets.netlify.app/",
      "date_published": "2024-03-28T01:07:06Z",
      "date_modified": "2024-03-28T01:07:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kubernetes-kubeseal/",
      "url": "https://go.waylonwalker.com/kubernetes-kubeseal/",
      "title": "kubernetes kubeseal",
      "content_html": "\u003cp\u003eIn my \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 kubernetes cluster I am using kubeseal to encrypt secrets.  I\nhave been using it successfully for a few months now wtih great success. It\nallows me to commit all of my secrets manifests to \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e with out risk of leaking\nsecrets.\u003c/p\u003e\n\u003cp\u003eYou see kubeseal encrypts your secrets with a private key only stored in your\ncluster, so only the cluster itself can decrypt them using the kubeseal\ncontroller.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/833e8681-8220-4096-b211-80c33eb10c1c.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/833e8681-8220-4096-b211-80c33eb10c1c.png\" alt=\"kubeseal-post.png\"/ data-glightbox=\"description: kubeseal-post.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"kubeseal\"\u003eKubeSeal \u003ca href=\"#kubeseal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sealed-secrets.netlify.app/\" class=\"hoverlink\"\u003ehttps://sealed-secrets.netlify.app/\u003c/a\u003e\u003c/p\u003e\n\u003ca href=\"https://sealed-secrets.netlify.app/\"\u003e\n\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://sealed-secrets.netlify.app/\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"screenshot of https://sealed-secrets.netlify.app/\" height=\"450\" width=\"800\"/ data-glightbox=\"description: screenshot of https://sealed-secrets.netlify.app/\"\u003e\n\u003c/a\u003e\n\u003ch2 id=\"installation\"\u003einstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstallation happens in two steps.  You need the kubernetes controller and the\nclient side cli to create a sealed secret.\u003c/p\u003e\n\u003cp\u003eFor a more complete instruction see the\n[docs#installation](\u003ca href=\"https://github.com/bitnami-labs/sealed-secrets?tab=readme-ov-file#installation\" 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\"\u003ehttps://github.com/bitnami-labs/sealed-secrets?tab=readme-ov-file#installation\u003c/a\u003e]\u003c/p\u003e\n\u003ch2 id=\"installation---controller\"\u003einstallation - controller \u003ca href=\"#installation---controller\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"admonition warning\"\u003e\n\u003cp class=\"admonition-title\"\u003eWarning\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e **context**\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eMake sure that you are in the right context before running any kubectl commands.\u003c/p\u003e\n\u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl config current-context\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003esealed-secrets is installed using the helm package manager.  To install\nsealed-secrets run the following command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehelm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehelm install sealed-secrets -n kube-system --set-string \u003cspan class=\"nv\"\u003efullnameOverride\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esealed-secrets-controller sealed-secrets/sealed-secrets\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"installation---client\"\u003einstallation - client \u003ca href=\"#installation---client\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFor the client you can check your OS package manager, brew, or the\n\u003ca href=\"https://github.com/bitnami-labs/sealed-secrets/releases/\" 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\"\u003egithub-releases\u003c/a\u003e.\nFor me I found it in the main arch repos.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S kubeseal\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S kubeseal\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install kubeseal\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e You will need to install kubeseal on every device that you will want to\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ecreate sealed secrets on.\u003c/p\u003e\n\u003c/div\u003e\n\u003ch2 id=\"example\"\u003eExample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMost of these commands come straight from the docs.  From my experience I have\nalways specified the namespace, my projects go per namespace and I don’t have\nany reason that other namepsaces should see the secret, and if they do I deploy\nanother secret in that namespace.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a json/yaml-encoded Secret somehow:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# (note use of `--dry-run` - this is just a local file!)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n bar \u003cspan class=\"p\"\u003e|\u003c/span\u003e kubectl create secret generic mysecret --dry-run\u003cspan class=\"o\"\u003e=\u003c/span\u003eclient --from-file\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003efoo\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/dev/stdin -o yaml -n thenamespace \u0026gt; mysecret.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003enote that the key of the secret is \u003ccode\u003efoo\u003c/code\u003e and the value is \u003ccode\u003ebar\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eresults\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eYmFy\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ethenamespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e The data is base64 encoded.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n bar \u003cspan class=\"p\"\u003e|\u003c/span\u003e base64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# YmFy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This is the important bit:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubeseal -f mysecret.yaml -w mysealedsecret.yaml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# At this point mysealedsecret.json is safe to upload to Github,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# post on Twitter, etc.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Eventually:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl create -f mysealedsecret.yaml -n thenamespace\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# sealedsecret.bitnami.com/mysecret created\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Profit!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl get secret mysecret\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl get secret mysecret -n thenamespace\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# NAME       TYPE     DATA   AGE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# mysecret   Opaque   1      27s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat mysealedsecret.yaml \u003cspan class=\"p\"\u003e|\u003c/span\u003e kubeseal --validate\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n bar \u003cspan class=\"p\"\u003e|\u003c/span\u003e kubectl create secret generic mysecret --dry-run\u003cspan class=\"o\"\u003e=\u003c/span\u003eclient --from-file\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003efoo\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/dev/stdin -o yaml \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e kubeseal -o yaml -n thenamespace \u0026gt; mysealedsecret.yaml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n baz \u003cspan class=\"p\"\u003e|\u003c/span\u003e kubectl create secret generic mysecret --dry-run\u003cspan class=\"o\"\u003e=\u003c/span\u003eclient --from-file\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003ebar\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/dev/stdin -o yaml \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e kubeseal -o yaml -n thenamespace --merge-into mysealedsecret.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eResults\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebitnami.com/v1alpha1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSealedSecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ethenamespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eencryptedData\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebar\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eAgBLkamltcLfH1dC1JxQ3qd8lJ8aBZF2ARoq3uo055hnzXOy8g2T5liTx5UPvyPV8yyWqABU8eOnwjNhDtzSATvYeBB3fGkucdOZziWEoiNsWTR9ZtFEkod7Ya6uGkzZOJwi3IkrHFVIT9oWZQUxxJZ6vFhPiFcx9Dorr8TNSzG4KOug25+PhWPPiHDgSup5N3CkWCZaYOF7dbZRVSA4nGP1fZxjFByHP4AsdjLCHptyVbkpLRKeiXTkLxfLX4K+JLZGM41S1On5bSP56mCfv1daTJx619kDXkRLw9l21Ot283/L0NMNAiw781AefYMVoO3aHmYgcT6wAtsQAKje9fyL7DQRHt8a5NZOWukp/P6XjdXRz/nfQasQlbSTrRkDpplKIM5/WdPcBoKi+yyoOL0rZ8x1X7YzUI3BggZmzWyEPD01BK1YAHGZnYIZbbCy1JSm8JCBvP+xWMg+i0Z/DCD8nclAhH1GX2Q7/NrNHF//589AJfuriymd2+mk7uaLA4RRsY0l5QeZD6HVAqSv5jWsVQQtSftWmI9vn9oL/Pno7sEUjSDpXPfF4nnsULhxsPEe2DFAMm1kZAjdF06ueF4/x2Fdy80ZQNyycaDx2CWm4z3b14A75WGyOXl2wJZQqxrFCz8el4hD2nH3zQFEzd6AIh49myqVAGuu2qGlYP4p94LJghVa+mQjztLD/2ZUZjY+anQ=\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eAgAducXW6iUCY900cPDdmRfuj7tKnh2hY4C1+2hFoAtjyvjepsKNWsiPJ81t8anaMfFPat4ta060l5VtTrceFE8oS/rViz1tvNWGPBjL+GwL/QjkGl6H8ju87vKERKQn5qw7B/V5j24VM8AxOd+/vJNt/IeRIHLubvFft4hyMq4b0xmIxaemBSTxchQX/5364T3VJH2kHaqpqd+JJgQnTbiTQe/XnyZokDX8GSxw4rAbJUJSRUtY9DB9ZDu2zC5VngX+GJjbwHGbv9EKs8LShJIPrD8xHqrDmlSXGkkP01D4A6268Qoi3x5S0H5aqDgtrgBiWsNkzdKwjfrTNx7pKecOi41lyFdffHOGUew4aPPMqjzWR2TEms9WNNQXwnBdDHKMkFsisocF52BolEkcjF8g/u5h2Af92abMu6k16VybJrB7TV1set5A9W7rqG1iXI4+1W6XQfFnpja8xL/zJBvZcyHgeYMNaxa3C3s6PANhPzAUVaXV9eedAkptGJLN13IZj4LujpoAxRKo6bEdydv/5P23R3fx5PgTOpVI7riECAOIg2PThFsEoVCUwStmKCvIx1I2+YixIlv/OiaUWo4lrI/3ve5WGp4ZnuiJPk34JoYAlRbR6+sX14d8Ek6viq/pJUUIfVpNIkNMboUL4u+KpT47eyQ/mWih/KFduQyX9II/vQ+/IJGzEEHIipxAhdmV+K4=\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ethenamespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"backing-up-your-sealing-key\"\u003ebacking up your sealing key \u003ca href=\"#backing-up-your-sealing-key\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml \u0026gt;main.key\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"converting-env-files-to-a-secret\"\u003econverting .env files to a secret \u003ca href=\"#converting-env-files-to-a-secret\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWorking with web applications .env is a common way to store credentials.  Let’s\nlook at how we can convert these to secrets.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl create secret generic mysecret --from-env-file\u003cspan class=\"o\"\u003e=\u003c/span\u003e.env -n thenamespace --dry-run\u003cspan class=\"o\"\u003e=\u003c/span\u003eclient -o yaml \u0026gt; mysecret.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow you have a secret that looks like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eYmFy\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ethenamespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSeal it up just like before.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubeseal -f mysecret.yaml -w mysealedsecret.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-the-secrets\"\u003eUsing the secrets \u003ca href=\"#using-the-secrets\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI typically use the secrets in the container spec.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyapp\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenvFrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003esecretRef\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"c\"\u003e# You can still have other env vars\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003efoo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebar\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSometimes I want to mount the secret as a volume.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyapp\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumeMounts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003emountPath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/mysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esecret\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003esecretName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"image-pull-secrets\"\u003eImage Pull Secrets \u003ca href=\"#image-pull-secrets\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI also need to use imagePullSecrets.  Let’s walk through the whole process.  Starting with the secret.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl create secret docker-registry regcred --docker-server\u003cspan class=\"o\"\u003e=\u003c/span\u003emyprivateregistry.example.com --docker-username\u003cspan class=\"o\"\u003e=\u003c/span\u003efoo --docker-password\u003cspan class=\"o\"\u003e=\u003c/span\u003ebar --dry-run\u003cspan class=\"o\"\u003e=\u003c/span\u003eclient -o yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eGenerates the following secret.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003e.dockerconfigjson\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eeyJhdXRocyI6eyJteXByaXZhdGVyZWdpc3RyeS5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImZvbyIsInBhc3N3b3JkIjoiYmFyIiwiYXV0aCI6IlptOXZPbUpoY2c9PSJ9fX0=\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eregcred\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ekubernetes.io/dockerconfigjson\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003ethe secret\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNow we we can seal that secret.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubeseal -f regcred.yaml -w regcred-sealed.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd that gives us the following sealed secret that we can deploy into our cluster.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebitnami.com/v1alpha1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSealedSecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eregcred\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eencryptedData\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003e.dockerconfigjson\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eAgATYVEywkyYEaoErQbJo6xEZfOnRn1ydNTLkO3Jt/NF/UH+0o9lHpDecRpN0XnVu8xJUcdjkgD9q2XkwP8e6qQDS2mMPTiTNIN+8gbJx97WrD1YQDT0lXBuoyi9I/iwlXxx6MgH/6GY6CeGTz5SRlvoU0Xhlt4d11s7/xapdE8QMLsAReqPEv8oZHEyAxDRrjXX0V+tO8dV+G+GXjUDMBBceLael9rvGzSKIwDVXACVqQhLkB6FoP98M+yyBE46RBNnSnS0ShQM5PprL24HKpRZ43x4RM53KBrQ7R/MxeshafY+B6vUvrolmVox4sud8xngMOcjTO28LLOrck5V8ZiDabhN7ajHEf03IESr1o/ADGf5k9988Vv1txJtsZW0K2mpRu0D7/BLVL9KzbZ5ywULqIoD/Ur2GIGnZqMAKOq4laGp/GJtMKLrhmEvekT397wC/Gf/xdDKVhHf2p4ocsPu7LKFuS5H/Auel/Q5grdn8L5wwrO4VWRv3eJroKh/Hux7Qd7f64O7qdi0XthDocf+gmtjys+Gy72M7tyf8f/O+3oKbS4CWQVTj4ZThMc9znrFnHqt2q/7pAyytTQCpk51wlzOsNvOhCueJM/jmeahaL0LuBrqngqISpnd65sgVzBcZpwK9i2Fckyt0DrZLH+NoIuvaqNhzlF+OMbAft/ylWWKCH4WUP+FKG+1LXM7ud7AA3MMbGSBxHL0/WK/INa7MB56xZKMqqyvvLLQHFTQUROJjkgkzsumdOgwZTRgIFnAZ4+vOX3/1Rtt3mAs3vdoJhL4GuKUYCnEHt908eKkWEVEs7eMk5SdSRtIsbaXO2s0dtADwg==\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eregcred\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ekubernetes.io/dockerconfigjson\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow that we have our sealed registry secret, we can deploy it into our cluster.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl apply -f regcred-sealed.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow we can use it to pull images from our private registry.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eimagePullSecrets\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eregcred\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"full-example\"\u003eFull example \u003ca href=\"#full-example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a full deployment example using all the secrets we have created.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eregcred\u003c/li\u003e\n\u003cli\u003emounting a secret\u003c/li\u003e\n\u003cli\u003eenvFrom secret\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eapps/v1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDeployment\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003elabels\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eservice\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyservice\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyservice\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enamespace\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emynamespace\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ereplicas\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eselector\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ematchLabels\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eservice\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyservice\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003estrategy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eRecreate\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ecreationTimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003elabels\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eservice\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyservice\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003eenvFrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003esecretRef\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003efoo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebar\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eprivate-registry.io/myimage:1.0.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emyimage\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eports\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003econtainerPort\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e5000\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003eprotocol\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eTCP\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eresources\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e{}\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumeMounts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003emountPath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/mysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003erestartPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eAlways\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003esecret\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003esecretName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emysecret\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eimagePullSecrets\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eregcred\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"downside\"\u003eDownside \u003ca href=\"#downside\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow the main downside I see with kubeseal is that it does not provide a way to\nstore your secrets in a way that you can access outside of your cluster.  So\nyou need to make sure that you have another solution in place to store your\nsecrets so that you still have them if you ever were to take the cluster down\nor move from k8s to something else.\u003c/p\u003e\n\u003cp\u003eOverall the likelyhood of you loosing a production cluster is pretty low, so\nmaybe it’s ok to just trust it depending on what the secrets are.  Especially\nfor things you control and can rotate anyways its fine.\u003c/p\u003e\n",
      "content_text": "\n\nIn my homelab kubernetes cluster I am using kubeseal to encrypt secrets.  I\nhave been using it successfully for a few months now wtih great success. It\nallows me to commit all of my secrets manifests to git with out risk of leaking\nsecrets.\n\nYou see kubeseal encrypts your secrets with a private key only stored in your\ncluster, so only the cluster itself can decrypt them using the kubeseal\ncontroller.\n\n![kubeseal-post.png](https://dropper.waylonwalker.com/api/file/833e8681-8220-4096-b211-80c33eb10c1c.png)\n\n## KubeSeal\n\n[https://sealed-secrets.netlify.app/](https://sealed-secrets.netlify.app/){.hoverlink}\n\n\u003ca href='https://sealed-secrets.netlify.app/' \u003e\n\u003cimg\n    src='https://shots.waylonwalker.com/shot/?url=https://sealed-secrets.netlify.app/\u0026height=450\u0026width=800\u0026scaled_width=800\u0026scaled_height=450\u0026selectors='\n    alt='screenshot of https://sealed-secrets.netlify.app/'\n    height='450'\n    width='800'\n/\u003e\n\u003c/a\u003e\n\n## installation\n\nInstallation happens in two steps.  You need the kubernetes controller and the\nclient side cli to create a sealed secret.\n\nFor a more complete instruction see the\n[docs#installation](\u003chttps://github.com/bitnami-labs/sealed-secrets?tab=readme-ov-file#installation\u003e]\n\n## installation - controller\n\n!!! warning\n     **context**\n     Make sure that you are in the right context before running any kubectl commands.\n\n``` bash\nkubectl config current-context\n```\n\nsealed-secrets is installed using the helm package manager.  To install\nsealed-secrets run the following command.\n\n``` bash\nhelm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets\nhelm install sealed-secrets -n kube-system --set-string fullnameOverride=sealed-secrets-controller sealed-secrets/sealed-secrets\n```\n\n## installation - client\n\nFor the client you can check your OS package manager, brew, or the\n[github-releases](https://github.com/bitnami-labs/sealed-secrets/releases/).\nFor me I found it in the main arch repos.\n\n``` bash\nparu -S kubeseal\n# or\nsudo pacman -S kubeseal\n# or\nbrew install kubeseal\n```\n\n!!! note\n     You will need to install kubeseal on every device that you will want to\n     create sealed secrets on.\n\n## Example\n\nMost of these commands come straight from the docs.  From my experience I have\nalways specified the namespace, my projects go per namespace and I don't have\nany reason that other namepsaces should see the secret, and if they do I deploy\nanother secret in that namespace.\n\n``` bash\n# Create a json/yaml-encoded Secret somehow:\n# (note use of `--dry-run` - this is just a local file!)\necho -n bar | kubectl create secret generic mysecret --dry-run=client --from-file=foo=/dev/stdin -o yaml -n thenamespace \u003e mysecret.yaml\n```\n\n\u003e note that the key of the secret is `foo` and the value is `bar`\n\nresults\n\n``` yaml\napiVersion: v1\ndata:\n  foo: YmFy\nkind: Secret\nmetadata:\n  creationTimestamp: null\n  name: mysecret\n  namespace: thenamespace\n```\n\n!!! note\n     The data is base64 encoded.\n\n     ``` bash\n     echo -n bar | base64\n     # YmFy\n     ```\n\n``` bash\n# This is the important bit:\nkubeseal -f mysecret.yaml -w mysealedsecret.yaml\n\n# At this point mysealedsecret.json is safe to upload to Github,\n# post on Twitter, etc.\n\n# Eventually:\nkubectl create -f mysealedsecret.yaml -n thenamespace\n# sealedsecret.bitnami.com/mysecret created\n\n# Profit!\nkubectl get secret mysecret\nkubectl get secret mysecret -n thenamespace\n# NAME       TYPE     DATA   AGE\n# mysecret   Opaque   1      27s\n\ncat mysealedsecret.yaml | kubeseal --validate\n\n```\n\n``` bash\necho -n bar | kubectl create secret generic mysecret --dry-run=client --from-file=foo=/dev/stdin -o yaml \\\n  | kubeseal -o yaml -n thenamespace \u003e mysealedsecret.yaml\necho -n baz | kubectl create secret generic mysecret --dry-run=client --from-file=bar=/dev/stdin -o yaml \\\n  | kubeseal -o yaml -n thenamespace --merge-into mysealedsecret.yaml\n```\n\nResults\n\n``` yaml\n---\napiVersion: bitnami.com/v1alpha1\nkind: SealedSecret\nmetadata:\n  creationTimestamp: null\n  name: mysecret\n  namespace: thenamespace\nspec:\n  encryptedData:\n    bar: AgBLkamltcLfH1dC1JxQ3qd8lJ8aBZF2ARoq3uo055hnzXOy8g2T5liTx5UPvyPV8yyWqABU8eOnwjNhDtzSATvYeBB3fGkucdOZziWEoiNsWTR9ZtFEkod7Ya6uGkzZOJwi3IkrHFVIT9oWZQUxxJZ6vFhPiFcx9Dorr8TNSzG4KOug25+PhWPPiHDgSup5N3CkWCZaYOF7dbZRVSA4nGP1fZxjFByHP4AsdjLCHptyVbkpLRKeiXTkLxfLX4K+JLZGM41S1On5bSP56mCfv1daTJx619kDXkRLw9l21Ot283/L0NMNAiw781AefYMVoO3aHmYgcT6wAtsQAKje9fyL7DQRHt8a5NZOWukp/P6XjdXRz/nfQasQlbSTrRkDpplKIM5/WdPcBoKi+yyoOL0rZ8x1X7YzUI3BggZmzWyEPD01BK1YAHGZnYIZbbCy1JSm8JCBvP+xWMg+i0Z/DCD8nclAhH1GX2Q7/NrNHF//589AJfuriymd2+mk7uaLA4RRsY0l5QeZD6HVAqSv5jWsVQQtSftWmI9vn9oL/Pno7sEUjSDpXPfF4nnsULhxsPEe2DFAMm1kZAjdF06ueF4/x2Fdy80ZQNyycaDx2CWm4z3b14A75WGyOXl2wJZQqxrFCz8el4hD2nH3zQFEzd6AIh49myqVAGuu2qGlYP4p94LJghVa+mQjztLD/2ZUZjY+anQ=\n    foo: AgAducXW6iUCY900cPDdmRfuj7tKnh2hY4C1+2hFoAtjyvjepsKNWsiPJ81t8anaMfFPat4ta060l5VtTrceFE8oS/rViz1tvNWGPBjL+GwL/QjkGl6H8ju87vKERKQn5qw7B/V5j24VM8AxOd+/vJNt/IeRIHLubvFft4hyMq4b0xmIxaemBSTxchQX/5364T3VJH2kHaqpqd+JJgQnTbiTQe/XnyZokDX8GSxw4rAbJUJSRUtY9DB9ZDu2zC5VngX+GJjbwHGbv9EKs8LShJIPrD8xHqrDmlSXGkkP01D4A6268Qoi3x5S0H5aqDgtrgBiWsNkzdKwjfrTNx7pKecOi41lyFdffHOGUew4aPPMqjzWR2TEms9WNNQXwnBdDHKMkFsisocF52BolEkcjF8g/u5h2Af92abMu6k16VybJrB7TV1set5A9W7rqG1iXI4+1W6XQfFnpja8xL/zJBvZcyHgeYMNaxa3C3s6PANhPzAUVaXV9eedAkptGJLN13IZj4LujpoAxRKo6bEdydv/5P23R3fx5PgTOpVI7riECAOIg2PThFsEoVCUwStmKCvIx1I2+YixIlv/OiaUWo4lrI/3ve5WGp4ZnuiJPk34JoYAlRbR6+sX14d8Ek6viq/pJUUIfVpNIkNMboUL4u+KpT47eyQ/mWih/KFduQyX9II/vQ+/IJGzEEHIipxAhdmV+K4=\n  template:\n    metadata:\n      creationTimestamp: null\n      name: mysecret\n      namespace: thenamespace\n```\n\n## backing up your sealing key\n\n``` bash\nkubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml \u003emain.key\n```\n\n## converting .env files to a secret\n\nWorking with web applications .env is a common way to store credentials.  Let's\nlook at how we can convert these to secrets.\n\n``` bash\nkubectl create secret generic mysecret --from-env-file=.env -n thenamespace --dry-run=client -o yaml \u003e mysecret.yaml\n```\n\nNow you have a secret that looks like this.\n\n``` yaml\napiVersion: v1\ndata:\n  foo: YmFy\nkind: Secret\nmetadata:\n  creationTimestamp: null\n  name: mysecret\n  namespace: thenamespace\n```\n\nSeal it up just like before.\n\n``` bash\nkubeseal -f mysecret.yaml -w mysealedsecret.yaml\n```\n\n## Using the secrets\n\nI typically use the secrets in the container spec.\n\n``` yaml\ncontainers:\n  - name: myapp\n    envFrom:\n      - secretRef:\n          name: mysecret\n    # You can still have other env vars\n    env:\n      - name: foo\n        value: bar\n```\n\nSometimes I want to mount the secret as a volume.\n\n``` yaml\ncontainers:\n  - name: myapp\n    volumeMounts:\n      - name: mysecret\n        mountPath: /mysecret\nvolumes:\n  - name: mysecret\n    secret:\n      secretName: mysecret\n```\n\n## Image Pull Secrets\n\nI also need to use imagePullSecrets.  Let's walk through the whole process.  Starting with the secret.\n\n``` bash\nkubectl create secret docker-registry regcred --docker-server=myprivateregistry.example.com --docker-username=foo --docker-password=bar --dry-run=client -o yaml\n```\n\nGenerates the following secret.\n\n``` yaml\napiVersion: v1\ndata:\n  .dockerconfigjson: eyJhdXRocyI6eyJteXByaXZhdGVyZWdpc3RyeS5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImZvbyIsInBhc3N3b3JkIjoiYmFyIiwiYXV0aCI6IlptOXZPbUpoY2c9PSJ9fX0=\nkind: Secret\nmetadata:\n  creationTimestamp: null\n  name: regcred\ntype: kubernetes.io/dockerconfigjson\n\n---\n```\n\n\u003e the secret\n\nNow we we can seal that secret.\n\n``` bash\nkubeseal -f regcred.yaml -w regcred-sealed.yaml\n```\n\nAnd that gives us the following sealed secret that we can deploy into our cluster.\n\n``` yaml\n---\napiVersion: bitnami.com/v1alpha1\nkind: SealedSecret\nmetadata:\n  creationTimestamp: null\n  name: regcred\n  namespace: default\nspec:\n  encryptedData:\n    .dockerconfigjson: AgATYVEywkyYEaoErQbJo6xEZfOnRn1ydNTLkO3Jt/NF/UH+0o9lHpDecRpN0XnVu8xJUcdjkgD9q2XkwP8e6qQDS2mMPTiTNIN+8gbJx97WrD1YQDT0lXBuoyi9I/iwlXxx6MgH/6GY6CeGTz5SRlvoU0Xhlt4d11s7/xapdE8QMLsAReqPEv8oZHEyAxDRrjXX0V+tO8dV+G+GXjUDMBBceLael9rvGzSKIwDVXACVqQhLkB6FoP98M+yyBE46RBNnSnS0ShQM5PprL24HKpRZ43x4RM53KBrQ7R/MxeshafY+B6vUvrolmVox4sud8xngMOcjTO28LLOrck5V8ZiDabhN7ajHEf03IESr1o/ADGf5k9988Vv1txJtsZW0K2mpRu0D7/BLVL9KzbZ5ywULqIoD/Ur2GIGnZqMAKOq4laGp/GJtMKLrhmEvekT397wC/Gf/xdDKVhHf2p4ocsPu7LKFuS5H/Auel/Q5grdn8L5wwrO4VWRv3eJroKh/Hux7Qd7f64O7qdi0XthDocf+gmtjys+Gy72M7tyf8f/O+3oKbS4CWQVTj4ZThMc9znrFnHqt2q/7pAyytTQCpk51wlzOsNvOhCueJM/jmeahaL0LuBrqngqISpnd65sgVzBcZpwK9i2Fckyt0DrZLH+NoIuvaqNhzlF+OMbAft/ylWWKCH4WUP+FKG+1LXM7ud7AA3MMbGSBxHL0/WK/INa7MB56xZKMqqyvvLLQHFTQUROJjkgkzsumdOgwZTRgIFnAZ4+vOX3/1Rtt3mAs3vdoJhL4GuKUYCnEHt908eKkWEVEs7eMk5SdSRtIsbaXO2s0dtADwg==\n  template:\n    metadata:\n      creationTimestamp: null\n      name: regcred\n      namespace: default\n    type: kubernetes.io/dockerconfigjson\n```\n\nNow that we have our sealed registry secret, we can deploy it into our cluster.\n\n``` bash\nkubectl apply -f regcred-sealed.yaml\n```\n\nNow we can use it to pull images from our private registry.\n\n``` yaml\ncontainers:\n  imagePullSecrets:\n    - name: regcred\n```\n\n## Full example\n\nHere is a full deployment example using all the secrets we have created.\n\n* regcred\n* mounting a secret\n* envFrom secret\n\n``` yaml\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  creationTimestamp: null\n  labels:\n    service: myservice\n  name: myservice\n  namespace: mynamespace\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      service: myservice\n  strategy:\n    type: Recreate\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        service: myservice\n    spec:\n      containers:\n        - envFrom:\n            - secretRef:\n                name: mysecret\n          env:\n            - name: foo\n              value: bar\n          image: private-registry.io/myimage:1.0.0\n          name: myimage\n          ports:\n            - containerPort: 5000\n              protocol: TCP\n          resources: {}\n          volumeMounts:\n            - mountPath: /mysecret\n              name: mysecret\n      restartPolicy: Always\n      volumes:\n        - name: mysecret\n          secret:\n            secretName: mysecret\n      imagePullSecrets:\n        - name: regcred\n```\n\n## Downside\n\nNow the main downside I see with kubeseal is that it does not provide a way to\nstore your secrets in a way that you can access outside of your cluster.  So\nyou need to make sure that you have another solution in place to store your\nsecrets so that you still have them if you ever were to take the cluster down\nor move from k8s to something else.\n\nOverall the likelyhood of you loosing a production cluster is pretty low, so\nmaybe it's ok to just trust it depending on what the secrets are.  Especially\nfor things you control and can rotate anyways its fine.\n",
      "summary": "In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...",
      "date_published": "2024-03-27T20:02:57Z",
      "date_modified": "2024-03-27T20:02:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/val-town-codemirror-codeium/",
      "url": "https://go.waylonwalker.com/val-town-codemirror-codeium/",
      "title": "⭐ val-town codemirror-codeium",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/val-town/codemirror-codeium\" 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\"\u003ecodemirror-codeium\u003c/a\u003e by \u003ca href=\"https://github.com/val-town\" 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\"\u003eval-town\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eCodeium code completion integration for CodeMirror 6\u003c/p\u003e\n",
      "content_text": "\nJust starred [codemirror-codeium](https://github.com/val-town/codemirror-codeium) by [val-town](https://github.com/val-town). It's an exciting project with a lot to offer.\n\nCodeium code completion integration for CodeMirror 6\n",
      "summary": "Just starred codemirror-codeium by val-town. It's an exciting project with a lot to offer.",
      "date_published": "2024-03-27T01:14:22Z",
      "date_modified": "2024-03-27T01:14:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-228/",
      "url": "https://go.waylonwalker.com/thought-228/",
      "title": "💭 Middleware Explained - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"JKb_rYvdmpo\" title=\"Middleware Explained\" playlabel=\"Play: Middleware Explained\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat episode covering a seemingly simple topic.  What I really benefitted from was hearing all the different use cases, from logging, debugging, to a/b testing, caching, and auth.  I hadn’t even thought of it being applied to a router.  I thought of it being applied for an entire application.  This seems very useful for things like an admin router, all routes would need to have the admin role to get in.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"JKb_rYvdmpo\" title=\"Middleware Explained\" playlabel=\"Play: Middleware Explained\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat episode covering a seemingly simple topic.  What I really benefitted from was hearing all the different use cases, from logging, debugging, to a/b testing, caching, and auth.  I hadn't even thought of it being applied to a router.  I thought of it being applied for an entire application.  This seems very useful for things like an admin router, all routes would need to have the admin role to get in.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=JKb_rYvdmpo",
      "date_published": "2024-03-26T13:56:33Z",
      "date_modified": "2024-03-26T13:56:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-227/",
      "url": "https://go.waylonwalker.com/thought-227/",
      "title": "💭 fastapi decorators",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eI’ve been using these decorators to modify the behavior of specific routes.  It will do things like 404 admin only routes in a way that looks just like \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’s default, or only allow certain roles into the route, or redirect unauthenticated users to login.\u003c/p\u003e\n\u003cp\u003eAfter listening to yesterday’s syntaxfm I’m now really thinking about middleware and the benefits it might have.  middleware would make it easy to apply things like admin to an entire admin router, so you wont forget it on any one admin route.  It will look cleaner as the admin checker is only applied once per router, not once per route.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003einspect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etime\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efunctools\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ewraps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003einspect\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003esignature\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.responses\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFileResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eJSONResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRedirectResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003estarlette\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efokais.config\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efokais.models.user\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eRole\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eget_config\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eadmin_routes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eauthenticated_routes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enot_cached_routes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecached_routes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003enot_found\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehx_request_header\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hx-request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_agent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user-agent\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elower\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;mozilla\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003euser_agent\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;webkit\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003euser_agent\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003ehx_request_header\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;error.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;status_code\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;detail\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Not Found\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e404\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eJSONResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;status_code\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;detail\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Not Found\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eno_cache\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enot_cached_routes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__module__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@wraps\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ewrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# my_header will be now available in decorator\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esignature\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparameters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiscoroutinefunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Cache-Control\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;no-cache, no-store, must-revalidate\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Pragma\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;no-cache\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Expires\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ewrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ecache\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emax_age\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e86400\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003einner_wrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecached_routes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__module__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nd\"\u003e@wraps\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ewrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esignature\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparameters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiscoroutinefunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;Cache-Control\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;public, max-age=\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003emax_age\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e, stale-while-revalidate=31536000, stale-if-error=31536000\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Expires\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003emax_age\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ewrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003einner_wrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eadmin_only\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eadmin_routes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__module__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@wraps\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ewrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003enot_found\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erole\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"n\"\u003eRole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003enot_found\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esignature\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparameters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiscoroutinefunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ewrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eauthenticated\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eroles\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eRole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e \u003cspan class=\"n\"\u003eredirect_to\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;get_login\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003einner_wrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eauthenticated_routes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__module__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nd\"\u003e@wraps\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ewrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eRedirectResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eurl_for\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eredirect_to\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esource\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_302_FOUND\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erole\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eroles\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003enot_found\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esignature\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparameters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiscoroutinefunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ewrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003einner_wrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edefault_data\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003edefaults\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_data\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003einner_wrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edefault_data\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__module__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nd\"\u003e@wraps\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ewrapper\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esignature\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparameters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiscoroutinefunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ewrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003einner_wrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nI've been using these decorators to modify the behavior of specific routes.  It will do things like 404 admin only routes in a way that looks just like fastapi's default, or only allow certain roles into the route, or redirect unauthenticated users to login.\n\nAfter listening to yesterday's syntaxfm I'm now really thinking about middleware and the benefits it might have.  middleware would make it easy to apply things like admin to an entire admin router, so you wont forget it on any one admin route.  It will look cleaner as the admin checker is only applied once per router, not once per route.\n\n``` python \nimport inspect\nimport time\nfrom functools import wraps\nfrom inspect import signature\n\nfrom fastapi import Request\nfrom fastapi.responses import FileResponse, JSONResponse, RedirectResponse\nfrom starlette import status\n\nfrom fokais.config import get_config\nfrom fokais.models.user import Role\n\nconfig = get_config()\n\n\nadmin_routes = []\nauthenticated_routes = []\nnot_cached_routes = []\ncached_routes = []\n\n\ndef not_found(request):\n    hx_request_header = request.headers.get(\"hx-request\")\n    user_agent = request.headers.get(\"user-agent\", \"\").lower()\n\n    if \"mozilla\" in user_agent or \"webkit\" in user_agent or hx_request_header:\n        return config.templates.TemplateResponse(\n            \"error.html\", {\"status_code\": 404, \"detail\": \"Not Found\", \"request\": request}, status_code=404\n        )\n    else:\n        return JSONResponse(\n            content={\n                \"status_code\": 404,\n                \"detail\": \"Not Found\",\n            },\n            status_code=404,\n        )\n\n\ndef no_cache(func):\n    not_cached_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n    @wraps(func)\n    async def wrapper(*args, request: Request, **kwargs):\n        # my_header will be now available in decorator\n        if \"request\" in signature(func).parameters:\n            kwargs[\"request\"] = request\n\n        if inspect.iscoroutinefunction(func):\n            response = await func(*args, **kwargs)\n        else:\n            response = func(*args, **kwargs)\n\n        response.headers[\"Cache-Control\"] = \"no-cache, no-store, must-revalidate\"\n        response.headers[\"Pragma\"] = \"no-cache\"\n        response.headers[\"Expires\"] = \"0\"\n        return response\n\n    return wrapper\n\n\ndef cache(max_age=86400):\n    def inner_wrapper(func):\n        cached_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n        @wraps(func)\n        async def wrapper(*args, request: Request, **kwargs):\n            if \"request\" in signature(func).parameters:\n                kwargs[\"request\"] = request\n            if inspect.iscoroutinefunction(func):\n                response = await func(*args, **kwargs)\n            else:\n                response = func(*args, **kwargs)\n            response.headers[\n                \"Cache-Control\"\n            ] = f\"public, max-age={max_age}, stale-while-revalidate=31536000, stale-if-error=31536000\"\n            response.headers[\"Expires\"] = f\"{int(time.time()) + max_age}\"\n\n            return response\n\n        return wrapper\n\n    return inner_wrapper\n\n\ndef admin_only(func):\n    admin_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n    @wraps(func)\n    async def wrapper(*args, request: Request, **kwargs):\n        if request.state.user is None:\n            return not_found(request)\n        if request.state.user.role != Role.admin:\n            return not_found(request)\n        if \"request\" in signature(func).parameters:\n            kwargs[\"request\"] = request\n        if inspect.iscoroutinefunction(func):\n            response = await func(*args, **kwargs)\n        else:\n            response = func(*args, **kwargs)\n        return response\n\n    return wrapper\n\n\ndef authenticated(roles=[Role.user, Role.admin], redirect_to=\"get_login\"):\n    def inner_wrapper(func):\n        authenticated_routes.append(f\"{func.__module__}.{func.__name__}\")\n\n        @wraps(func)\n        async def wrapper(*args, request: Request, **kwargs):\n            if request.state.user is None:\n                return RedirectResponse(\n                    url=request.url_for(redirect_to, source=request.url), status_code=status.HTTP_302_FOUND\n                )\n            if request.state.user.role not in roles:\n                return not_found(request)\n\n            if \"request\" in signature(func).parameters:\n                kwargs[\"request\"] = request\n            if inspect.iscoroutinefunction(func):\n                response = await func(*args, **kwargs)\n            else:\n                response = func(*args, **kwargs)\n            return response\n\n        return wrapper\n\n    return inner_wrapper\n\n\ndefault_data = {}\n\n\ndef defaults(data=default_data):\n    def inner_wrapper(func):\n        default_data[f\"{func.__module__}.{func.__name__}\"] = data\n\n        @wraps(func)\n        async def wrapper(*args, request: Request, **kwargs):\n            if \"request\" in signature(func).parameters:\n                kwargs[\"request\"] = request\n            if inspect.iscoroutinefunction(func):\n                response = await func(*args, **kwargs)\n            else:\n                response = func(*args, **kwargs)\n            return response\n\n        return wrapper\n\n    return inner_wrapper\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2024-03-26T13:50:46Z",
      "date_modified": "2024-03-26T13:50:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-224/",
      "url": "https://go.waylonwalker.com/thought-224/",
      "title": "💭 Simon Willison on X: \"TIL Google Chrome has a --headless optio...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/simonw/status/1772043579231445366\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHuh, so this is just built right into the chrome cli.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eApplications\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eGoogle\u003c/span\u003e\\ \u003cspan class=\"n\"\u003eChrome\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eContents\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eMacOS\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eGoogle\u003c/span\u003e\\ \u003cspan class=\"n\"\u003eChrome\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eheadless\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"o\"\u003e=/\u003c/span\u003e\u003cspan class=\"n\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eshot1\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epng\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003esimonwillison\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003enet\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/simonw/status/1772043579231445366\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHuh, so this is just built right into the chrome cli.\n\n``` python\n/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome \\\n  --headless \\\n  --screenshot=/tmp/shot1.png \\\n  https://simonwillison.net\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/simonw/status/1772043579231445366",
      "date_published": "2024-03-25T03:10:39Z",
      "date_modified": "2024-03-25T03:10:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-223/",
      "url": "https://go.waylonwalker.com/thought-223/",
      "title": "💭 fastapi https url_for",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003ejinja’s \u003ccode\u003eurl_for\u003c/code\u003e in \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 does not account for https by default, there is\nprobably a better way, but this is a way that allows me to configure when I use\nhttp vs https.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pass_context\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehttps_url_for\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003edict\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003epath_params\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAny\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    always convert http to https\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehttp_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eurl_for\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003epath_params\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehttp_url\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;http\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseSettings\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https_url_for\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehttps_url_for\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e## only use the default url_for for local development, for dev, qa, and prod use https\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenviron\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ENV\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;qa\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;prod\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;url_for\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehttps_url_for\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Using HTTPS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Using HTTP\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\n\njinja's `url_for` in fastapi does not account for https by default, there is\nprobably a better way, but this is a way that allows me to configure when I use\nhttp vs https.\n\n``` python\n@pass_context\ndef https_url_for(context: dict, name: str, **path_params: Any) -\u003e str:\n    \"\"\"\n    always convert http to https\n    \"\"\"\n    request = context[\"request\"]\n    http_url = request.url_for(name, **path_params)\n    return str(http_url).replace(\"http\", \"https\", 1)\n\n\ndef get_templates(config: BaseSettings) -\u003e Jinja2Templates:\n    templates = Jinja2Templates(directory=\"templates\")\n    templates.env.globals[\"https_url_for\"] = https_url_for\n\n    ## only use the default url_for for local development, for dev, qa, and prod use https\n    if os.environ.get(\"ENV\") in [\"dev\", \"qa\", \"prod\"]:\n        templates.env.globals[\"url_for\"] = https_url_for\n        console.print(\"Using HTTPS\")\n    else:\n        console.print(\"Using HTTP\")\n\n    return templates\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2024-03-24T18:15:48Z",
      "date_modified": "2024-03-24T18:15:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-222/",
      "url": "https://go.waylonwalker.com/thought-222/",
      "title": "💭 Cassidy on X: \"I MADE AN APP ✨ https://t.co/BiyX8XZqDK\" / X",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/cassidoo/status/1770900985382138291\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDamn are one time paid and have it apps making a comeback?  Seems like the perfect thing to have someone else automate and not pay a subscription for.\u003c/p\u003e\n\u003cp\u003eGenius Idea Cassidy!!\u003c/p\u003e\n\u003cp\u003eNow what do you call this, its not software as a service, is this just sofware?\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/cassidoo/status/1770900985382138291\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDamn are one time paid and have it apps making a comeback?  Seems like the perfect thing to have someone else automate and not pay a subscription for.\n\nGenius Idea Cassidy!!\n\nNow what do you call this, its not software as a service, is this just sofware?\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/cassidoo/status/1770900985382138291",
      "date_published": "2024-03-21T23:44:43Z",
      "date_modified": "2024-03-21T23:44:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-221/",
      "url": "https://go.waylonwalker.com/thought-221/",
      "title": "💭 learning strawberry",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003elogging\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etyping\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003estrawberry\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003estrawberry.fastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eGraphQLRouter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elogger\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elogging\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egetLogger\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebooks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebook_authors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_author_for_book\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Author\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_authors\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@strawberry.type\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Author\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresolver\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eget_author_for_book\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_books_for_author\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;getting books for \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@strawberry.type\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eAuthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresolver\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eget_books_for_author\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAuthor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Michael Crichton\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebooks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Jurassic Park\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# relationships\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebook_authors\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_author_by_id\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eAuthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_book_by_id\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_authors\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eAuthor\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalues\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_books\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e]:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_authors\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalues\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@strawberry.type\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eQuery\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAuthor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresolver\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eget_author_by_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eBook\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresolver\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eget_book_by_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eAuthor\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresolver\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eget_authors\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresolver\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eget_books\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@strawberry.field\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehello\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;this is a resolver for hello, just like authors and books have a resolver\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Hello World\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hello \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@strawberry.input\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eAddBookInput\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;The title of the book\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efield\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;The name of the author\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@strawberry.type\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMutation\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@strawberry.field\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# def add_book(self, title: str, author: str) -\u0026gt; Book:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eadd_book\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAddBookInput\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;i got a book: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;of type \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"nb\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;here are the names \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\u003cspan class=\"p\"\u003e()]\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;my name is \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;this is the author i found \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ekeys\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eAuthor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ebook\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebook\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ekeys\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebook_authors\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;I am making book \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e has books \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ekeys\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eauthors_books\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor_id\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebook\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eBook\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ebook_id\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;i got books: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003ebooks\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;i got authors: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ebook\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eschema\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrawberry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSchema\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eQuery\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emutation\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eMutation\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erouter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGraphQLRouter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eschema\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\n``` python\nimport logging\nfrom typing import List\n\nimport strawberry\nfrom fastapi import FastAPI\nfrom strawberry.fastapi import GraphQLRouter\n\nlogger = logging.getLogger(__name__)\n\nauthors = {}\nbooks = {}\nbook_authors = {}\nauthors_books = {}\n\n\ndef get_author_for_book(root) -\u003e \"Author\":\n    return authors[book_authors[root.id]]\n\n\n@strawberry.type\nclass Book:\n    id: int\n    title: str\n    author: \"Author\" = strawberry.field(resolver=get_author_for_book)\n\n\ndef get_books_for_author(root) -\u003e List[Book]:\n    print(f\"getting books for {root}\")\n    return [books[i] for i in authors_books[root.id]]\n\n\n@strawberry.type\nclass Author:\n    id: int\n    name: str\n    books: List[Book] = strawberry.field(resolver=get_books_for_author)\n\n\nauthors = {1: Author(id=1, name=\"Michael Crichton\")}\nbooks = {1: Book(id=1, title=\"Jurassic Park\")}\n# relationships\nbook_authors[1] = 1\nauthors_books[1] = [1]\n\n\ndef get_author_by_id(id: int) -\u003e Author:\n    return authors.get(id)\n\n\ndef get_book_by_id(id: int) -\u003e Book:\n    return books.get(id)\n\n\ndef get_authors(root) -\u003e List[Author]:\n    return authors.values()\n\n\ndef get_books(root) -\u003e List[Book]:\n    print(books)\n    print(authors)\n    print(book_authors)\n    print(authors_books)\n    return books.values()\n\n\n@strawberry.type\nclass Query:\n    author: Author = strawberry.field(resolver=get_author_by_id)\n    book: Book = strawberry.field(resolver=get_book_by_id)\n    authors: List[Author] = strawberry.field(resolver=get_authors)\n    books: List[Book] = strawberry.field(resolver=get_books)\n\n    @strawberry.field\n    def hello(self, name: str = None) -\u003e str:\n        \"\"\"this is a resolver for hello, just like authors and books have a resolver\"\"\"\n        if name is None:\n            return \"Hello World\"\n        return f\"Hello {name}\"\n\n\n@strawberry.input\nclass AddBookInput:\n    title: str = strawberry.field(description=\"The title of the book\")\n    author: str = strawberry.field(description=\"The name of the author\")\n\n\n@strawberry.type\nclass Mutation:\n    @strawberry.field\n    # def add_book(self, title: str, author: str) -\u003e Book:\n    def add_book(self, book: AddBookInput) -\u003e Book:\n        print(f\"i got a book: {book.title}\")\n        print(f\"of type {type(book.title)}\")\n        name = book.author\n        title = book.title\n        author = [author for id, author in authors.items() if author.name == name]\n        print(f\"here are the names {[author.name for id, author in authors.items()]}\")\n        print(f\"my name is { name }\")\n        print(f\"this is the author i found {author}\")\n        if author:\n            author = author[0]\n            author_id = author.id\n        else:\n            author_id = max(authors.keys()) + 1\n            author = Author(id=author_id, name=name)\n            authors[author_id] = author\n\n        book = [b for id, b in books.items() if b.title == title]\n        if book:\n            book = book[0]\n        else:\n            book_id = max(books.keys()) + 1\n            book_authors[book_id] = author_id\n            print(f\"I am making book {book_id}\")\n            print(f\"{name} has books {authors_books.get(author_id)}\")\n\n            if author_id in authors_books.keys():\n                authors_books[author_id].append(book_id)\n            else:\n                authors_books[author_id] = [book_id]\n            book = Book(id=book_id, title=title)\n            books[book_id] = book\n\n        print(f\"i got books: {books}\")\n        print(f\"i got authors: {authors}\")\n        return book\n\n\nschema = strawberry.Schema(query=Query, mutation=Mutation)\n\nrouter = GraphQLRouter(\n    schema,\n)\n\napp = FastAPI()\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2024-03-20T21:43:45Z",
      "date_modified": "2024-03-20T21:43:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "graphql",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-220/",
      "url": "https://go.waylonwalker.com/thought-220/",
      "title": "💭 Joining the split keyboards club: a Moonlander story",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://carlosbecker.com/posts/split-keyboard-moonlander/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://carlosbecker.com/posts/split-keyboard-moonlander/ef219e02-d7d3-46d1-a9f6-be3d929775ed.webp\" alt=\"Joining the split keyboards club: a Moonlander story | Carlos Becker — This post will describe my experience with a couple of firsts:\" loading=\"lazy\"/ data-glightbox=\"description: Joining the split keyboards club: a Moonlander story | Carlos Becker — This post will describe my experience with a couple of firsts:\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJoining the split keyboards club: a Moonlander story | Carlos Becker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis post will describe my experience with a couple of firsts:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecarlosbecker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI switched from a 60% vortex pok3r to a 40% corne June, 2021.  I can relate to a lot of what Carlos talks about here.  I think going from 60%-40% made my journey harder than it needed to be.  There’s no going back now, but it took me a \u003cstrong\u003ereally\u003c/strong\u003e long time to be able to hit all of the numbers and symbols, just figuring out how to do the layout was hard there’s not much space.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI didn’t touch type. I never really used my pinkies, except maybe for ESC, Shift, CTRL, Backspace et al.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can relate to this, my typing habits were terrible.  Shortly before going split ortho I worked on my speed with lots, and lots of practice on keybr and monkeytype.  I took my speed from 35wpm to 80wpm with a few months of steady practice. This is one of the best things I did for myself.\u003c/p\u003e\n\u003cp\u003eOnce I got split it dropped down to single digits and slowly rose back up to 80, just barely breaking my PB on monkeytype.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI still feel like I still can’t type at my previous max speed — mostly because I wasn’t used to use my pinky and used the “wrong finger” for a lot of keys, but, nevertheless: I got there! I can touch type now! Yay! 🥳\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI feel this!  I’m pretty sure that I could still type faster on a normal keeb given some practice, but damn a split ortho is so comfy.  A normal row stagger feels like its twisting my fingers.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUpdate: my top speed was 125wpm for 10 words, and I can comfortably type between 80-100wpm now. Good enough.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDamn thats good.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe bad news is that I’ll need to bring my keyboard with me everywhere I go now…\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eYes, normal keebs feel awkward and like your fingers are all twisted up.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://carlosbecker.com/posts/split-keyboard-moonlander/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://carlosbecker.com/posts/split-keyboard-moonlander/ef219e02-d7d3-46d1-a9f6-be3d929775ed.webp\" alt=\"Joining the split keyboards club: a Moonlander story | Carlos Becker — This post will describe my experience with a couple of firsts:\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJoining the split keyboards club: a Moonlander story | Carlos Becker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis post will describe my experience with a couple of firsts:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecarlosbecker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI switched from a 60% vortex pok3r to a 40% corne June, 2021.  I can relate to a lot of what Carlos talks about here.  I think going from 60%-40% made my journey harder than it needed to be.  There's no going back now, but it took me a **really** long time to be able to hit all of the numbers and symbols, just figuring out how to do the layout was hard there's not much space.\n\n\u003e I didn’t touch type. I never really used my pinkies, except maybe for ESC, Shift, CTRL, Backspace et al.\n\nI can relate to this, my typing habits were terrible.  Shortly before going split ortho I worked on my speed with lots, and lots of practice on keybr and monkeytype.  I took my speed from 35wpm to 80wpm with a few months of steady practice. This is one of the best things I did for myself. \n\nOnce I got split it dropped down to single digits and slowly rose back up to 80, just barely breaking my PB on monkeytype.\n\n\u003e I still feel like I still can’t type at my previous max speed — mostly because I wasn’t used to use my pinky and used the “wrong finger” for a lot of keys, but, nevertheless: I got there! I can touch type now! Yay! 🥳\n\nI feel this!  I'm pretty sure that I could still type faster on a normal keeb given some practice, but damn a split ortho is so comfy.  A normal row stagger feels like its twisting my fingers.\n\n\u003e Update: my top speed was 125wpm for 10 words, and I can comfortably type between 80-100wpm now. Good enough.\n\nDamn thats good.\n\n\u003e The bad news is that I’ll need to bring my keyboard with me everywhere I go now…\n\nYes, normal keebs feel awkward and like your fingers are all twisted up.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://carlosbecker.com/posts/split-keyboard-moonlander/",
      "date_published": "2024-03-20T00:17:59Z",
      "date_modified": "2024-03-20T00:17:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-219/",
      "url": "https://go.waylonwalker.com/thought-219/",
      "title": "💭 My workflow, part 1",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://carlosbecker.com/posts/workflow-pt1/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://carlosbecker.com/carlos-and-bash.webp\" alt=\"My workflow, part 1 | Carlos Becker — I keep getting asked how my setup works, how I use tmux and\nnvim over ssh… all that good stuff.\" loading=\"lazy\"/ data-glightbox=\"description: My workflow, part 1 | Carlos Becker — I keep getting asked how my setup works, how I use tmux and\nnvim over ssh… all that good stuff.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMy workflow, part 1 | Carlos Becker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI keep getting asked how my setup works, how I use tmux and\nnvim over ssh… all that good stuff.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecarlosbecker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCarlos has a pretty sick setup here, I can relate to mostly, cept the macos part.  My main critique is that I don’t think he gave window managers much chance on linux, and they just don’t work on MacOS/Windows.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMost of the time I have a single, maximized window.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI can relate to this. I should really make a full post about my experience with tiling window managers.  TLDR, I came for tiling and I stayed for the workspaces.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMultiple Displays\nAn exception here could be streaming: having multiple displays can help preventing doxing yourself if you only share the screen of one of them. I only did stream like 3 times and that’s what I did, but I’m sure experienced streamers have better workflows (with or without multiple displays).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAccurate, my home machine uses one monitor, and for work I use one monitor+laptop.  I pair, screenshare, and present quite a bit at work, and its good to have one screen for sharing, and one for seeing things like the app you are sharing from (chat, cams, etc)\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://carlosbecker.com/posts/workflow-pt1/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://carlosbecker.com/carlos-and-bash.webp\" alt=\"My workflow, part 1 | Carlos Becker — I keep getting asked how my setup works, how I use tmux and\nnvim over ssh… all that good stuff.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMy workflow, part 1 | Carlos Becker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI keep getting asked how my setup works, how I use tmux and\nnvim over ssh… all that good stuff.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ecarlosbecker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCarlos has a pretty sick setup here, I can relate to mostly, cept the macos part.  My main critique is that I don't think he gave window managers much chance on linux, and they just don't work on MacOS/Windows.\n\n\u003e Most of the time I have a single, maximized window.\n\nI can relate to this. I should really make a full post about my experience with tiling window managers.  TLDR, I came for tiling and I stayed for the workspaces.\n\n\u003e Multiple Displays\n\u003e An exception here could be streaming: having multiple displays can help preventing doxing yourself if you only share the screen of one of them. I only did stream like 3 times and that’s what I did, but I’m sure experienced streamers have better workflows (with or without multiple displays).\n\nAccurate, my home machine uses one monitor, and for work I use one monitor+laptop.  I pair, screenshare, and present quite a bit at work, and its good to have one screen for sharing, and one for seeing things like the app you are sharing from (chat, cams, etc)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://carlosbecker.com/posts/workflow-pt1/",
      "date_published": "2024-03-19T23:52:31Z",
      "date_modified": "2024-03-19T23:52:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "workflow",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/strawberry-graphql-strawberry-sqlalchemy/",
      "url": "https://go.waylonwalker.com/strawberry-graphql-strawberry-sqlalchemy/",
      "title": "⭐ strawberry-graphql strawberry-sqlalchemy",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-sqlalchemy\" 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\"\u003estrawberry-sqlalchemy\u003c/a\u003e by \u003ca href=\"https://github.com/strawberry-graphql\" 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\"\u003estrawberry-graphql\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA SQLAlchemy Integration for strawberry-graphql\u003c/p\u003e\n",
      "content_text": "\n[strawberry-sqlalchemy](https://github.com/strawberry-graphql/strawberry-sqlalchemy) by [strawberry-graphql](https://github.com/strawberry-graphql) is a game-changer in its space. Excited to see how it evolves.\n\nA SQLAlchemy Integration for strawberry-graphql\n",
      "summary": "strawberry-sqlalchemy by strawberry-graphql is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-03-19T19:34:44Z",
      "date_modified": "2024-03-19T19:34:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tyxsspa-anytext/",
      "url": "https://go.waylonwalker.com/tyxsspa-anytext/",
      "title": "⭐ tyxsspa AnyText",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/tyxsspa/AnyText\" 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\"\u003eAnyText\u003c/a\u003e by \u003ca href=\"https://github.com/tyxsspa\" 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\"\u003etyxsspa\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eOfficial implementation code of the paper \u0026lt;AnyText: Multilingual Visual Text Generation And Editing\u0026gt;\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [AnyText](https://github.com/tyxsspa/AnyText) by [tyxsspa](https://github.com/tyxsspa), and it's truly impressive.\n\nOfficial implementation code of the paper \u003cAnyText: Multilingual Visual Text Generation And Editing\u003e\n",
      "summary": "I recently discovered AnyText by tyxsspa, and it's truly impressive.",
      "date_published": "2024-03-19T19:34:37Z",
      "date_modified": "2024-03-19T19:34:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-218/",
      "url": "https://go.waylonwalker.com/thought-218/",
      "title": "💭 Using Netlify Analytics to Build a List of Popular Posts - Jim...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2020/using-netlify-analytics-to-build-list-of-popular-posts/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.jim-nielsen.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing Netlify Analytics to Build a List of Popular Posts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a sick feature of Jim’s blog, I am really inspired by this.  I am not sure how to do it for my own.  I honestly think the easiest non locked in way would be to just use google search console results.  It’s definitely a different way to think about it, but most of my traffic is coming from google search, so it would be a pretty good ballpark estimate.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.jim-nielsen.com/2020/using-netlify-analytics-to-build-list-of-popular-posts/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUsing Netlify Analytics to Build a List of Popular Posts\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWriting about the big beautiful mess that is making things for the world wide web.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eblog.jim-nielsen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a sick feature of Jim's blog, I am really inspired by this.  I am not sure how to do it for my own.  I honestly think the easiest non locked in way would be to just use google search console results.  It's definitely a different way to think about it, but most of my traffic is coming from google search, so it would be a pretty good ballpark estimate.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.jim-nielsen.com/2020/using-netlify-analytics-to-build-list-of-popular-posts/",
      "date_published": "2024-03-18T02:12:20Z",
      "date_modified": "2024-03-18T02:12:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastapi-full-stack-fastapi-template/",
      "url": "https://go.waylonwalker.com/fastapi-full-stack-fastapi-template/",
      "title": "⭐ fastapi full-stack-fastapi-template",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/fastapi/full-stack-fastapi-template\" 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\"\u003efull-stack-fastapi-template\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/fastapi\" 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\"\u003efastapi\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eFull stack, modern web application template. Using \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, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template), an amazing project by [fastapi](https://github.com/fastapi). It's worth exploring!\n\nFull stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.\n",
      "summary": "I'm really excited about full-stack-fastapi-template, an amazing project by fastapi. It's worth exploring!",
      "date_published": "2024-03-16T17:08:34Z",
      "date_modified": "2024-03-16T17:08:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/heyputer-puter/",
      "url": "https://go.waylonwalker.com/heyputer-puter/",
      "title": "⭐ HeyPuter puter",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/HeyPuter/puter\" 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\"\u003eputer\u003c/a\u003e from \u003ca href=\"https://github.com/HeyPuter\" 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\"\u003eHeyPuter\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003e🌐 The Internet OS! Free, Open-Source, and Self-Hostable.\u003c/p\u003e\n",
      "content_text": "\nI came across [puter](https://github.com/HeyPuter/puter) from [HeyPuter](https://github.com/HeyPuter), and it's packed with great features and ideas.\n\n🌐 The Internet OS! Free, Open-Source, and Self-Hostable.\n",
      "summary": "I came across puter from HeyPuter, and it's packed with great features and ideas.",
      "date_published": "2024-03-16T16:12:38Z",
      "date_modified": "2024-03-16T16:12:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-217/",
      "url": "https://go.waylonwalker.com/thought-217/",
      "title": "💭 605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://shoptalkshow.com/605/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://i0.wp.com/shoptalkshow.com/wp-content/uploads/2022/02/Jim-Nielson.jpeg?fit=400%2C400\u0026amp;ssl=1\" alt=\"605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design Engineers — Jim Nielsen joins us to about URLs and linking as the new subversive way to maintain the web, paying for news in Canada, should content creators be worried about AI, the case for design engineers, …\" loading=\"lazy\"/ data-glightbox=\"description: 605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design Engineers — Jim Nielsen joins us to about URLs and linking as the new subversive way to maintain the web, paying for news in Canada, should content creators be worried about AI, the case for design engineers, …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design Engineers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eJim Nielsen joins us to about URLs and linking as the new subversive way to maintain the web, paying for news in Canada, should content creators be worried about AI, the case for design engineers, …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eShopTalk · shoptalkshow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAn absolute fantastic episode about blogging, thinking about a web1.0 kind of world today, and what it means moving forward.\u003c/p\u003e\n\u003cp\u003eWeb 1.0 is robust, you own your own destiny, you own your data, you can do what you want.  There is no platform to tell you what you can and cannot do.  But the future web is stealing your data to build AI models, spam sites are duplicating your content and stealing your SEO.  You may or may not care, but at the end whether you get traffic or now you own your web 1.0 sites.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://shoptalkshow.com/605/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://i0.wp.com/shoptalkshow.com/wp-content/uploads/2022/02/Jim-Nielson.jpeg?fit=400%2C400\u0026amp;ssl=1\" alt=\"605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design Engineers — Jim Nielsen joins us to about URLs and linking as the new subversive way to maintain the web, paying for news in Canada, should content creators be worried about AI, the case for design engineers, …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e605: Jim Nielsen on Subversive URLs, Blogging + AI, and Design Engineers\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eJim Nielsen joins us to about URLs and linking as the new subversive way to maintain the web, paying for news in Canada, should content creators be worried about AI, the case for design engineers, …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eShopTalk \u0026middot; shoptalkshow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAn absolute fantastic episode about blogging, thinking about a web1.0 kind of world today, and what it means moving forward.\n\nWeb 1.0 is robust, you own your own destiny, you own your data, you can do what you want.  There is no platform to tell you what you can and cannot do.  But the future web is stealing your data to build AI models, spam sites are duplicating your content and stealing your SEO.  You may or may not care, but at the end whether you get traffic or now you own your web 1.0 sites.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://shoptalkshow.com/605/",
      "date_published": "2024-03-15T14:42:30Z",
      "date_modified": "2024-03-15T14:42:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "web",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-216/",
      "url": "https://go.waylonwalker.com/thought-216/",
      "title": "💭 Configure Liveness, Readiness and Startup Probes | Kubernetes",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/images/kubernetes-open-graph.png\" alt=\"Configure Liveness, Readiness and Startup Probes — This page shows how to configure liveness, readiness and startup probes for containers.\nFor more information about probes, see Liveness, Readiness and Startup Probes.\nBefore you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts.\" loading=\"lazy\"/ data-glightbox=\"description: Configure Liveness, Readiness and Startup Probes — This page shows how to configure liveness, readiness and startup probes for containers.\nFor more information about probes, see Liveness, Readiness and Startup Probes.\nBefore you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eConfigure Liveness, Readiness and Startup Probes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis page shows how to configure liveness, readiness and startup probes for containers.\nFor more information about probes, see Liveness, Readiness and Startup Probes.\nBefore you begin You need to h...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKubernetes · kubernetes.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWhat is the difference between health, liveness, readiness, and startup?  This article does a great job at a full writeup description of how it works in kubernetes, here is my TLDR.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ehealth 200 OK - I’m still responding to requests\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ehealth ERR - something happened and I cant respond to requests\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eliveness 200 OK - I’m ready for more work\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eliveness ERR - I’m still responding to requests, and i’m already working send requests to another pod, or scale up\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"z-pages\"\u003eZ-pages \u003ca href=\"#z-pages\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese probes are commonly deployed at \u003ccode\u003e/healthz\u003c/code\u003e and \u003ccode\u003e/livez\u003c/code\u003e endpoints.\u003c/p\u003e\n\u003cp\u003eWhy the z?\u003c/p\u003e\n\u003cp\u003ez is a convention that comes from google for meta endpoints to reduce conflict with actual endpoints, and can be deployed to any application.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/images/kubernetes-open-graph.png\" alt=\"Configure Liveness, Readiness and Startup Probes — This page shows how to configure liveness, readiness and startup probes for containers.\nFor more information about probes, see Liveness, Readiness and Startup Probes.\nBefore you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eConfigure Liveness, Readiness and Startup Probes\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis page shows how to configure liveness, readiness and startup probes for containers.\nFor more information about probes, see Liveness, Readiness and Startup Probes.\nBefore you begin You need to h...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKubernetes \u0026middot; kubernetes.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWhat is the difference between health, liveness, readiness, and startup?  This article does a great job at a full writeup description of how it works in kubernetes, here is my TLDR.\n\n\n\n* health 200 OK - I'm still responding to requests\n* health ERR - something happened and I cant respond to requests\n\n* liveness 200 OK - I'm ready for more work\n* liveness ERR - I'm still responding to requests, and i'm already working send requests to another pod, or scale up\n\n\n## Z-pages\n\nThese probes are commonly deployed at `/healthz` and `/livez` endpoints.\n\nWhy the z?\n\nz is a convention that comes from google for meta endpoints to reduce conflict with actual endpoints, and can be deployed to any application.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
      "date_published": "2024-03-15T14:38:02Z",
      "date_modified": "2024-03-15T14:38:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "k8s",
        "kubernetes",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-215/",
      "url": "https://go.waylonwalker.com/thought-215/",
      "title": "💭 docker - Where does the convention of using /healthz for appli...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/43380939/where-does-the-convention-of-using-healthz-for-application-health-checks-come-f\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe convention of “z-pages” comes from google and reduces the likelihood of collisions with application endpoints and keep the convention across all applications.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/43380939/where-does-the-convention-of-using-healthz-for-application-health-checks-come-f\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe convention of \"z-pages\" comes from google and reduces the likelihood of collisions with application endpoints and keep the convention across all applications.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/43380939/where-does-the-convention-of-using-healthz-for-application-health-checks-come-f",
      "date_published": "2024-03-15T14:34:23Z",
      "date_modified": "2024-03-15T14:34:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "healthchecks",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/doomlab7-homelab-argocd/",
      "url": "https://go.waylonwalker.com/doomlab7-homelab-argocd/",
      "title": "⭐ Doomlab7 homelab-argocd",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/Doomlab7/homelab-argocd\" 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\"\u003ehomelab-argocd\u003c/a\u003e by \u003ca href=\"https://github.com/Doomlab7\" 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\"\u003eDoomlab7\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eMy ArgoCD app of apps repository\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [homelab-argocd](https://github.com/Doomlab7/homelab-argocd) by [Doomlab7](https://github.com/Doomlab7), and it's truly impressive.\n\nMy ArgoCD app of apps repository\n",
      "summary": "I recently discovered homelab-argocd by Doomlab7, and it's truly impressive.",
      "date_published": "2024-03-15T12:32:42Z",
      "date_modified": "2024-03-15T12:32:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-214/",
      "url": "https://go.waylonwalker.com/thought-214/",
      "title": "💭 Placehold | A simple, fast and free image placeholder service",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://placehold.co/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://placehold.co/600x400/EEE/31343C/png\" alt=\"Placehold — Placehold is a simple, fast and free image placeholder service to generate SVG, PNG, JPEG, GIF, WebP and AVIF placeholder images for your project.\" loading=\"lazy\"/ data-glightbox=\"description: Placehold — Placehold is a simple, fast and free image placeholder service to generate SVG, PNG, JPEG, GIF, WebP and AVIF placeholder images for your project.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePlacehold\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePlacehold is a simple, fast and free image placeholder service to generate SVG, PNG, JPEG, GIF, WebP and AVIF placeholder images for your project.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eplacehold.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a handy placeholder generator for generating placeholder items like images, and videos.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://placehold.co/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://placehold.co/600x400/EEE/31343C/png\" alt=\"Placehold — Placehold is a simple, fast and free image placeholder service to generate SVG, PNG, JPEG, GIF, WebP and AVIF placeholder images for your project.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePlacehold\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePlacehold is a simple, fast and free image placeholder service to generate SVG, PNG, JPEG, GIF, WebP and AVIF placeholder images for your project.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eplacehold.co\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a handy placeholder generator for generating placeholder items like images, and videos.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://placehold.co/",
      "date_published": "2024-03-14T15:46:22Z",
      "date_modified": "2024-03-14T15:46:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-213/",
      "url": "https://go.waylonwalker.com/thought-213/",
      "title": "💭 My New Python Lsp Setup",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eI figured out the killer combination for python lsp servers, ruff and jedi!  ruff does all of the diagnostics and formatting, then jedi handles all the code objects like go to definition and go to reference.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003eservers\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003eruff_lsp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003ejedi_language_server\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nI figured out the killer combination for python lsp servers, ruff and jedi!  ruff does all of the diagnostics and formatting, then jedi handles all the code objects like go to definition and go to reference.\n\n``` lua\n\tlocal servers = {\n\t\truff_lsp = {},\n\t\tjedi_language_server = {},\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2024-03-09T02:58:03Z",
      "date_modified": "2024-03-09T02:58:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-212/",
      "url": "https://go.waylonwalker.com/thought-212/",
      "title": "💭 flake8-to-ruff · PyPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/flake8-to-ruff/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eClient Challenge\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eUnderrated python library to on board ruff, or just use it on a project where its not the norm.  ruff claims that its 99.9% compatible with black and when you read through the known differences they are clearly edge case bugs in black.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSee this page for more about the comparison to black \u003ca href=\"https://docs.astral.sh/ruff/faq/#how-does-ruffs-formatter-compare-to-black\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.astral.sh.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.astral.sh.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://docs.astral.sh/ruff/faq/#how-does-ruffs-formatter-compare-to-black\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eoh and I just noticed that it is maintianed by Charlie, and comes straight out of astral.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/flake8-to-ruff/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eClient Challenge\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nUnderrated python library to on board ruff, or just use it on a project where its not the norm.  ruff claims that its 99.9% compatible with black and when you read through the known differences they are clearly edge case bugs in black.\n\n\u003e See this page for more about the comparison to black https://docs.astral.sh/ruff/faq/#how-does-ruffs-formatter-compare-to-black\n\noh and I just noticed that it is maintianed by Charlie, and comes straight out of astral.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/flake8-to-ruff/",
      "date_published": "2024-03-09T02:29:51Z",
      "date_modified": "2024-03-09T02:29:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linting",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-211/",
      "url": "https://go.waylonwalker.com/thought-211/",
      "title": "💭 searching my thoughts locally",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eFirst I need to fetch my thoughts from the api, and put it in a local sqlite database using \u003ccode\u003esqlite-utils\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efthoughts \u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# fetch thoughts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    curl \u003cspan class=\"s1\"\u003e\u0026#39;https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sqlite-utils insert ~/.config/thoughts/database2.db post --pk\u003cspan class=\"o\"\u003e=\u003c/span\u003eid --alter --ignore -\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow that I have my posts in a local sqlite database I can use \u003ccode\u003esqlite-utils\u003c/code\u003e to enable full text search  and populate the full text search on the post table using the title message and tags columns as search.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esthoughts \u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# search thoughts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# sqlite-utils enable-fts ~/.config/thoughts/database2.db post title message tags\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# sqlite-utils populate-fts ~/.config/thoughts/database2.db post title message tags\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    sqlite-utils search ~/.config/thoughts/database2.db post \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$*\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e ~/git/thoughts/format_thought.py \u003cspan class=\"p\"\u003e|\u003c/span\u003e bat --style\u003cspan class=\"o\"\u003e=\u003c/span\u003eplain --color\u003cspan class=\"o\"\u003e=\u003c/span\u003ealways --language\u003cspan class=\"o\"\u003e=\u003c/span\u003emarkdown\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003est\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esthoughts\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow I am ready to search my thoughts, which is a tiny blog format that I created mostly for  leaving my own personal comment on web pages, so most of them have a link to some other online content, and their title is based on the authors title.\u003c/p\u003e\n\u003ca href=\"https://vhs.charm.sh/vhs-5UMOPkPbr43X3PKi6q1sih.gif\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://vhs.charm.sh/vhs-5UMOPkPbr43X3PKi6q1sih.gif\" alt=\"Made with VHS\"/ data-glightbox=\"description: Made with VHS\"\u003e\u003c/a\u003e\n\u003ca href=\"https://vhs.charm.sh\"\u003e\n  \u003cimg class=\"glightbox\" src=\"https://stuff.charm.sh/vhs/badge.svg\"/ data-glightbox=\"description: \"\u003e\n\u003c/a\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nFirst I need to fetch my thoughts from the api, and put it in a local sqlite database using `sqlite-utils`.\n\n``` bash\nfthoughts () {\n    # fetch thoughts\n    curl 'https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999' | sqlite-utils insert ~/.config/thoughts/database2.db post --pk=id --alter --ignore -\n}\n```\n\nNow that I have my posts in a local sqlite database I can use `sqlite-utils` to enable full text search  and populate the full text search on the post table using the title message and tags columns as search.\n\n``` bash\nsthoughts () {\n    # search thoughts\n    # sqlite-utils enable-fts ~/.config/thoughts/database2.db post title message tags\n    # sqlite-utils populate-fts ~/.config/thoughts/database2.db post title message tags\n    sqlite-utils search ~/.config/thoughts/database2.db post \"$*\" | ~/git/thoughts/format_thought.py | bat --style=plain --color=always --language=markdown\n}\n\nalias st=sthoughts\n```\n\nNow I am ready to search my thoughts, which is a tiny blog format that I created mostly for  leaving my own personal comment on web pages, so most of them have a link to some other online content, and their title is based on the authors title.\n\n\u003cimg src=\"https://vhs.charm.sh/vhs-5UMOPkPbr43X3PKi6q1sih.gif\" alt=\"Made with VHS\"\u003e\n\u003ca href=\"https://vhs.charm.sh\"\u003e\n  \u003cimg src=\"https://stuff.charm.sh/vhs/badge.svg\"\u003e\n\u003c/a\u003e\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2024-03-07T23:42:00Z",
      "date_modified": "2024-03-07T23:42:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "blog",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-210/",
      "url": "https://go.waylonwalker.com/thought-210/",
      "title": "💭 lonecraft",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://screenshots.waylonwalker.com/lonecraft.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://screenshots.waylonwalker.com/lonecraft.png\" alt=\"https://screenshots.waylonwalker.com/lonecraft.png\"/ data-glightbox=\"description: https://screenshots.waylonwalker.com/lonecraft.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis is the best tree I have ever built in minecraft.  It took at least 4 stacks of logs and leaves despite what it looks like.\u003c/p\u003e\n\u003cp\u003eIt is placed where Welscraft’s island in the hermitcraft season 10 seed, but on our own server we call lonecraft.\u003c/p\u003e\n\u003cp\u003eWe started this server a few weeks after hermitcraft season 10 started, and play on it a few times per week.  It has a pretty successful day one iron farm that took us way more than one day to complete, and the farm behind this is our first ever villager driven farm.  Somehow potatoes got cross contaminated and now its pumping out potatoes and some bread, but no carrots or beat roots.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWorld Seed: 5103687417315433447\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://screenshots.waylonwalker.com/lonecraft.png](/static/https://screenshots.waylonwalker.com/lonecraft.png)\n\nThis is the best tree I have ever built in minecraft.  It took at least 4 stacks of logs and leaves despite what it looks like.\n\nIt is placed where Welscraft's island in the hermitcraft season 10 seed, but on our own server we call lonecraft.\n\nWe started this server a few weeks after hermitcraft season 10 started, and play on it a few times per week.  It has a pretty successful day one iron farm that took us way more than one day to complete, and the farm behind this is our first ever villager driven farm.  Somehow potatoes got cross contaminated and now its pumping out potatoes and some bread, but no carrots or beat roots.\n\n\u003e World Seed: 5103687417315433447\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://screenshots.waylonwalker.com/lonecraft.png",
      "date_published": "2024-03-07T14:20:48Z",
      "date_modified": "2024-03-07T14:20:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "minecraft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-209/",
      "url": "https://go.waylonwalker.com/thought-209/",
      "title": "💭 Formatting codes – Minecraft Wiki",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://minecraft.wiki/w/Formatting_codes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://minecraft.wiki/images/Minecraft_Formatting.gif?117f6\" alt=\"Formatting codes – Minecraft Wiki — Formatting codes (also known as color codes) add color and modifications to text in-game.\" loading=\"lazy\"/ data-glightbox=\"description: Formatting codes – Minecraft Wiki — Formatting codes (also known as color codes) add color and modifications to text in-game.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFormatting codes – Minecraft Wiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFormatting codes (also known as color codes) add color and modifications to text in-game.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMinecraft Wiki · minecraft.wiki\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMinecraft MOTD and server names have formatting codes so that you can get colors, bold, underlined, italics, in your message of the day or server name.  See the article for all the cods.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://minecraft.wiki/w/Formatting_codes\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://minecraft.wiki/images/Minecraft_Formatting.gif?117f6\" alt=\"Formatting codes – Minecraft Wiki — Formatting codes (also known as color codes) add color and modifications to text in-game.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFormatting codes – Minecraft Wiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFormatting codes (also known as color codes) add color and modifications to text in-game.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMinecraft Wiki \u0026middot; minecraft.wiki\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMinecraft MOTD and server names have formatting codes so that you can get colors, bold, underlined, italics, in your message of the day or server name.  See the article for all the cods.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://minecraft.wiki/w/Formatting_codes",
      "date_published": "2024-03-07T14:16:23Z",
      "date_modified": "2024-03-07T14:16:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "minecraft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-208/",
      "url": "https://go.waylonwalker.com/thought-208/",
      "title": "💭 jesseduffield/lazydocker: The lazier way to manage everything ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jesseduffield/lazydocker\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/187335810/d5cecc00-9b1c-11e9-8abf-5649b23bce13\" alt=\"GitHub - jesseduffield/lazydocker: The lazier way to manage everything docker — The lazier way to manage everything docker. Contribute to jesseduffield/lazydocker development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - jesseduffield/lazydocker: The lazier way to manage everything docker — The lazier way to manage everything docker. Contribute to jesseduffield/lazydocker development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - jesseduffield/lazydocker: The lazier way to manage everything docker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe lazier way to manage everything docker. Contribute to jesseduffield/lazydocker development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve been using this for a few weeks now and it’s fantastic.  It’s reminds me of lazygit, it gives a nice quick interface into the things I need and it just works.  Yes I can \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e status to see what changed, then diff the files, then commit hunks, but lazygit can do that in just a few keystrokes.  lazydocker does this for docker. It gives me a nice view into whats running, what’s eating up disk space, and the networks I have.  And if I see I have a bunch of exited containers, there is a bulk command righ there to clean them up.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003etldr \u003ccode\u003edocker ps\u003c/code\u003e on steroids\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://github.com/jesseduffield/lazydocker/blob/master/docs/resources/demo3.gif?raw=true\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://github.com/jesseduffield/lazydocker/blob/master/docs/resources/demo3.gif?raw=true\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jesseduffield/lazydocker\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/187335810/d5cecc00-9b1c-11e9-8abf-5649b23bce13\" alt=\"GitHub - jesseduffield/lazydocker: The lazier way to manage everything docker — The lazier way to manage everything docker. Contribute to jesseduffield/lazydocker development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - jesseduffield/lazydocker: The lazier way to manage everything docker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe lazier way to manage everything docker. Contribute to jesseduffield/lazydocker development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've been using this for a few weeks now and it's fantastic.  It's reminds me of lazygit, it gives a nice quick interface into the things I need and it just works.  Yes I can git status to see what changed, then diff the files, then commit hunks, but lazygit can do that in just a few keystrokes.  lazydocker does this for docker. It gives me a nice view into whats running, what's eating up disk space, and the networks I have.  And if I see I have a bunch of exited containers, there is a bulk command righ there to clean them up.\n\n\u003e tldr `docker ps` on steroids\n\n![](https://github.com/jesseduffield/lazydocker/blob/master/docs/resources/demo3.gif?raw=true)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/jesseduffield/lazydocker",
      "date_published": "2024-03-07T14:14:17Z",
      "date_modified": "2024-03-07T14:14:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jesseduffield-lazydocker/",
      "url": "https://go.waylonwalker.com/jesseduffield-lazydocker/",
      "title": "⭐ jesseduffield lazydocker",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/jesseduffield/lazydocker\" 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\"\u003elazydocker\u003c/a\u003e from \u003ca href=\"https://github.com/jesseduffield\" 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\"\u003ejesseduffield\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eThe lazier way to manage everything docker\u003c/p\u003e\n",
      "content_text": "\nI came across [lazydocker](https://github.com/jesseduffield/lazydocker) from [jesseduffield](https://github.com/jesseduffield), and it's packed with great features and ideas.\n\nThe lazier way to manage everything docker\n",
      "summary": "I came across lazydocker from jesseduffield, and it's packed with great features and ideas.",
      "date_published": "2024-03-07T14:10:17Z",
      "date_modified": "2024-03-07T14:10:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-207/",
      "url": "https://go.waylonwalker.com/thought-207/",
      "title": "💭 I'm Coming Around To Go... - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"N8fjU_hlwDI\" title=\"I\u0026#39;m Coming Around To Go...\" playlabel=\"Play: I\u0026#39;m Coming Around To Go...\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGo is feeling more and more like something I could throw in my tool belt as a python dev.  I really like that it’s garbage collected and has great error management.  I am just not sure how to work it in without it being the main thing.  The thing that is so cool is the ability to ship tiny pre-compiled binaries that just work, and the raw speed.  these binaries just get up and working without any warm up.  writing any cli in python I’m going to be using something like typer, and it takes half a second just to warm up, so even hello world cannot be faster than half a second.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"N8fjU_hlwDI\" title=\"I\u0026#39;m Coming Around To Go...\" playlabel=\"Play: I\u0026#39;m Coming Around To Go...\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGo is feeling more and more like something I could throw in my tool belt as a python dev.  I really like that it's garbage collected and has great error management.  I am just not sure how to work it in without it being the main thing.  The thing that is so cool is the ability to ship tiny pre-compiled binaries that just work, and the raw speed.  these binaries just get up and working without any warm up.  writing any cli in python I'm going to be using something like typer, and it takes half a second just to warm up, so even hello world cannot be faster than half a second.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=N8fjU_hlwDI",
      "date_published": "2024-03-06T14:39:31Z",
      "date_modified": "2024-03-06T14:39:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "go",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-206/",
      "url": "https://go.waylonwalker.com/thought-206/",
      "title": "💭 Creating One-To-Many Relationships in Flask-SQLAlchemy - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"VVX7JIWx-ss\" title=\"Creating One-To-Many Relationships in Flask-SQLAlchemy\" playlabel=\"Play: Creating One-To-Many Relationships in Flask-SQLAlchemy\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat example from Anthony showing how easy it is to practice building database orm models and playing with them in a repl.  This is good practice even if you are in  a big code base to be able to test and learn in a simplified code base that does not have a mountain of other code around atuh, permissions, security, and other complex things that come into real production code bases that might make it hard to focus on what you are trying to do.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eAnthony uses backref here, thats legacy, use back_populates on both parent and child.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"VVX7JIWx-ss\" title=\"Creating One-To-Many Relationships in Flask-SQLAlchemy\" playlabel=\"Play: Creating One-To-Many Relationships in Flask-SQLAlchemy\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat example from Anthony showing how easy it is to practice building database orm models and playing with them in a repl.  This is good practice even if you are in  a big code base to be able to test and learn in a simplified code base that does not have a mountain of other code around atuh, permissions, security, and other complex things that come into real production code bases that might make it hard to focus on what you are trying to do.\n\n!!! Note\n   Anthony uses backref here, thats legacy, use back_populates on both parent and child.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=VVX7JIWx-ss",
      "date_published": "2024-03-06T14:35:17Z",
      "date_modified": "2024-03-06T14:35:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlalchemy",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-205/",
      "url": "https://go.waylonwalker.com/thought-205/",
      "title": "💭 python - Concepts of backref and back_populate in SQLalchemy? ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/51335298/concepts-of-backref-and-back-populate-in-sqlalchemy#answer-59920780\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I came across some sqlalchemy models that created some relationships, some used \u003ccode\u003ebackref\u003c/code\u003e\nsome used \u003ccode\u003eback_populates\u003c/code\u003e.   I was stumped why, I had never came accross \u003ccode\u003ebackref\u003c/code\u003e before and I felt skill issues sinking in.\u003c/p\u003e\n\u003ch2 id=\"backref-is-considered-legacy\"\u003ebackref is considered legacy \u003ca href=\"#backref-is-considered-legacy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://docs.sqlalchemy.org/en/14/orm/backref.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.sqlalchemy.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.sqlalchemy.org.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://docs.sqlalchemy.org/en/14/orm/backref.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAs stated in the sqlalchemy docs, backref is a legacy feature.  Its shorthand to creating relationships between parent and child, but only adding it to the parent.  While this is simpler it introduces some invisible magic.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/51335298/concepts-of-backref-and-back-populate-in-sqlalchemy#answer-59920780\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I came across some sqlalchemy models that created some relationships, some used `backref` \n some used `back_populates`.   I was stumped why, I had never came accross `backref` before and I felt skill issues sinking in.\n\n## backref is considered legacy\n\nhttps://docs.sqlalchemy.org/en/14/orm/backref.html\n\nAs stated in the sqlalchemy docs, backref is a legacy feature.  Its shorthand to creating relationships between parent and child, but only adding it to the parent.  While this is simpler it introduces some invisible magic.\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/51335298/concepts-of-backref-and-back-populate-in-sqlalchemy#answer-59920780",
      "date_published": "2024-03-06T01:55:42Z",
      "date_modified": "2024-03-06T01:55:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlalchemy",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/datasette-datasette-litestream/",
      "url": "https://go.waylonwalker.com/datasette-datasette-litestream/",
      "title": "⭐ datasette datasette-litestream",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/datasette/datasette-litestream\" 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\"\u003edatasette-litestream\u003c/a\u003e, created by \u003ca href=\"https://github.com/datasette\" 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\"\u003edatasette\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDatasette plugin for streaming SQLite database backups to S3, using Litestream!\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [datasette-litestream](https://github.com/datasette/datasette-litestream), created by [datasette](https://github.com/datasette).\n\nDatasette plugin for streaming SQLite database backups to S3, using Litestream!\n",
      "summary": "If you're into interesting projects, don't miss out on datasette-litestream, created by datasette.",
      "date_published": "2024-03-04T15:54:20Z",
      "date_modified": "2024-03-04T15:54:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pydantic-fastui/",
      "url": "https://go.waylonwalker.com/pydantic-fastui/",
      "title": "⭐ pydantic FastUI",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pydantic/FastUI\" 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\"\u003eFastUI\u003c/a\u003e by \u003ca href=\"https://github.com/pydantic\" 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\"\u003epydantic\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eBuild better UIs faster.\u003c/p\u003e\n",
      "content_text": "\n[FastUI](https://github.com/pydantic/FastUI) by [pydantic](https://github.com/pydantic) is a game-changer in its space. Excited to see how it evolves.\n\nBuild better UIs faster.\n",
      "summary": "FastUI by pydantic is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2024-03-04T15:54:02Z",
      "date_modified": "2024-03-04T15:54:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/minio-minio/",
      "url": "https://go.waylonwalker.com/minio-minio/",
      "title": "⭐ minio minio",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/minio/minio\" 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\"\u003eminio\u003c/a\u003e from \u003ca href=\"https://github.com/minio\" 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\"\u003eminio\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eMinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.\u003c/p\u003e\n",
      "content_text": "\nI came across [minio](https://github.com/minio/minio) from [minio](https://github.com/minio), and it's packed with great features and ideas.\n\nMinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.\n",
      "summary": "I came across minio from minio, and it's packed with great features and ideas.",
      "date_published": "2024-03-04T15:53:36Z",
      "date_modified": "2024-03-04T15:53:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/amir20-dozzle/",
      "url": "https://go.waylonwalker.com/amir20-dozzle/",
      "title": "⭐ amir20 dozzle",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/amir20/dozzle\" 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\"\u003edozzle\u003c/a\u003e from \u003ca href=\"https://github.com/amir20\" 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\"\u003eamir20\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRealtime log viewer for docker containers.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [dozzle](https://github.com/amir20/dozzle) from [amir20](https://github.com/amir20).\n\nRealtime log viewer for docker containers.\n",
      "summary": "I'm impressed by dozzle from amir20.",
      "date_published": "2024-03-01T23:30:44Z",
      "date_modified": "2024-03-01T23:30:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/astral-sh-uv/",
      "url": "https://go.waylonwalker.com/astral-sh-uv/",
      "title": "⭐ astral-sh uv",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/astral-sh/uv\" 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\"\u003euv\u003c/a\u003e from \u003ca href=\"https://github.com/astral-sh\" 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\"\u003eastral-sh\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eAn extremely fast Python package and project manager, written in Rust.\u003c/p\u003e\n",
      "content_text": "\nI came across [uv](https://github.com/astral-sh/uv) from [astral-sh](https://github.com/astral-sh), and it's packed with great features and ideas.\n\nAn extremely fast Python package and project manager, written in Rust.\n",
      "summary": "I came across uv from astral-sh, and it's packed with great features and ideas.",
      "date_published": "2024-03-01T23:28:37Z",
      "date_modified": "2024-03-01T23:28:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/stability-ai-stablecascade/",
      "url": "https://go.waylonwalker.com/stability-ai-stablecascade/",
      "title": "⭐ Stability-AI StableCascade",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/Stability-AI/StableCascade\" 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\"\u003eStableCascade\u003c/a\u003e from \u003ca href=\"https://github.com/Stability-AI\" 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\"\u003eStability-AI\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eOfficial Code for Stable Cascade\u003c/p\u003e\n",
      "content_text": "\nI came across [StableCascade](https://github.com/Stability-AI/StableCascade) from [Stability-AI](https://github.com/Stability-AI), and it's packed with great features and ideas.\n\nOfficial Code for Stable Cascade\n",
      "summary": "I came across StableCascade from Stability-AI, and it's packed with great features and ideas.",
      "date_published": "2024-03-01T15:58:17Z",
      "date_modified": "2024-03-01T15:58:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/stevearc-aerial-nvim/",
      "url": "https://go.waylonwalker.com/stevearc-aerial-nvim/",
      "title": "⭐ stevearc aerial.nvim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/stevearc/aerial.nvim\" 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\"\u003eaerial.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/stevearc\" 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\"\u003estevearc\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eNeovim plugin for a code outline window\u003c/p\u003e\n",
      "content_text": "\nI came across [aerial.nvim](https://github.com/stevearc/aerial.nvim) from [stevearc](https://github.com/stevearc), and it's packed with great features and ideas.\n\nNeovim plugin for a code outline window\n",
      "summary": "I came across aerial.nvim from stevearc, and it's packed with great features and ideas.",
      "date_published": "2024-02-27T01:17:36Z",
      "date_modified": "2024-02-27T01:17:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zmievsa-cadwyn/",
      "url": "https://go.waylonwalker.com/zmievsa-cadwyn/",
      "title": "⭐ zmievsa cadwyn",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/zmievsa/cadwyn\" 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\"\u003ecadwyn\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/zmievsa\" 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\"\u003ezmievsa\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eProduction-ready community-driven modern Stripe-like API versioning in \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/p\u003e\n",
      "content_text": "\nI'm really excited about [cadwyn](https://github.com/zmievsa/cadwyn), an amazing project by [zmievsa](https://github.com/zmievsa). It's worth exploring!\n\nProduction-ready community-driven modern Stripe-like API versioning in FastAPI\n",
      "summary": "I'm really excited about cadwyn, an amazing project by zmievsa. It's worth exploring!",
      "date_published": "2024-02-27T00:23:36Z",
      "date_modified": "2024-02-27T00:23:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-org-kedro-academy/",
      "url": "https://go.waylonwalker.com/kedro-org-kedro-academy/",
      "title": "⭐ kedro-org kedro-academy",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/kedro-org/kedro-academy\" 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\"\u003ekedro-academy\u003c/a\u003e by \u003ca href=\"https://github.com/kedro-org\" 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\"\u003ekedro-org\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eRepo for Kedro Academy\u003c/p\u003e\n",
      "content_text": "\nJust starred [kedro-academy](https://github.com/kedro-org/kedro-academy) by [kedro-org](https://github.com/kedro-org). It's an exciting project with a lot to offer.\n\nRepo for Kedro Academy\n",
      "summary": "Just starred kedro-academy by kedro-org. It's an exciting project with a lot to offer.",
      "date_published": "2024-02-16T18:04:21Z",
      "date_modified": "2024-02-16T18:04:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-toolong/",
      "url": "https://go.waylonwalker.com/textualize-toolong/",
      "title": "⭐ Textualize toolong",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/Textualize/toolong\" 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\"\u003etoolong\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA terminal application to view, tail, merge, and search log files (plus JSONL).\u003c/p\u003e\n",
      "content_text": "\n[Textualize](https://github.com/Textualize) has done a fantastic job with [toolong](https://github.com/Textualize/toolong). Highly recommend taking a look.\n\nA terminal application to view, tail, merge, and search log files (plus JSONL).\n",
      "summary": "Textualize has done a fantastic job with toolong. Highly recommend taking a look.",
      "date_published": "2024-02-11T15:13:32Z",
      "date_modified": "2024-02-11T15:13:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bufferhead-code-htmx-ai/",
      "url": "https://go.waylonwalker.com/bufferhead-code-htmx-ai/",
      "title": "⭐ bufferhead-code htmx-ai",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/bufferhead-code/htmx-ai\" 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\"\u003ehtmx-ai\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/bufferhead-code\" 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\"\u003ebufferhead-code\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eAdd AI support to \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003eHTMX\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [htmx-ai](https://github.com/bufferhead-code/htmx-ai), an amazing project by [bufferhead-code](https://github.com/bufferhead-code). It's worth exploring!\n\nAdd AI support to HTMX\n",
      "summary": "I'm really excited about htmx-ai, an amazing project by bufferhead-code. It's worth exploring!",
      "date_published": "2024-02-09T01:13:11Z",
      "date_modified": "2024-02-09T01:13:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-204/",
      "url": "https://go.waylonwalker.com/thought-204/",
      "title": "💭 2.5 Admins 180: Email 777 – 2.5 Admins",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://2.5admins.com/2-5-admins-180/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/2.5admins.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/2.5admins.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e2.5 Admins 180: Email 777 – 2.5 Admins\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e2.5admins.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHow do you pronounce URL, is it U.R.L or Earle?  I’m about 50/50, mostly when I am in a hurry I use Earle as it is one syllable and easy to say.  I picked this up from MPJ of fun fun function, who took over Dev Tips.  In this episide Jim uses Earle and they make fun of him.  If it’s good enough for Jim, I am done with my 50/50 and I’m going all in on Earle.\u003c/p\u003e\n\u003cp\u003eEpisode also included a fastinating corrdinated attack that used Ars Technica profile photos communicate directions for the next attack via query parameters in the image url.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://2.5admins.com/2-5-admins-180/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e2.5 Admins 180: Email 777 – 2.5 Admins\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e2.5admins.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHow do you pronounce URL, is it U.R.L or Earle?  I'm about 50/50, mostly when I am in a hurry I use Earle as it is one syllable and easy to say.  I picked this up from MPJ of fun fun function, who took over Dev Tips.  In this episide Jim uses Earle and they make fun of him.  If it's good enough for Jim, I am done with my 50/50 and I'm going all in on Earle.\n\nEpisode also included a fastinating corrdinated attack that used Ars Technica profile photos communicate directions for the next attack via query parameters in the image url.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://2.5admins.com/2-5-admins-180/",
      "date_published": "2024-02-03T20:27:31Z",
      "date_modified": "2024-02-03T20:27:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-203/",
      "url": "https://go.waylonwalker.com/thought-203/",
      "title": "💭 Replace Github Copilot with a Local LLM - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"F1bXfnrzAxM\" title=\"Replace Github Copilot with a Local LLM\" playlabel=\"Play: Replace Github Copilot with a Local LLM\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThis really makes me want to try Dolphin Mixtral with ollama now.  It looks very impressive from this video.  The ability to keep adding features before becoming confused is though with a lot of these llms.\u003c/p\u003e\n\u003cp\u003eBeing chat based, this is not a co pilot replacement.  I was really hoping for an in line co pilot like tool that I can run locally.  I have not used co pilot yet, but I have had great luck with codeium.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"F1bXfnrzAxM\" title=\"Replace Github Copilot with a Local LLM\" playlabel=\"Play: Replace Github Copilot with a Local LLM\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThis really makes me want to try Dolphin Mixtral with ollama now.  It looks very impressive from this video.  The ability to keep adding features before becoming confused is though with a lot of these llms.\n\nBeing chat based, this is not a co pilot replacement.  I was really hoping for an in line co pilot like tool that I can run locally.  I have not used co pilot yet, but I have had great luck with codeium.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=F1bXfnrzAxM",
      "date_published": "2024-01-30T23:14:01Z",
      "date_modified": "2024-01-30T23:14:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-202/",
      "url": "https://go.waylonwalker.com/thought-202/",
      "title": "💭 Dawn Gate - The Game that Solved Toxicity - 2 - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"869rtyUlh1U\" title=\"Dawn Gate - The Game that Solved Toxicity - 2\" playlabel=\"Play: Dawn Gate - The Game that Solved Toxicity - 2\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThor is just straight up a great Human being!  Getting a gaming company to tie power and progression with being nice is an incredible feat.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"869rtyUlh1U\" title=\"Dawn Gate - The Game that Solved Toxicity - 2\" playlabel=\"Play: Dawn Gate - The Game that Solved Toxicity - 2\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nThor is just straight up a great Human being!  Getting a gaming company to tie power and progression with being nice is an incredible feat.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/869rtyUlh1U",
      "date_published": "2024-01-30T23:10:12Z",
      "date_modified": "2024-01-30T23:10:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "gamedev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-201/",
      "url": "https://go.waylonwalker.com/thought-201/",
      "title": "💭 I'm Skeptical Of Low Code - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"4nK03E0jvnI\" title=\"Low Code Scares Me\" playlabel=\"Play: Low Code Scares Me\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat take on low code.  I have definitely felt the pressure of being presented low code options, “look it does almost everything you need, and you can do it without code.”  Granted there are tons of great low code environments that serve their markets well (things like zapier).\u003c/p\u003e\n\u003cp\u003eAs pointed out here when they fall short rather than being hard, it goes to nearly impossible.  As Theo points out here many applications follow an 80/20 rule.  80% of the app is really easy to put together, and takes about 20% of the time, probably less.  What no code does is it takes that 80% that is already easy, makes it even easier ( pitches it as faster whether or not that is true ), and makes the last 20% of the project impossibly hard to create and maintain, so you just should have picked a tool that had the capability of doing the whole thing from the start anyways.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"4nK03E0jvnI\" title=\"Low Code Scares Me\" playlabel=\"Play: Low Code Scares Me\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat take on low code.  I have definitely felt the pressure of being presented low code options, \"look it does almost everything you need, and you can do it without code.\"  Granted there are tons of great low code environments that serve their markets well (things like zapier).\n\nAs pointed out here when they fall short rather than being hard, it goes to nearly impossible.  As Theo points out here many applications follow an 80/20 rule.  80% of the app is really easy to put together, and takes about 20% of the time, probably less.  What no code does is it takes that 80% that is already easy, makes it even easier ( pitches it as faster whether or not that is true ), and makes the last 20% of the project impossibly hard to create and maintain, so you just should have picked a tool that had the capability of doing the whole thing from the start anyways.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=4nK03E0jvnI",
      "date_published": "2024-01-30T23:07:40Z",
      "date_modified": "2024-01-30T23:07:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "low code",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-200/",
      "url": "https://go.waylonwalker.com/thought-200/",
      "title": "💭 The One Eyed Fighting Kirby",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"9_Ekt1PZBzQ\" title=\"Why I Fire Programmers | Prime Reacts\" playlabel=\"Play: Why I Fire Programmers | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve heard prime say just give it the one eyed fighting kirby so many times, and execute it few times, and there is no way to find it online, so this will be the link that I will come to, when I need to remember what @theprimeagen means when he says Give it the one eyed fighting kirby.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/\\(.*\\);/\u003c/span\u003e\u003cspan class=\"nx\"\u003econsole\u003c/span\u003e.\u003cspan class=\"nx\"\u003elog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\\\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"so-what-is-this\"\u003eSo what is this? \u003ca href=\"#so-what-is-this\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is a vim substitute comand to replace text in the buffer.  the one eyed fighting kirby is a regex capture group to capture everything between matches, and assign it a value to place back in after the match.\u003c/p\u003e\n\u003cp\u003esubstitute in a nutshell, \u003ccode\u003e:s/\u0026lt;what you want to replace\u0026gt;/\u0026lt;what you want to replace with\u0026gt;\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"more-examples\"\u003eMore examples \u003ca href=\"#more-examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a contrived example of text.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehere there\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efrom here go there\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehere = some_fuction(there)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow for some reason I want to switch all of the words here and there.  I can do that with three capture groups, \\1 is here, \\2 is everything between, \\3 is there.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e%\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/\\(here\\)\\(.*\\)\\(there\\)/\u003c/span\u003e\\\u003cspan class=\"m\"\u003e3\u003c/span\u003e\\\u003cspan class=\"m\"\u003e2\u003c/span\u003e\\\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eJust give it the one eyed fighting kirby\u003c/p\u003e\n\u003cp\u003e~Prime\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"still-struggling\"\u003estill struggling \u003ca href=\"#still-struggling\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI thought this explaination from phind was good and more verbose than mine.\u003c/p\u003e\n\u003chr/\u003e\n\u003cp\u003edescribe this vim substitute regex\u003c/p\u003e\n\u003cp\u003e:%s/(here)(.\u003cem\u003e)(there)/\\3\\2\\1\nANSWER | PHIND V9 MODEL\nThe given Vim substitute regex :%s/(here)(.\u003c/em\u003e)(there)/\\3\\2\\1 performs the following operation:\u003c/p\u003e\n\u003cp\u003e%s initiates the substitute command. The percent sign % indicates that the operation should be performed across the entire file, not just the current line 2.\n(here) is a capturing group that matches the word “here”. The parentheses ( and ) are used to define a group, and the content inside them is what the group will match 3.\n(.\u003cem\u003e) is another capturing group that matches any sequence of characters. The .\u003c/em\u003e inside the group is a wildcard that matches any character (except a newline), and the * quantifier means “zero or more of the preceding element”. So, this group will match any sequence of characters 2.\n(there) is yet another capturing group that matches the word “there”. This group will match the word “there” that appears after the word “here” and any sequence of characters 3.\n/\\3\\2\\1 is the replacement part of the command. Here, \\3, \\2, and \\1 are backreferences to the matched groups. They correspond to the words “there”, any sequence of characters, and “here”, in that order. So, this command replaces the matched pattern with the word “there”, followed by any sequence of characters, and ending with the word “here” 4.\nSo, in summary, this command searches for the pattern “here”, followed by any sequence of characters, and ending with “there”, and replaces it with the same pattern but reversed (“there”, followed by the original sequence of characters, and ending with “here”).\u003c/p\u003e\n\u003cp\u003eI used this techniq on \u003ca href=\"/refactoring-into-wikilinks/\" class=\"wikilink\" data-title=\"Refactoring one line links into wikilinks\" data-description=\"Previously I had setup a feature of my website to expand one line links into a card. This was not a standard, even to the point that some formatters wrap the...\" data-date=\"2024-05-31\" data-preview=\"Previously I had setup a feature of my website to expand one line links into a card. This was not a standard, even to the point that some formatters wrap the...\"\u003eRefactoring one line links into wikilinks\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"9_Ekt1PZBzQ\" title=\"Why I Fire Programmers | Prime Reacts\" playlabel=\"Play: Why I Fire Programmers | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\n I've heard prime say just give it the one eyed fighting kirby so many times, and execute it few times, and there is no way to find it online, so this will be the link that I will come to, when I need to remember what @theprimeagen means when he says Give it the one eyed fighting kirby.\n\n``` vim\n:s/\\(.*\\);/console.log(\\1)\n```\n\n## So what is this?\n\nThis is a vim substitute comand to replace text in the buffer.  the one eyed fighting kirby is a regex capture group to capture everything between matches, and assign it a value to place back in after the match.\n\nsubstitute in a nutshell, `:s/\u003cwhat you want to replace\u003e/\u003cwhat you want to replace with\u003e`\n\n\n## More examples\n\nHere is a contrived example of text.\n\n``` text\nhere there\nfrom here go there\nhere = some_fuction(there)\n```\n\nNow for some reason I want to switch all of the words here and there.  I can do that with three capture groups, \\1 is here, \\2 is everything between, \\3 is there.\n\n``` vim\n:%s/\\(here\\)\\(.*\\)\\(there\\)/\\3\\2\\1\n```\n\n\u003e Just give it the one eyed fighting kirby\n\u003e \n\u003e ~Prime\n\n## still struggling\n\nI thought this explaination from phind was good and more verbose than mine.\n\n---\n\ndescribe this vim substitute regex\n\n:%s/\\(here\\)\\(.*\\)\\(there\\)/\\3\\2\\1\nANSWER | PHIND V9 MODEL\nThe given Vim substitute regex :%s/\\(here\\)\\(.*\\)\\(there\\)/\\3\\2\\1 performs the following operation:\n\n%s initiates the substitute command. The percent sign % indicates that the operation should be performed across the entire file, not just the current line 2.\n\\(here\\) is a capturing group that matches the word \"here\". The parentheses \\( and \\) are used to define a group, and the content inside them is what the group will match 3.\n\\(.*\\) is another capturing group that matches any sequence of characters. The .* inside the group is a wildcard that matches any character (except a newline), and the * quantifier means \"zero or more of the preceding element\". So, this group will match any sequence of characters 2.\n\\(there\\) is yet another capturing group that matches the word \"there\". This group will match the word \"there\" that appears after the word \"here\" and any sequence of characters 3.\n/\\3\\2\\1 is the replacement part of the command. Here, \\3, \\2, and \\1 are backreferences to the matched groups. They correspond to the words \"there\", any sequence of characters, and \"here\", in that order. So, this command replaces the matched pattern with the word \"there\", followed by any sequence of characters, and ending with the word \"here\" 4.\nSo, in summary, this command searches for the pattern \"here\", followed by any sequence of characters, and ending with \"there\", and replaces it with the same pattern but reversed (\"there\", followed by the original sequence of characters, and ending with \"here\").\n\nI used this techniq on \u003ca href=\"/refactoring-into-wikilinks/\" class=\"wikilink\" data-title=\"Refactoring one line links into wikilinks\" data-description=\"Previously I had setup a feature of my website to expand one line links into a card. This was not a standard, even to the point that some formatters wrap the...\" data-date=\"2024-05-31\"\u003eRefactoring one line links into wikilinks\u003c/a\u003e.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=9_Ekt1PZBzQ\u0026t=351s",
      "date_published": "2024-01-26T17:21:06Z",
      "date_modified": "2024-01-26T17:21:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "regex",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-199/",
      "url": "https://go.waylonwalker.com/thought-199/",
      "title": "💭 Java - ArchWiki",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.archlinux.org/title/java#Switching_between_JVM\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/wiki.archlinux.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/wiki.archlinux.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJava - ArchWiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned that arch has a helper script \u003ccode\u003earchlinux-java\u003c/code\u003e to set the version of java.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earchlinux-java status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earchlinux-java \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u0026lt;JAVA_ENV_NAME\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.archlinux.org/title/java#Switching_between_JVM\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eJava - ArchWiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned that arch has a helper script `archlinux-java` to set the version of java.\n\n\n``` bash\narchlinux-java status\narchlinux-java set \u003cJAVA_ENV_NAME\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://wiki.archlinux.org/title/java#Switching_JVM",
      "date_published": "2024-01-26T13:37:36Z",
      "date_modified": "2024-01-26T13:37:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "java",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-198/",
      "url": "https://go.waylonwalker.com/thought-198/",
      "title": "💭 charmbracelet/mods: AI on the command line",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/charmbracelet/mods\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/620999276/03bcf553-9da5-4e59-94c1-52cf06658f92\" alt=\"GitHub - charmbracelet/mods: AI on the command line — AI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - charmbracelet/mods: AI on the command line — AI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - charmbracelet/mods: AI on the command line\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty sweet interface into llms.  I used it a bit with my son tonight while he was asking me for datapack ideas.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mods -f \u003cspan class=\"s1\"\u003e\u0026#39;I am trying to have fun on my minecraft server and am creating a minecraft datapack send me some load.mcfuncions that will make it fun\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can continue the conversation with a \u003ccode\u003e-C\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mods -C -f \u003cspan class=\"s1\"\u003e\u0026#39;I like where you are going with number 4, can you make it so that it runs when a player opens a door\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can pass it some data\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://waylonwalker.com/thoughts-on-unit-tests/ \u003cspan class=\"p\"\u003e|\u003c/span\u003e mods -f \u003cspan class=\"s1\"\u003e\u0026#39;summarize this post\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/charmbracelet/mods\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/620999276/03bcf553-9da5-4e59-94c1-52cf06658f92\" alt=\"GitHub - charmbracelet/mods: AI on the command line — AI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - charmbracelet/mods: AI on the command line\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a pretty sweet interface into llms.  I used it a bit with my son tonight while he was asking me for datapack ideas.\n\n``` bash\n❯ mods -f 'I am trying to have fun on my minecraft server and am creating a minecraft datapack send me some load.mcfuncions that will make it fun'\n```\n\nYou can continue the conversation with a `-C`\n\n``` bash\n❯ mods -C -f 'I like where you are going with number 4, can you make it so that it runs when a player opens a door'\n```\n\nYou can pass it some data\n\n``` bash\ncurl https://waylonwalker.com/thoughts-on-unit-tests/ | mods -f 'summarize this post'\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/charmbracelet/mods",
      "date_published": "2024-01-26T02:15:42Z",
      "date_modified": "2024-01-26T02:15:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-197/",
      "url": "https://go.waylonwalker.com/thought-197/",
      "title": "💭 charmbracelet/mods: AI on the command line",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/charmbracelet/mods\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/620999276/03bcf553-9da5-4e59-94c1-52cf06658f92\" alt=\"GitHub - charmbracelet/mods: AI on the command line — AI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - charmbracelet/mods: AI on the command line — AI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - charmbracelet/mods: AI on the command line\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a pretty sweet interface into llms.  I used it a bit with my son tonight while he was asking me for datapack ideas.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mods -f \u003cspan class=\"s1\"\u003e\u0026#39;I am trying to have fun on my minecraft server and am creating a minecraft datapack send me some load.mcfuncions that will make it fun\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can continue the conversation with a \u003ccode\u003e-C\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mods -C -f \u003cspan class=\"s1\"\u003e\u0026#39;I like where you are going with number 4, can you make it so that it runs when a player opens a door\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre\u003e\u003ccode\u003e\n!!! note\n\n    This post is a \u0026lt;a href=\u0026#34;/thoughts/\u0026#34; class=\u0026#34;wikilink\u0026#34; data-title=\u0026#34;Thoughts\u0026#34; data-description=\u0026#34;These are generally my thoughts on a web page or some sort of url, except a rare few don\u0026amp;#39;t have a link. These are dual published off of my...\u0026#34; data-date=\u0026#34;2024-04-01\u0026#34;\u0026gt;thought\u0026lt;/a\u0026gt;. It\u0026#39;s a short note that I make\n    about someone else\u0026#39;s content online \u0026lt;a href=\u0026#34;/tags/thoughts/\u0026#34; class=\u0026#34;hashtag-tag\u0026#34; data-tag=\u0026#34;thoughts\u0026#34; data-count=2 data-reading-time=3 data-reading-time-text=\u0026#34;3 minutes\u0026#34;\u0026gt;#thoughts\u0026lt;/a\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/charmbracelet/mods\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/620999276/03bcf553-9da5-4e59-94c1-52cf06658f92\" alt=\"GitHub - charmbracelet/mods: AI on the command line — AI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - charmbracelet/mods: AI on the command line\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAI on the command line. Contribute to charmbracelet/mods development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a pretty sweet interface into llms.  I used it a bit with my son tonight while he was asking me for datapack ideas.\n\n``` bash\n❯ mods -f 'I am trying to have fun on my minecraft server and am creating a minecraft datapack send me some load.mcfuncions that will make it fun'\n```\n\nYou can continue the conversation with a `-C`\n\n``` bash\n❯ mods -C -f 'I like where you are going with number 4, can you make it so that it runs when a player opens a door'\n```\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/charmbracelet/mods",
      "date_published": "2024-01-26T02:15:14Z",
      "date_modified": "2024-01-26T02:15:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-mods/",
      "url": "https://go.waylonwalker.com/charmbracelet-mods/",
      "title": "⭐ charmbracelet mods",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/charmbracelet/mods\" 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\"\u003emods\u003c/a\u003e by \u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAI on the command line\u003c/p\u003e\n",
      "content_text": "\nThe work on [mods](https://github.com/charmbracelet/mods) by [charmbracelet](https://github.com/charmbracelet).\n\nAI on the command line\n",
      "summary": "The work on mods by charmbracelet.",
      "date_published": "2024-01-25T03:25:43Z",
      "date_modified": "2024-01-25T03:25:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-196/",
      "url": "https://go.waylonwalker.com/thought-196/",
      "title": "💭 Gridfinity | The modular, open-source grid storage system for ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gridfinity.xyz/specification/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGridfinity\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe modular, open-source grid storage system.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGridfinity · gridfinity.xyz\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI am starting to build out some custom tool holders for my tool box, and using gridfinity.  This is a super handy reference guide for spec’ing out the bases.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gridfinity.xyz/specification/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGridfinity\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe modular, open-source grid storage system.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGridfinity \u0026middot; gridfinity.xyz\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI am starting to build out some custom tool holders for my tool box, and using gridfinity.  This is a super handy reference guide for spec'ing out the bases.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gridfinity.xyz/specification/",
      "date_published": "2024-01-14T14:52:55Z",
      "date_modified": "2024-01-14T14:52:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-195/",
      "url": "https://go.waylonwalker.com/thought-195/",
      "title": "💭 Read a Range of Data - LIMIT and OFFSET - SQLModel",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/limit-and-offset.png\" alt=\"Read a Range of Data - LIMIT and OFFSET - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"/ data-glightbox=\"description: Read a Range of Data - LIMIT and OFFSET - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRead a Range of Data - LIMIT and OFFSET - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I was running some sqlmodel queries through the sqlalchemy orm.  Admittedly I’ve not done enough orm queries before, and I’ve done quite a bit of raw sql. I was trying to get objects from two separate models that had relationships setup.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eImages\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt is incredibly slow, and gives me the following warning.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSELECT\u003c/span\u003e \u003cspan class=\"n\"\u003estatement\u003c/span\u003e \u003cspan class=\"n\"\u003ehas\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ecartesian\u003c/span\u003e \u003cspan class=\"n\"\u003eproduct\u003c/span\u003e \u003cspan class=\"n\"\u003ebetween\u003c/span\u003e \u003cspan class=\"n\"\u003eFROM\u003c/span\u003e \u003cspan class=\"n\"\u003eelement\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWhat I learned from the SQLModel docs is that you should give it a join to correct this and go much faster.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eImages\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejoin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eImages\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/limit-and-offset.png\" alt=\"Read a Range of Data - LIMIT and OFFSET - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRead a Range of Data - LIMIT and OFFSET - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I was running some sqlmodel queries through the sqlalchemy orm.  Admittedly I've not done enough orm queries before, and I've done quite a bit of raw sql. I was trying to get objects from two separate models that had relationships setup.\n\n``` python\nsession.query(User, Images).where(User.id == 3).all()\n```\n\nIt is incredibly slow, and gives me the following warning.\n\n``` python\nSELECT statement has a cartesian product between FROM element(s)\n```\n\nWhat I learned from the SQLModel docs is that you should give it a join to correct this and go much faster.\n\n``` python\nsession.query(User, Images).join(Images).where(User.id == 3).all()\n```\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/",
      "date_published": "2024-01-12T02:18:35Z",
      "date_modified": "2024-01-12T02:18:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlmodel",
        "sqlalchemy",
        "orm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-stupid-gf-bind/",
      "url": "https://go.waylonwalker.com/nvim-stupid-gf-bind/",
      "title": "nvim stupid gf bind",
      "content_html": "\u003cp\u003eSo after months of fighting with gf not going to template files, I finally\ndecided to put in some effort to make it work.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis was the dumbest keybind in my config, that I copied from someone else\nwithout understanding it.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"what-i-am-trying-to-do\"\u003eWhat I am trying to do \u003ca href=\"#what-i-am-trying-to-do\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have jinja templates in a directory called \u003ccode\u003etemplates\u003c/code\u003e.  I want to bind gf to\nopen a template file, but it is trying to open a new file \u003ccode\u003e./base.html\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% extends \u0026#34;base.html\u0026#34; %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% if request.state.user %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% block title %}Fokais - {{ request.state.user.full_name }} {% endblock %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% else %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% block title %}Fokais {% endblock %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% block content %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% if request.state.user %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eh1\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;inline-block mx-auto text-5xl font-black leading-loose\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e            text-transparent bg-clip-text bg-gradient-to-r from-red-600\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e            via-pink-500 to-yellow-400 ring-red-500 text-shadow-xl\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e            text-shadow-zinc-950 ring-5\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            {{ request.state.user.full_name }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eh1\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% include \u0026#34;me_partial.html\u0026#34; %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% endblock %}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-did-not-work\"\u003eWhat did not work \u003ca href=\"#what-did-not-work\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI tried all sorts of changes to my path, but it still didn’t work.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.api\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003envim_command\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;set path+=templates/**\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-i-found\"\u003eWhat I found \u003ca href=\"#what-i-found\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eafter digging into my keymap I found that I had remaped \u003ccode\u003egf\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e years\nago.  This works great if the file is in your current directory, and if it’s not\nit makes the file.  This bind completely breaks vim’s ability to \u003ccode\u003e:find\u003c/code\u003e files\nand was a terrible keybind that I added probably from someone else years ago\nand have literally never used this feature.  If \u003ccode\u003egf\u003c/code\u003e opens an empty file I\nalways close it and assume that vim failed to \u003ccode\u003e:find\u003c/code\u003e the file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Allow gf to open non-existent files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;:edit \u0026lt;cfile\u0026gt;\u0026lt;CR\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"yes-after-that-fix-i-still-needed-to-adjust-my-path\"\u003eYes, after that fix I still needed to adjust my path \u003ca href=\"#yes-after-that-fix-i-still-needed-to-adjust-my-path\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI ended up with the following in my options.lua.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- look for jinja templates in the templates directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.opt\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates/**\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nSo after months of fighting with gf not going to template files, I finally\ndecided to put in some effort to make it work.\n\n\u003e This was the dumbest keybind in my config, that I copied from someone else\n\u003e without understanding it.\n\n## What I am trying to do\n\nI have jinja templates in a directory called `templates`.  I want to bind gf to\nopen a template file, but it is trying to open a new file `./base.html`\n\n``` html\n{% extends \"base.html\" %}\n{% if request.state.user %}\n    {% block title %}Fokais - {{ request.state.user.full_name }} {% endblock %}\n{% else %}\n    {% block title %}Fokais {% endblock %}\n{% endif %}\n{% block content %}\n    {% if request.state.user %}\n        \u003ch1 id=\"title\"\n            class=\"inline-block mx-auto text-5xl font-black leading-loose\n            text-transparent bg-clip-text bg-gradient-to-r from-red-600\n            via-pink-500 to-yellow-400 ring-red-500 text-shadow-xl\n            text-shadow-zinc-950 ring-5\"\u003e\n            {{ request.state.user.full_name }}\n        \u003c/h1\u003e\n    {% endif %}\n    {% include \"me_partial.html\" %}\n{% endblock %}\n```\n\n## What did not work\n\nI tried all sorts of changes to my path, but it still didn't work.\n\n``` lua\nvim.api.nvim_command(\"set path+=templates/**\")\n\n```\n\n## What I found\n\nafter digging into my keymap I found that I had remaped `gf` to `edit` years\nago.  This works great if the file is in your current directory, and if it's not\nit makes the file.  This bind completely breaks vim's ability to `:find` files\nand was a terrible keybind that I added probably from someone else years ago\nand have literally never used this feature.  If `gf` opens an empty file I\nalways close it and assume that vim failed to `:find` the file.\n\n``` lua\n-- Allow gf to open non-existent files\nset(\"\", \"gf\", \":edit \u003ccfile\u003e\u003cCR\u003e\")\n```\n\n## Yes, after that fix I still needed to adjust my path\n\nI ended up with the following in my options.lua.\n\n``` lua\n-- look for jinja templates in the templates directory\nvim.opt.path:append(\"templates/**\")\n```\n",
      "summary": "So after months of fighting with gf not going to template files, I finally decided to put in some effort to make it work.",
      "date_published": "2023-12-28T10:04:57Z",
      "date_modified": "2023-12-28T10:04:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-194/",
      "url": "https://go.waylonwalker.com/thought-194/",
      "title": "💭 Template Designer Documentation — Jinja Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jinja.palletsprojects.com/en/3.0.x/templates/#whitespace-control\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/jinja.palletsprojects.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/jinja.palletsprojects.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTemplate Designer Documentation — Jinja Documentation (3.1.x)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejinja.palletsprojects.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\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 code generated by my jinja templates generally look half garbage because of indents and whitespace all over the place.  I just learned about these pesky Whitespace Control characters that can get rid of the whitespace added from templating.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYou can also strip whitespace in templates by hand. If you add a minus sign (-) to the start or end of a block (e.g. a For tag), a comment, or a variable expression, the whitespaces before or after that block will be removed:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% for item in seq -%}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ item }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{%- endfor %}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jinja.palletsprojects.com/en/3.0.x/templates/#whitespace-control\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTemplate Designer Documentation — Jinja Documentation (3.1.x)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejinja.palletsprojects.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nhtml code generated by my jinja templates generally look half garbage because of indents and whitespace all over the place.  I just learned about these pesky Whitespace Control characters that can get rid of the whitespace added from templating.\n\n\u003e You can also strip whitespace in templates by hand. If you add a minus sign (-) to the start or end of a block (e.g. a For tag), a comment, or a variable expression, the whitespaces before or after that block will be removed:\n\n``` html\n{% for item in seq -%}\n    {{ item }}\n{%- endfor %}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jinja.palletsprojects.com/en/3.0.x/templates/#whitespace-control",
      "date_published": "2023-12-26T22:00:42Z",
      "date_modified": "2023-12-26T22:00:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "jinja",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-193/",
      "url": "https://go.waylonwalker.com/thought-193/",
      "title": "💭 Minecraft Server on Docker (Java Edition)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docker-minecraft-server.readthedocs.io/en/latest/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docker-minecraft-server.readthedocs.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docker-minecraft-server.readthedocs.io.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIntro - Minecraft Server on Docker (Java Edition)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation for Minecraft Server on Docker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocker-minecraft-server.readthedocs.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI just learned that if you can exec into the container running minecraft with the itzg/minecraft container you can run \u003ccode\u003ercon-cli\u003c/code\u003e to get command access to the server.  You need to set the \u003ccode\u003eRCON_PASSWORD\u003c/code\u003e if you want to access rcon remotely, but if you have not already done this and have access to the server you can just run \u003ccode\u003ercon-cli\u003c/code\u003e when you are in.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docker-minecraft-server.readthedocs.io/en/latest/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIntro - Minecraft Server on Docker (Java Edition)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation for Minecraft Server on Docker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocker-minecraft-server.readthedocs.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI just learned that if you can exec into the container running minecraft with the itzg/minecraft container you can run `rcon-cli` to get command access to the server.  You need to set the `RCON_PASSWORD` if you want to access rcon remotely, but if you have not already done this and have access to the server you can just run `rcon-cli` when you are in.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docker-minecraft-server.readthedocs.io/en/latest/",
      "date_published": "2023-12-25T16:45:59Z",
      "date_modified": "2023-12-25T16:45:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "minecraft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-192/",
      "url": "https://go.waylonwalker.com/thought-192/",
      "title": "💭 We Finally Agree On Unit Tests - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"MbU-PKukdMw\" title=\"We Finally Agree On Unit Tests\" playlabel=\"Play: We Finally Agree On Unit Tests\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTheo’s response puts a lot of my feelings about unit testing into words. It’s crazy how cargo culty it becomes that the echo chamber of twitter can bring in beliefs that we think we believe, but have not experienced enough or put enough thought in to form our own opinion.\u003c/p\u003e\n\u003cp\u003eThis video made me think so much that it turned into it’s own blog post\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://waylonwalker.com/thoughts-on-unit-tests\" 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\"\u003eThoughts on Unit Testing\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"MbU-PKukdMw\" title=\"We Finally Agree On Unit Tests\" playlabel=\"Play: We Finally Agree On Unit Tests\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTheo's response puts a lot of my feelings about unit testing into words. It's crazy how cargo culty it becomes that the echo chamber of twitter can bring in beliefs that we think we believe, but have not experienced enough or put enough thought in to form our own opinion.\n\nThis video made me think so much that it turned into it's own blog post\n\n[Thoughts on Unit Testing](https://waylonwalker.com/thoughts-on-unit-tests)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=MbU-PKukdMw",
      "date_published": "2023-12-22T14:52:25Z",
      "date_modified": "2023-12-22T14:52:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-191/",
      "url": "https://go.waylonwalker.com/thought-191/",
      "title": "💭 Mastodon.py — Mastodon.py 1.8.1 documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://mastodonpy.readthedocs.io/en/stable/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/mastodonpy.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/mastodonpy.readthedocs.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMastodon.py — Mastodon.py 2.2.1 documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emastodonpy.readthedocs.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMastadon.py is a python api client for mastadon that makes it easy to cross post to mastadon.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emastodon\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eMastodon\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eMastodon\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate_app\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s1\"\u003e\u0026#39;pytooterapp\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapi_base_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://mastodon.social\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eto_file\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pytooter_clientcred.secret\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emastodon\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eMastodon\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emastodon\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMastodon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eclient_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pytooter_clientcred.secret\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emastodon\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elog_in\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s1\"\u003e\u0026#39;my_login_email@example.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s1\"\u003e\u0026#39;incrediblygoodpassword\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eto_file\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pytooter_usercred.secret\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emastodon\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etoot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Tooting from Python using #mastodonpy !\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://mastodonpy.readthedocs.io/en/stable/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eMastodon.py — Mastodon.py 2.2.1 documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emastodonpy.readthedocs.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMastadon.py is a python api client for mastadon that makes it easy to cross post to mastadon.\n\n``` python\nfrom mastodon import Mastodon\n\nMastodon.create_app(\n    'pytooterapp',\n    api_base_url = 'https://mastodon.social',\n    to_file = 'pytooter_clientcred.secret'\n)\n\nfrom mastodon import Mastodon\n\nmastodon = Mastodon(client_id = 'pytooter_clientcred.secret',)\nmastodon.log_in(\n    'my_login_email@example.com',\n    'incrediblygoodpassword',\n    to_file = 'pytooter_usercred.secret'\n)\n\nmastodon.toot('Tooting from Python using #mastodonpy !')\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://mastodonpy.readthedocs.io/en/stable/",
      "date_published": "2023-12-21T01:59:43Z",
      "date_modified": "2023-12-21T01:59:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-190/",
      "url": "https://go.waylonwalker.com/thought-190/",
      "title": "💭 bunny.net - The Content Delivery platform that truly Hops!",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bunny.net/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://bunny.net/images24/Making-the-internet-hop-faster.jpg\" alt=\"bunny.net - The Global Edge Platform that truly Hops — Hop on bunny.net and speed up your web presence with the next-generation Content Delivery Service (CDN), Edge Storage, and Optimization Services at any scale.\" loading=\"lazy\"/ data-glightbox=\"description: bunny.net - The Global Edge Platform that truly Hops — Hop on bunny.net and speed up your web presence with the next-generation Content Delivery Service (CDN), Edge Storage, and Optimization Services at any scale.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ebunny.net - The Global Edge Platform that truly Hops\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHop on bunny.net and speed up your web presence with the next-generation Content Delivery Service (CDN), Edge Storage, and Optimization Services at any scale.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebunny.net · bunny.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ebunny.net looks like an interesting cloudflare alternative.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://bunny.net/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://bunny.net/images24/Making-the-internet-hop-faster.jpg\" alt=\"bunny.net - The Global Edge Platform that truly Hops — Hop on bunny.net and speed up your web presence with the next-generation Content Delivery Service (CDN), Edge Storage, and Optimization Services at any scale.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ebunny.net - The Global Edge Platform that truly Hops\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHop on bunny.net and speed up your web presence with the next-generation Content Delivery Service (CDN), Edge Storage, and Optimization Services at any scale.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ebunny.net \u0026middot; bunny.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nbunny.net looks like an interesting cloudflare alternative.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://bunny.net/",
      "date_published": "2023-12-20T16:14:28Z",
      "date_modified": "2023-12-20T16:14:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "hosting",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-189/",
      "url": "https://go.waylonwalker.com/thought-189/",
      "title": "💭 IndieWebify.Me - a guide to getting you on the IndieWeb",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://indiewebify.me/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/indiewebify.me.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/indiewebify.me.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIndieWebify.Me - a guide to getting you on the IndieWeb\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eindiewebify.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a sick guided site to validate indieweb tags on your site.  It makes it much easier than trying to do it yourself.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://indiewebify.me/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIndieWebify.Me - a guide to getting you on the IndieWeb\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eindiewebify.me\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a sick guided site to validate indieweb tags on your site.  It makes it much easier than trying to do it yourself.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://indiewebify.me/",
      "date_published": "2023-12-20T15:04:21Z",
      "date_modified": "2023-12-20T15:04:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "indieweb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jesseleite-nvim-macroni/",
      "url": "https://go.waylonwalker.com/jesseleite-nvim-macroni/",
      "title": "⭐ jesseleite nvim-macroni",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/jesseleite/nvim-macroni\" 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\"\u003envim-macroni\u003c/a\u003e from \u003ca href=\"https://github.com/jesseleite\" 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\"\u003ejesseleite\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003e🤌 Save your macros for future use\u003c/p\u003e\n",
      "content_text": "\nI came across [nvim-macroni](https://github.com/jesseleite/nvim-macroni) from [jesseleite](https://github.com/jesseleite), and it's packed with great features and ideas.\n\n🤌 Save your macros for future use\n",
      "summary": "I came across nvim-macroni from jesseleite, and it's packed with great features and ideas.",
      "date_published": "2023-12-20T13:40:27Z",
      "date_modified": "2023-12-20T13:40:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jesseleite-macroni-nvim/",
      "url": "https://go.waylonwalker.com/jesseleite-macroni-nvim/",
      "title": "⭐ jesseleite macroni.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/jesseleite\" 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\"\u003ejesseleite\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/jesseleite/macroni.nvim\" 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\"\u003emacroni.nvim\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eSave your macros for future use 🤌\u003c/p\u003e\n",
      "content_text": "\n[jesseleite](https://github.com/jesseleite) has done a fantastic job with [macroni.nvim](https://github.com/jesseleite/macroni.nvim). Highly recommend taking a look.\n\nSave your macros for future use 🤌\n",
      "summary": "jesseleite has done a fantastic job with macroni.nvim. Highly recommend taking a look.",
      "date_published": "2023-12-20T13:40:27Z",
      "date_modified": "2023-12-20T13:40:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ikalnytskyi-httpie-auth-store/",
      "url": "https://go.waylonwalker.com/ikalnytskyi-httpie-auth-store/",
      "title": "⭐ ikalnytskyi httpie-auth-store",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ikalnytskyi\" 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\"\u003eikalnytskyi\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/ikalnytskyi/httpie-auth-store\" 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\"\u003ehttpie-auth-store\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eCredential store plugin for HTTPie, attaches auth to ongoing request.\u003c/p\u003e\n",
      "content_text": "\n[ikalnytskyi](https://github.com/ikalnytskyi) has done a fantastic job with [httpie-auth-store](https://github.com/ikalnytskyi/httpie-auth-store). Highly recommend taking a look.\n\nCredential store plugin for HTTPie, attaches auth to ongoing request.\n",
      "summary": "ikalnytskyi has done a fantastic job with httpie-auth-store. Highly recommend taking a look.",
      "date_published": "2023-12-17T20:46:59Z",
      "date_modified": "2023-12-17T20:46:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cli-auth/",
      "url": "https://go.waylonwalker.com/cli-auth/",
      "title": "cli auth",
      "content_html": "\u003cp\u003eAuthentication from cli tools can be a bit of a bear, and I have to look it up\nevery time. This is my reference guide for future me to remember how to easily\ndo it.\u003c/p\u003e\n\u003cp\u003eI set up a \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 server running on port 8000, it uses a basic auth with\n\u003ccode\u003ewaylonwalker\u003c/code\u003e as the username and \u003ccode\u003easdf\u003c/code\u003e as the password. The server follows\nalong with what comes out of the docs. I have it setup to take basic auth,\nform username and password, or a bearer token for authentication.\u003c/p\u003e\n\u003ch2 id=\"curl\"\u003ecurl \u003ca href=\"#curl\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eog\u003c/a\u003e of command line url tools.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -u \u003cspan class=\"s1\"\u003e\u0026#39;waylonwalker:asdf\u0026#39;\u003c/span\u003e -X POST localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth with password prompt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -u \u003cspan class=\"s1\"\u003e\u0026#39;waylonwalker\u0026#39;\u003c/span\u003e -X POST localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# token\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -H \u003cspan class=\"s1\"\u003e\u0026#39;Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\u0026#39;\u003c/span\u003e -X POST localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"wget\"\u003ewget \u003ca href=\"#wget\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMy go to if I want the result to go into a file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget -q -O - --auth-no-challenge --http-user\u003cspan class=\"o\"\u003e=\u003c/span\u003ewaylonwalker --http-password\u003cspan class=\"o\"\u003e=\u003c/span\u003easdf --post-data \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# token\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget -q -O - --header\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\u0026#34;\u003c/span\u003e -O - --post-data \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"httpx\"\u003ehttpx \u003ca href=\"#httpx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAn http client written in python, primarilty used with the python api, but has a nice cli.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m pip install httpx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttpx -m POST --auth waylonwalker asdf http://localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth with password prompt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttpx -m POST --auth waylonwalker - http://localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# token\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttpx -m POST --headers\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Authorization\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\u0026#34;\u003c/span\u003e http://localhost:8000/token\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"httpie\"\u003ehttpie \u003ca href=\"#httpie\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA modern http client written in python.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m pip install httpie\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp POST localhost:8000/token -a waylonwalker:asdf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic auth with password prompt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp POST localhost:8000/token -a waylonwalker\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# token\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp POST localhost:8000/token -A bearer -a eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"httpie-with-plugin\"\u003ehttpie with plugin \u003ca href=\"#httpie-with-plugin\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m pip install httpie-credential-store\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# usage\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp POST localhost:8000/token -A creds\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"httpie-prompt\"\u003ehttpie prompt \u003ca href=\"#httpie-prompt\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp-prompt\u003c/code\u003e comes from the httpie org, and has an interactive cli interface\ninto apis. You can even specify a spec file to autocomplete on api methods.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp-prompt localhost:8000 --auth waylonwalker:asdf --spec openapi.json\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nAuthentication from cli tools can be a bit of a bear, and I have to look it up\nevery time. This is my reference guide for future me to remember how to easily\ndo it.\n\nI set up a fastapi server running on port 8000, it uses a basic auth with\n`waylonwalker` as the username and `asdf` as the password. The server follows\nalong with what comes out of the docs. I have it setup to take basic auth,\nform username and password, or a bearer token for authentication.\n\n## curl\n\nThe og of command line url tools.\n\n```bash\n# basic auth\ncurl -u 'waylonwalker:asdf' -X POST localhost:8000/token\n# basic auth with password prompt\ncurl -u 'waylonwalker' -X POST localhost:8000/token\n# token\ncurl -H 'Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg' -X POST localhost:8000/token\n```\n\n## wget\n\nMy go to if I want the result to go into a file.\n\n```bash\n# basic auth\nwget -q -O - --auth-no-challenge --http-user=waylonwalker --http-password=asdf --post-data '' localhost:8000/token\n\n# token\nwget -q -O - --header=\"Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\" -O - --post-data '' localhost:8000/token\n```\n\n## httpx\n\nAn http client written in python, primarilty used with the python api, but has a nice cli.\n\n```bash\n# install\npython3 -m pip install httpx\n\n# basic auth\nhttpx -m POST --auth waylonwalker asdf http://localhost:8000/token\n\n# basic auth with password prompt\nhttpx -m POST --auth waylonwalker - http://localhost:8000/token\n\n# token\nhttpx -m POST --headers=\"Authorization\" \"bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\" http://localhost:8000/token\n```\n\n## httpie\n\nA modern http client written in python.\n\n```bash\n# install\npython3 -m pip install httpie\n\n# basic auth\nhttp POST localhost:8000/token -a waylonwalker:asdf\n\n# basic auth with password prompt\nhttp POST localhost:8000/token -a waylonwalker\n\n# token\nhttp POST localhost:8000/token -A bearer -a eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg\n```\n\n## httpie with plugin\n\n```bash\n# install\npython3 -m pip install httpie-credential-store\n# usage\nhttp POST localhost:8000/token -A creds\n```\n\n## httpie prompt\n\n`http-prompt` comes from the httpie org, and has an interactive cli interface\ninto apis. You can even specify a spec file to autocomplete on api methods.\n\n```bash\nhttp-prompt localhost:8000 --auth waylonwalker:asdf --spec openapi.json\n```\n",
      "summary": "Authentication from cli tools can be a bit of a bear, and I have to look it up every time. This is my reference guide for future me to remember how to easily...",
      "date_published": "2023-12-17T20:09:03Z",
      "date_modified": "2023-12-17T20:09:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-188/",
      "url": "https://go.waylonwalker.com/thought-188/",
      "title": "💭 FastAPI - dependency inside Middleware? - Stack Overflow",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/72243379/fastapi-dependency-inside-middleware#answer-72480781\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAfter struggling to get dependencies inside of middleware I learned that you can make global dependencies at the app level.  I used this to set the user on every single route of the application without needing Depend on getting the user on each route.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_db_session\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Calling \u0026#39;get_db_session(...)\u0026#39;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Some Value\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_current_user\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_db_session\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Calling \u0026#39;get_current_user(...)\u0026#39;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003esession\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erecalculate_resources\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_user\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;calling \u0026#39;recalculate_resources(...)\u0026#39;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efoo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edependencies\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erecalculate_resources\u003c/span\u003e\u003cspan class=\"p\"\u003e)])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eroot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;foo_from_dependency\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/72243379/fastapi-dependency-inside-middleware#answer-72480781\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAfter struggling to get dependencies inside of middleware I learned that you can make global dependencies at the app level.  I used this to set the user on every single route of the application without needing Depend on getting the user on each route.\n\n\n``` python\nfrom fastapi import Depends, FastAPI, Request\n\n\ndef get_db_session():\n    print(\"Calling 'get_db_session(...)'\")\n    return \"Some Value\"\n\n\ndef get_current_user(session=Depends(get_db_session)):\n    print(\"Calling 'get_current_user(...)'\")\n    return session\n\n\ndef recalculate_resources(request: Request, current_user=Depends(get_current_user)):\n    print(\"calling 'recalculate_resources(...)'\")\n    request.state.foo = current_user\n\n\napp = FastAPI(dependencies=[Depends(recalculate_resources)])\n\n\n@app.get(\"/\")\nasync def root(request: Request):\n    return {\"foo_from_dependency\": request.state.foo}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/72243379/fastapi-dependency-inside-middleware#answer-72480781",
      "date_published": "2023-12-17T17:05:46Z",
      "date_modified": "2023-12-17T17:05:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-187/",
      "url": "https://go.waylonwalker.com/thought-187/",
      "title": "💭 Handling Errors - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/handling-errors/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/handling-errors.png\" alt=\"Handling Errors - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Handling Errors - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHandling Errors - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis page shows how to customize your \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 errors.  I found this very useful to setup common templates so that I can return the same 404’s both programatically and by default, so it all looks the same to the end user.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.responses\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJSONResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"ne\"\u003eException\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.exception_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eunicorn_exception_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eJSONResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e418\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Oops! \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eexc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e did something. There goes a rainbow...\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/unicorns/\u003c/span\u003e\u003cspan class=\"si\"\u003e{name}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eread_unicorn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;yolo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eUnicornException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;unicorn_name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/handling-errors/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/handling-errors.png\" alt=\"Handling Errors - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHandling Errors - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis page shows how to customize your fastapi errors.  I found this very useful to setup common templates so that I can return the same 404's both programatically and by default, so it all looks the same to the end user.\n\n\n``` python\nfrom fastapi import FastAPI, Request\nfrom fastapi.responses import JSONResponse\n\n\nclass UnicornException(Exception):\n    def __init__(self, name: str):\n        self.name = name\n\n\napp = FastAPI()\n\n\n@app.exception_handler(UnicornException)\nasync def unicorn_exception_handler(request: Request, exc: UnicornException):\n    return JSONResponse(\n        status_code=418,\n        content={\"message\": f\"Oops! {exc.name} did something. There goes a rainbow...\"},\n    )\n\n\n@app.get(\"/unicorns/{name}\")\nasync def read_unicorn(name: str):\n    if name == \"yolo\":\n        raise UnicornException(name=name)\n    return {\"unicorn_name\": name}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/handling-errors/",
      "date_published": "2023-12-17T03:47:43Z",
      "date_modified": "2023-12-17T03:47:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-186/",
      "url": "https://go.waylonwalker.com/thought-186/",
      "title": "💭 logs with FastAPI and Uvicorn · Issue #1508 · tiangolo/fastapi",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tiangolo/fastapi/issues/1508\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/3626b55a49f478ae7777a024404b93ac7a2a79e40db37973cf0cee8113e76d2e/fastapi/fastapi/issues/1508\" alt=\"logs with FastAPI and Uvicorn · Issue #1508 · fastapi/fastapi — Hello, Thanks for FastAPI, easy to use in my Python projects ! However, I have an issue with logs. In my Python project, I use : app = FastAPI() uvicorn.run(app, host=\u0026#34;0.0.0.0\u0026#34;, port=8000) And when...\" loading=\"lazy\"/ data-glightbox=\"description: logs with FastAPI and Uvicorn · Issue #1508 · fastapi/fastapi — Hello, Thanks for FastAPI, easy to use in my Python projects ! However, I have an issue with logs. In my Python project, I use : app = FastAPI() uvicorn.run(app, host=\u0026#34;0.0.0.0\u0026#34;, port=8000) And when...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elogs with FastAPI and Uvicorn · Issue #1508 · fastapi/fastapi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHello, Thanks for FastAPI, easy to use in my Python projects ! However, I have an issue with logs. In my Python project, I use : app = FastAPI() uvicorn.run(app, host=\u0026#34;0.0.0.0\u0026#34;, port=8000) And when...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSetting an additional log handler to the uvicorn logger for access logs in \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 was not straightforward, but This post was very helpful.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e@app.on_event(\u0026#34;startup\u0026#34;)\nasync def startup_event():\n    logger = logging.getLogger(\u0026#34;uvicorn.access\u0026#34;)\n    handler = logging.StreamHandler()\n    handler.setFormatter(logging.Formatter(\u0026#34;%(asctime)s - %(levelname)s - %(message)s\u0026#34;))\n    logger.addHandler(handler)\n\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tiangolo/fastapi/issues/1508\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/3626b55a49f478ae7777a024404b93ac7a2a79e40db37973cf0cee8113e76d2e/fastapi/fastapi/issues/1508\" alt=\"logs with FastAPI and Uvicorn · Issue #1508 · fastapi/fastapi — Hello, Thanks for FastAPI, easy to use in my Python projects ! However, I have an issue with logs. In my Python project, I use : app = FastAPI() uvicorn.run(app, host=\u0026#34;0.0.0.0\u0026#34;, port=8000) And when...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elogs with FastAPI and Uvicorn · Issue #1508 · fastapi/fastapi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHello, Thanks for FastAPI, easy to use in my Python projects ! However, I have an issue with logs. In my Python project, I use : app = FastAPI() uvicorn.run(app, host=\u0026#34;0.0.0.0\u0026#34;, port=8000) And when...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSetting an additional log handler to the uvicorn logger for access logs in fastapi was not straightforward, but This post was very helpful.\n\n\n```\n@app.on_event(\"startup\")\nasync def startup_event():\n    logger = logging.getLogger(\"uvicorn.access\")\n    handler = logging.StreamHandler()\n    handler.setFormatter(logging.Formatter(\"%(asctime)s - %(levelname)s - %(message)s\"))\n    logger.addHandler(handler)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/tiangolo/fastapi/issues/1508",
      "date_published": "2023-12-15T22:04:42Z",
      "date_modified": "2023-12-15T22:04:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-185/",
      "url": "https://go.waylonwalker.com/thought-185/",
      "title": "💭 How to group FastAPI endpoints in Swagger UI?",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/63762387/how-to-group-fastapi-endpoints-in-swagger-ui#answer-63762765\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e    Setting tags in your fastapi endpoints will group them in the docs.  You can also set some metadata around the tags to get nice descriptions.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eHere is a full example from the post.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etags_metadata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Get Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;One other way around\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Post Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Keep doing this\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Delete Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;KILL \u0026#39;EM ALL\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Put Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Boring\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eopenapi_tags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003etags_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.delete\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Delete Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.put\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Put Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Post Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Get Methods\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehandle_items\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/63762387/how-to-group-fastapi-endpoints-in-swagger-ui#answer-63762765\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n        Setting tags in your fastapi endpoints will group them in the docs.  You can also set some metadata around the tags to get nice descriptions.\n\nHere is a full example from the post.\n\n``` python\nfrom fastapi import FastAPI\n\ntags_metadata = [\n    {\"name\": \"Get Methods\", \"description\": \"One other way around\"},\n    {\"name\": \"Post Methods\", \"description\": \"Keep doing this\"},\n    {\"name\": \"Delete Methods\", \"description\": \"KILL 'EM ALL\"},\n    {\"name\": \"Put Methods\", \"description\": \"Boring\"},\n]\n\napp = FastAPI(openapi_tags=tags_metadata)\n\n\n@app.delete(\"/items\", tags=[\"Delete Methods\"])\n@app.put(\"/items\", tags=[\"Put Methods\"])\n@app.post(\"/items\", tags=[\"Post Methods\"])\n@app.get(\"/items\", tags=[\"Get Methods\"])\nasync def handle_items():\n    return\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/63762387/how-to-group-fastapi-endpoints-in-swagger-ui#answer-63762765",
      "date_published": "2023-12-15T15:30:37Z",
      "date_modified": "2023-12-15T15:30:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-184/",
      "url": "https://go.waylonwalker.com/thought-184/",
      "title": "💭 Waylon Walker (getting focus'd fokais.com) on X: \"Bloggers whe...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/_WaylonWalker/status/1734387536716308693\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMost bloggers on my twitter blog right into a file that goes on \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e.  I kinda expected to have more database folk.  I have my blog in markdown on git and the editing experience is top notch.  I can just find files edit them in MY EDITOR, push them and I got a post.  I am running thoughts in a sqlite database with a \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 backend, and holy crap the instant nature of posting feels so much better.  Both sides have good points.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/_WaylonWalker/status/1734387536716308693\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMost bloggers on my twitter blog right into a file that goes on git.  I kinda expected to have more database folk.  I have my blog in markdown on git and the editing experience is top notch.  I can just find files edit them in MY EDITOR, push them and I got a post.  I am running thoughts in a sqlite database with a fastapi backend, and holy crap the instant nature of posting feels so much better.  Both sides have good points.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/_WaylonWalker/status/1734387536716308693",
      "date_published": "2023-12-15T14:53:33Z",
      "date_modified": "2023-12-15T14:53:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-183/",
      "url": "https://go.waylonwalker.com/thought-183/",
      "title": "💭 Show some equivalent list comprehensions in filter examples · ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/pallets/jinja/issues/1068\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/651df2213bb57abbd2e889d05bdb5648d3f94d3525be472b34a5254d05d3fe64/pallets/jinja/issues/1068\" alt=\"Show some equivalent list comprehensions in filter examples · Issue #1068 · pallets/jinja — I\u0026#39;m willing to write a pull-request for this, but I just want to see what people think before I write it. So the issue is this. I\u0026#39;m very familiar with python. I\u0026#39;m new to Jinja2. Often I find myself...\" loading=\"lazy\"/ data-glightbox=\"description: Show some equivalent list comprehensions in filter examples · Issue #1068 · pallets/jinja — I\u0026#39;m willing to write a pull-request for this, but I just want to see what people think before I write it. So the issue is this. I\u0026#39;m very familiar with python. I\u0026#39;m new to Jinja2. Often I find myself...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eShow some equivalent list comprehensions in filter examples · Issue #1068 · pallets/jinja\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m willing to write a pull-request for this, but I just want to see what people think before I write it. So the issue is this. I\u0026#39;m very familiar with python. I\u0026#39;m new to Jinja2. Often I find myself...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI often want to reach for non existing list comprehensions in jinja 2, Here are a few nice equivalents.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{{\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eselectattr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;x\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;gt\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e \u003cspan class=\"p\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{{\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eattribute\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;c\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e \u003cspan class=\"p\"\u003e}}\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{{\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eselectattr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;x\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;gt\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eattribute\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;c\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e \u003cspan class=\"p\"\u003e}}\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/pallets/jinja/issues/1068\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/651df2213bb57abbd2e889d05bdb5648d3f94d3525be472b34a5254d05d3fe64/pallets/jinja/issues/1068\" alt=\"Show some equivalent list comprehensions in filter examples · Issue #1068 · pallets/jinja — I\u0026#39;m willing to write a pull-request for this, but I just want to see what people think before I write it. So the issue is this. I\u0026#39;m very familiar with python. I\u0026#39;m new to Jinja2. Often I find myself...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eShow some equivalent list comprehensions in filter examples · Issue #1068 · pallets/jinja\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eI\u0026#39;m willing to write a pull-request for this, but I just want to see what people think before I write it. So the issue is this. I\u0026#39;m very familiar with python. I\u0026#39;m new to Jinja2. Often I find myself...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI often want to reach for non existing list comprehensions in jinja 2, Here are a few nice equivalents.\n\n``` python\na: {{ data | selectattr('x', 'gt', 5) | list }}\nb: {{ data | map(attribute='c') | list }} \nc: {{ data | selectattr('x', 'gt', 5) | map(attribute='c') | list }} \n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/pallets/jinja/issues/1068",
      "date_published": "2023-12-14T20:28:34Z",
      "date_modified": "2023-12-14T20:28:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-182/",
      "url": "https://go.waylonwalker.com/thought-182/",
      "title": "💭 nvim: `vim.o.cmdheight=0`",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://vi.stackexchange.com/questions/39947/nvim-vim-o-cmdheight-0-looses-the-recording-a-macro-messages\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/vi.stackexchange.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/vi.stackexchange.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evi.stackexchange.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI fixed my missing macro recording indicator that I lost and was never quite sure why. (because I forgot that I set cmdheight=0).\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.cmd\u003c/span\u003e \u003cspan class=\"s\"\u003e[[ autocmd RecordingEnter * set cmdheight=1 ]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.cmd\u003c/span\u003e \u003cspan class=\"s\"\u003e[[ autocmd RecordingLeave * set cmdheight=0 ]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://vi.stackexchange.com/questions/39947/nvim-vim-o-cmdheight-0-looses-the-recording-a-macro-messages\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evi.stackexchange.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI fixed my missing macro recording indicator that I lost and was never quite sure why. (because I forgot that I set cmdheight=0).\n\n``` lua\nvim.cmd [[ autocmd RecordingEnter * set cmdheight=1 ]]\nvim.cmd [[ autocmd RecordingLeave * set cmdheight=0 ]]\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://vi.stackexchange.com/questions/39947/nvim-vim-o-cmdheight-0-looses-the-recording-a-macro-messages",
      "date_published": "2023-12-14T14:20:17Z",
      "date_modified": "2023-12-14T14:20:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/htmx-request-hide-input/",
      "url": "https://go.waylonwalker.com/htmx-request-hide-input/",
      "title": "Hiding Form input During htmx Request",
      "content_html": "\u003cp\u003eI am working on fokais.com’s signup page, and I want to hide the form input during\nan \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e request. I was seeing some issues where I was able to prevent spamming\nthe submit button, but was still able to get one extra hit on it.\u003c/p\u003e\n\u003cp\u003eIt also felt like nothing was happening while sending the email to the user for\nverification. Now I get the form to disappear and a spinner to show during the\nrequest.\u003c/p\u003e\n\u003ch2 id=\"\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\"\u003eHTML \u003ca href=\"#html\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLet’s start off with the form. It uses htmx to submit a post request to the\n\u003ccode\u003epost_request\u003c/code\u003e route. Note that there is a spinner in the \u003ccode\u003epost_request\u003c/code\u003e with the\n\u003ccode\u003ehtmx-indicator\u003c/code\u003e class.\u003c/p\u003e\n\u003cp\u003eThe intent is to hide the spinner until the request is running, and hide all of\nthe form input during the request.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eform\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;signup-form\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003ehx-swap-oob\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;outerHTML\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;m-4 mx-auto mb-6 flex w-80 flex-col rounded-lg b p-4 shadow-xlc shadow-cyan-500/10\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003emethod\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;POST\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003eaction\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;post_signup\u0026#39;) }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003ehx-post\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;post_signup\u0026#39;) }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003einput\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mx-8 mt-6 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ full_name }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;full_name\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eplaceholder\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Full Name\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% if full_name_error %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;-mt-6 mb-6 mx-8 text-red-500 p-1 text-center\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ full_name_error }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003einput\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mx-8 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ username }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;username\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eplaceholder\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;username\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% if username_error %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;-mt-6 mb-6 mx-8 text-red-500 p-1 text-center\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ username_error }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003einput\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mx-8 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;email\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;email\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ email }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eplaceholder\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;email\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% if email_error %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;-mt-6 mb-6 mx-8 text-red-500 p-1 text-center\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {{ email_error }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003einput\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mx-auto w-32 mb-4 border border-black bg-purple-900 p-1 text-center focus:bg-zinc-800\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;submit\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;sign up\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003erole\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;status\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mx-auto htmx-indicator\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003esvg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mx-auto animate-spin h-5 w-5 text-white\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"na\"\u003exmlns\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://www.w3.org/2000/svg\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"na\"\u003efill\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;none\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"na\"\u003eviewBox\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;0 0 24 24\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ecircle\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;opacity-25\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003ecx\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;12\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003ecy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;12\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003er\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;10\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003estroke\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;currentColor\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003estroke-width\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;4\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ecircle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003epath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;opacity-75\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003efill\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;currentColor\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003ed\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003esvg\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003eSigning up...\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eform\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYes this is styled using tailwindcss.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://waylonwalker.com/still-loving-tailwind/\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\"\u003ehttps://waylonwalker.com/still-loving-tailwind/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"css\"\u003eCSS \u003ca href=\"#css\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLet’s take a look at how we achieve switching between only spinner an only form\ninputs using css.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-indicator\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003ehidden\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eopacity\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003etransition\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"k\"\u003eopacity\u003c/span\u003e \u003cspan class=\"mi\"\u003e500\u003c/span\u003e\u003cspan class=\"kt\"\u003ems\u003c/span\u003e \u003cspan class=\"kc\"\u003eease-in\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-request\u003c/span\u003e \u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-request\u003c/span\u003e \u003cspan class=\"nt\"\u003einput\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"nt\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;submit\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-request\u003c/span\u003e \u003cspan class=\"nt\"\u003einput\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-request\u003c/span\u003e \u003cspan class=\"nt\"\u003elabel\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003ehidden\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-request\u003c/span\u003e \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-indicator\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eopacity\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003eblock\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-request\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003ehtmx-indicator\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eopacity\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003eblock\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"final-result\"\u003eFinal Result \u003ca href=\"#final-result\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is the final result of me signing up for a new account in fokais.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/fokais-signup.mp4\" class=\"glightbox-link\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"https://images.waylonwalker.com/fokais-signup.mp4\" type=\"video/mp4\"\u003eFinal Result\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI am working on fokais.com's signup page, and I want to hide the form input during\nan htmx request. I was seeing some issues where I was able to prevent spamming\nthe submit button, but was still able to get one extra hit on it.\n\nIt also felt like nothing was happening while sending the email to the user for\nverification. Now I get the form to disappear and a spinner to show during the\nrequest.\n\n## HTML\n\nLet's start off with the form. It uses htmx to submit a post request to the\n`post_request` route. Note that there is a spinner in the `post_request` with the\n`htmx-indicator` class.\n\nThe intent is to hide the spinner until the request is running, and hide all of\nthe form input during the request.\n\n```html\n\u003cform\n  id=\"signup-form\"\n  hx-swap-oob=\"outerHTML\"\n  class=\"m-4 mx-auto mb-6 flex w-80 flex-col rounded-lg b p-4 shadow-xlc shadow-cyan-500/10\"\n  method=\"POST\"\n  action=\"{{ url_for('post_signup') }}\"\n  hx-post=\"{{ url_for('post_signup') }}\"\n\u003e\n  \u003cinput\n    class=\"mx-8 mt-6 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800\"\n    type=\"text\"\n    value=\"{{ full_name }}\"\n    name=\"full_name\"\n    placeholder=\"Full Name\"\n  /\u003e\n  {% if full_name_error %}\n  \u003clabel class=\"-mt-6 mb-6 mx-8 text-red-500 p-1 text-center\"\u003e\n    {{ full_name_error }}\n  \u003c/label\u003e\n  {% endif %}\n  \u003cinput\n    class=\"mx-8 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800\"\n    type=\"text\"\n    value=\"{{ username }}\"\n    name=\"username\"\n    placeholder=\"username\"\n  /\u003e\n  {% if username_error %}\n  \u003clabel class=\"-mt-6 mb-6 mx-8 text-red-500 p-1 text-center\"\u003e\n    {{ username_error }}\n  \u003c/label\u003e\n  {% endif %}\n  \u003cinput\n    class=\"mx-8 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800\"\n    type=\"email\"\n    name=\"email\"\n    value=\"{{ email }}\"\n    placeholder=\"email\"\n  /\u003e\n  {% if email_error %}\n  \u003clabel class=\"-mt-6 mb-6 mx-8 text-red-500 p-1 text-center\"\u003e\n    {{ email_error }}\n  \u003c/label\u003e\n  {% endif %}\n  \u003cinput\n    class=\"mx-auto w-32 mb-4 border border-black bg-purple-900 p-1 text-center focus:bg-zinc-800\"\n    type=\"submit\"\n    value=\"sign up\"\n  /\u003e\n  \u003cdiv role=\"status\" class=\"mx-auto htmx-indicator\"\u003e\n    \u003csvg\n      class=\"mx-auto animate-spin h-5 w-5 text-white\"\n      xmlns=\"https://www.w3.org/2000/svg\"\n      fill=\"none\"\n      viewBox=\"0 0 24 24\"\n    \u003e\n      \u003ccircle\n        class=\"opacity-25\"\n        cx=\"12\"\n        cy=\"12\"\n        r=\"10\"\n        stroke=\"currentColor\"\n        stroke-width=\"4\"\n      \u003e\u003c/circle\u003e\n      \u003cpath\n        class=\"opacity-75\"\n        fill=\"currentColor\"\n        d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n      \u003e\u003c/path\u003e\n    \u003c/svg\u003e\n    \u003cp\u003eSigning up...\u003c/p\u003e\n  \u003c/div\u003e\n\u003c/form\u003e\n```\n\nYes this is styled using tailwindcss.\n\n[https://waylonwalker.com/still-loving-tailwind/](https://waylonwalker.com/still-loving-tailwind/){.hoverlink}\n\n## CSS\n\nLet's take a look at how we achieve switching between only spinner an only form\ninputs using css.\n\n```css\n.htmx-indicator {\n  @apply hidden;\n  opacity: 0;\n  transition: opacity 500ms ease-in;\n}\n.htmx-request button,\n.htmx-request input[type=\"submit\"],\n.htmx-request input,\n.htmx-request label {\n  @apply hidden;\n}\n.htmx-request .htmx-indicator {\n  opacity: 1;\n  @apply block;\n}\n.htmx-request.htmx-indicator {\n  opacity: 1;\n  @apply block;\n}\n```\n\n## Final Result\n\nHere is the final result of me signing up for a new account in fokais.\n\n![Final Result](https://images.waylonwalker.com/fokais-signup.mp4)\n",
      "summary": "I am working on fokais.com's signup page, and I want to hide the form input during an htmx request. I was seeing some issues where I was able to prevent...",
      "date_published": "2023-12-14T07:56:27Z",
      "date_modified": "2023-12-14T07:56:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-181/",
      "url": "https://go.waylonwalker.com/thought-181/",
      "title": "💭 DataDog/ddqa: Datadog's QA manager for releases of GitHub repo...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/DataDog/ddqa\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/000bb13f3e08e7510a1b22f82505dda01d4a32776f4d8d0082c207a8b4196f9b/DataDog/ddqa\" alt=\"GitHub - DataDog/ddqa: Datadog\u0026#39;s QA manager for releases of GitHub repositories — Datadog\u0026#39;s QA manager for releases of GitHub repositories - DataDog/ddqa\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - DataDog/ddqa: Datadog\u0026#39;s QA manager for releases of GitHub repositories — Datadog\u0026#39;s QA manager for releases of GitHub repositories - DataDog/ddqa\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - DataDog/ddqa: Datadog\u0026#39;s QA manager for releases of GitHub repositories\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDatadog\u0026#39;s QA manager for releases of GitHub repositories - DataDog/ddqa\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDataDog ddqa is building out a textual app and deploying it with pyapp.  They have CI setup to fully build and cross compile their textual tui into github releases that you can just download from their releases page.  This is something I am looking at for markata.  This would be pretty sweet to be able to make it just work on places like windows.  It would also be interesting to try to build a full desktop app with pyapp.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/DataDog/ddqa\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/000bb13f3e08e7510a1b22f82505dda01d4a32776f4d8d0082c207a8b4196f9b/DataDog/ddqa\" alt=\"GitHub - DataDog/ddqa: Datadog\u0026#39;s QA manager for releases of GitHub repositories — Datadog\u0026#39;s QA manager for releases of GitHub repositories - DataDog/ddqa\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - DataDog/ddqa: Datadog\u0026#39;s QA manager for releases of GitHub repositories\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDatadog\u0026#39;s QA manager for releases of GitHub repositories - DataDog/ddqa\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDataDog ddqa is building out a textual app and deploying it with pyapp.  They have CI setup to fully build and cross compile their textual tui into github releases that you can just download from their releases page.  This is something I am looking at for markata.  This would be pretty sweet to be able to make it just work on places like windows.  It would also be interesting to try to build a full desktop app with pyapp.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/DataDog/ddqa",
      "date_published": "2023-12-13T22:18:06Z",
      "date_modified": "2023-12-13T22:18:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/datadog-ddqa/",
      "url": "https://go.waylonwalker.com/datadog-ddqa/",
      "title": "⭐ DataDog ddqa",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/DataDog/ddqa\" 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\"\u003eddqa\u003c/a\u003e by \u003ca href=\"https://github.com/DataDog\" 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\"\u003eDataDog\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eDatadog’s QA manager for releases of GitHub repositories\u003c/p\u003e\n",
      "content_text": "\nCheck out [ddqa](https://github.com/DataDog/ddqa) by [DataDog](https://github.com/DataDog). It's a well-crafted project with great potential.\n\nDatadog's QA manager for releases of GitHub repositories\n",
      "summary": "Check out ddqa by DataDog. It's a well-crafted project with great potential.",
      "date_published": "2023-12-13T22:06:26Z",
      "date_modified": "2023-12-13T22:06:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cross-rs-cross/",
      "url": "https://go.waylonwalker.com/cross-rs-cross/",
      "title": "⭐ cross-rs cross",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/cross-rs\" 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\"\u003ecross-rs’s\u003c/a\u003e project \u003ca href=\"https://github.com/cross-rs/cross\" 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\"\u003ecross\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e“Zero setup” cross compilation and “cross testing” of Rust crates\u003c/p\u003e\n",
      "content_text": "\nI like [cross-rs's](https://github.com/cross-rs) project [cross](https://github.com/cross-rs/cross).\n\n“Zero setup” cross compilation and “cross testing” of Rust crates\n",
      "summary": "I like cross-rs's project cross.",
      "date_published": "2023-12-13T21:59:00Z",
      "date_modified": "2023-12-13T21:59:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ofek-pyapp/",
      "url": "https://go.waylonwalker.com/ofek-pyapp/",
      "title": "⭐ ofek pyapp",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/ofek/pyapp\" 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\"\u003epyapp\u003c/a\u003e, created by \u003ca href=\"https://github.com/ofek\" 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\"\u003eofek\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRuntime installer for Python applications\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [pyapp](https://github.com/ofek/pyapp), created by [ofek](https://github.com/ofek).\n\nRuntime installer for Python applications\n",
      "summary": "If you're into interesting projects, don't miss out on pyapp, created by ofek.",
      "date_published": "2023-12-13T18:07:49Z",
      "date_modified": "2023-12-13T18:07:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-180/",
      "url": "https://go.waylonwalker.com/thought-180/",
      "title": "💭 ImageMagick – Color Names",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://imagemagick.org/script/color.php\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://imagemagick.org/script/color.php\" alt=\"https://imagemagick.org/script/color.php\"/ data-glightbox=\"description: https://imagemagick.org/script/color.php\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eFull list of imagemagick color names.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://imagemagick.org/script/color.php](/static/https://imagemagick.org/script/color.php)\n\nFull list of imagemagick color names.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://imagemagick.org/script/color.php",
      "date_published": "2023-12-13T17:23:32Z",
      "date_modified": "2023-12-13T17:23:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-179/",
      "url": "https://go.waylonwalker.com/thought-179/",
      "title": "💭 Adam Wathan on X: \"Hear me out. https://t.co/QHkEI6SJYZ\" / X",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/adamwathan/status/1734696245015494711\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m going to give this trick a shot on my sites, and see how I like it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003emin-width\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eDown in the comments \u003ca href=\"https://twitter.com/adamwathan/\"\u003e@adamwathan\u003c/a\u003e goes on to say.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBasically every layout overflow bug ever boils down to some flex or grid child needing min-width: 0 😄\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eOh and \u003ca href=\"https://twitter.com/ryanflorence\"\u003e@ryanflorence\u003c/a\u003e also says in the comments.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI … do this.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/adamwathan/status/1734696245015494711\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n I'm going to give this trick a shot on my sites, and see how I like it.\n\n``` css\n* {\n  min-width: 0\n}\n```\n\nDown in the comments [@adamwathan](https://twitter.com/adamwathan/) goes on to say.\n\n\n\u003e Basically every layout overflow bug ever boils down to some flex or grid child needing min-width: 0 😄\n\nOh and [@ryanflorence](https://twitter.com/ryanflorence) also says in the comments.\n\n\u003e I ... do this.\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/adamwathan/status/1734696245015494711",
      "date_published": "2023-12-13T01:22:17Z",
      "date_modified": "2023-12-13T01:22:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-178/",
      "url": "https://go.waylonwalker.com/thought-178/",
      "title": "💭 Why YOU should write a blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tushar.lol/post/write-a-blog/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etushar.lol\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNice message by \u003ca href=\"https://twitter.com/sadhlife\"\u003e@tusharsadhwani\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eYou had to dig deeper than face value at something.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eYou had to combine  multiple pages of docs.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSometing was simply not obvious to you at first and it took someone else to give you that ah ha moment.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eYou had a small discovery that had a marginal impact on your day.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eA blog does not have to be a \u003cstrong\u003eBlog\u003c/strong\u003e, it can be small meaningful posts.  There are absolutely no rules.  If you think you are going to end up with too many posts, that is a solvable problem, make a search, curate your favorite posts, make multiple feeds.\u003c/p\u003e\n\u003cp\u003eAt the end of the day.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis post itself is a thought, the smallest component to my blogging strategy.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWrite it down.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tushar.lol/post/write-a-blog/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etushar.lol\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nNice message by [@tusharsadhwani](https://twitter.com/sadhlife).\n\n\u003e Write it down.\n\nYou had to dig deeper than face value at something.\n\n\u003e Write it down.\n\nYou had to combine  multiple pages of docs.\n\n\u003e Write it down.\n\nSometing was simply not obvious to you at first and it took someone else to give you that ah ha moment.\n\n\u003e Write it down.\n\nYou had a small discovery that had a marginal impact on your day.\n\n\u003e Write it down.\n\nA blog does not have to be a **Blog**, it can be small meaningful posts.  There are absolutely no rules.  If you think you are going to end up with too many posts, that is a solvable problem, make a search, curate your favorite posts, make multiple feeds.\n\nAt the end of the day.\n\n\u003e Write it down.\n\nThis post itself is a thought, the smallest component to my blogging strategy.\n\n\u003e Write it down.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tushar.lol/post/write-a-blog/",
      "date_published": "2023-12-13T01:08:51Z",
      "date_modified": "2023-12-13T01:08:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "blogging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-177/",
      "url": "https://go.waylonwalker.com/thought-177/",
      "title": "💭 Path Operation Advanced Configuration - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#exclude-from-openapi\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/advanced/path-operation-advanced-configuration.png\" alt=\"Path Operation Advanced Configuration - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Path Operation Advanced Configuration - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePath Operation Advanced Configuration - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e    Excluding routes from fastapi docs, can be done from the route configuration using `include_in_schema`.  This is handy for routes that are not really api based or duplicates.  \n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"from-the-docs\"\u003eFrom the Docs \u003ca href=\"#from-the-docs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude_in_schema\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eread_items\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;item_id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Foo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"trailing-slash\"\u003etrailing slash \u003ca href=\"#trailing-slash\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve had better luck just routing both naked and trailing slash routes in \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.  I’ve had api’s deployed as a subroute to a site rather than a subdomain, and the automatic redirect betweens them tended to always get messed up.  This is pretty easy fix for the pain is causes just give vim a yyp, and if you don’t want deuplicates in your docs, ignore one.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/items/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude_in_schema\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eread_items\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;item_id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Foo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"faviconico\"\u003efavicon.ico \u003ca href=\"#faviconico\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow you do not need to deploy favicons to your api in any way,  it is nice to have it in your browser tab, but more importantly to me I hate having console errors that are meaningless, this gives the browser something to automatically grab and not log errors.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/favicon.ico\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude_in_schema\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_favicon\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eRedirectResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://fokais.com/favicon.ico\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_302_FOUND\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#exclude-from-openapi\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/advanced/path-operation-advanced-configuration.png\" alt=\"Path Operation Advanced Configuration - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePath Operation Advanced Configuration - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n        Excluding routes from fastapi docs, can be done from the route configuration using `include_in_schema`.  This is handy for routes that are not really api based or duplicates.  \n\n\n## From the Docs\n\n``` python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/items/\", include_in_schema=False)\nasync def read_items():\n    return [{\"item_id\": \"Foo\"}]\n```\n\n## trailing slash\n\nI've had better luck just routing both naked and trailing slash routes in fastapi.  I've had api's deployed as a subroute to a site rather than a subdomain, and the automatic redirect betweens them tended to always get messed up.  This is pretty easy fix for the pain is causes just give vim a yyp, and if you don't want deuplicates in your docs, ignore one.\n\n``` python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get(\"/items\")\n@app.get(\"/items/\", include_in_schema=False)\nasync def read_items():\n    return [{\"item_id\": \"Foo\"}]\n```\n\n## favicon.ico\n\nNow you do not need to deploy favicons to your api in any way,  it is nice to have it in your browser tab, but more importantly to me I hate having console errors that are meaningless, this gives the browser something to automatically grab and not log errors.\n\n``` python\n@app.get(\"/favicon.ico\", include_in_schema=False)\ndef get_favicon():\n    return RedirectResponse(url=\"https://fokais.com/favicon.ico\", status_code=status.HTTP_302_FOUND)\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#exclude-from-openapi",
      "date_published": "2023-12-12T01:37:35Z",
      "date_modified": "2023-12-12T01:37:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-176/",
      "url": "https://go.waylonwalker.com/thought-176/",
      "title": "💭 Protect API docs behind authentication? · Issue #364 · tiangol...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tiangolo/fastapi/issues/364\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/b867fb9776e4a95c5c39ea30ce3a89c2454b35f707b592c2c087eb669b4cb40e/fastapi/fastapi/issues/364\" alt=\"Protect API docs behind authentication? · Issue #364 · fastapi/fastapi — Basic Question Does FastAPI provide a method for implementing authentication middleware or similar on the docs themselves (e.g. to protect access to /docs and /redoc)? Additional context My company...\" loading=\"lazy\"/ data-glightbox=\"description: Protect API docs behind authentication? · Issue #364 · fastapi/fastapi — Basic Question Does FastAPI provide a method for implementing authentication middleware or similar on the docs themselves (e.g. to protect access to /docs and /redoc)? Additional context My company...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProtect API docs behind authentication? · Issue #364 · fastapi/fastapi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBasic Question Does FastAPI provide a method for implementing authentication middleware or similar on the docs themselves (e.g. to protect access to /docs and /redoc)? Additional context My company...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can protect your \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 docs behind auth so that not only can certain roles not run certain routes, but they cannot even see the docs at all.  This way no one that shouldn’t be poking around can even discover routes they shouldn’t be using.\u003c/p\u003e\n\u003cp\u003eHere is the soluteion provided by \u003ca href=\"https://github.com/kennylajara\" 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\"\u003e@kennylajara\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.openapi.docs\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_redoc_html\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eget_swagger_ui_html\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.openapi.utils\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_openapi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esecrets\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.security\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasic\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasicCredentials\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;FastAPI\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;0.1.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edocs_url\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eredoc_url\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eopenapi_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esecurity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasic\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_current_username\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasicCredentials\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esecurity\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecorrect_username\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esecrets\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecompare_digest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecorrect_password\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esecrets\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecompare_digest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecorrect_username\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003ecorrect_password\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_401_UNAUTHORIZED\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Incorrect email or password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;WWW-Authenticate\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Basic\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/docs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude_in_schema\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_swagger_documentation\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_username\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eget_swagger_ui_html\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eopenapi_url\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/openapi.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;docs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/redoc\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude_in_schema\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_redoc_documentation\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_username\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eget_redoc_html\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eopenapi_url\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/openapi.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;docs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/openapi.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude_in_schema\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eopenapi\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_username\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eget_openapi\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eroutes\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eroutes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tiangolo/fastapi/issues/364\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/b867fb9776e4a95c5c39ea30ce3a89c2454b35f707b592c2c087eb669b4cb40e/fastapi/fastapi/issues/364\" alt=\"Protect API docs behind authentication? · Issue #364 · fastapi/fastapi — Basic Question Does FastAPI provide a method for implementing authentication middleware or similar on the docs themselves (e.g. to protect access to /docs and /redoc)? Additional context My company...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eProtect API docs behind authentication? · Issue #364 · fastapi/fastapi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBasic Question Does FastAPI provide a method for implementing authentication middleware or similar on the docs themselves (e.g. to protect access to /docs and /redoc)? Additional context My company...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nYou can protect your fastapi docs behind auth so that not only can certain roles not run certain routes, but they cannot even see the docs at all.  This way no one that shouldn't be poking around can even discover routes they shouldn't be using.\n\n\nHere is the soluteion provided by [@kennylajara](https://github.com/kennylajara)\n\n``` python\nfrom fastapi import FastAPI\n\nfrom fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html\nfrom fastapi.openapi.utils import get_openapi\n\nimport secrets\n\nfrom fastapi import Depends, FastAPI, HTTPException, status\nfrom fastapi.security import HTTPBasic, HTTPBasicCredentials\n\napp = FastAPI(\n    title=\"FastAPI\",\n    version=\"0.1.0\",\n    docs_url=None,\n    redoc_url=None,\n    openapi_url = None,\n)\n\nsecurity = HTTPBasic()\n\n\ndef get_current_username(credentials: HTTPBasicCredentials = Depends(security)):\n    correct_username = secrets.compare_digest(credentials.username, \"user\")\n    correct_password = secrets.compare_digest(credentials.password, \"password\")\n    if not (correct_username and correct_password):\n        raise HTTPException(\n            status_code=status.HTTP_401_UNAUTHORIZED,\n            detail=\"Incorrect email or password\",\n            headers={\"WWW-Authenticate\": \"Basic\"},\n        )\n    return credentials.username\n\n\n@app.get(\"/docs\", include_in_schema=False)\nasync def get_swagger_documentation(username: str = Depends(get_current_username)):\n    return get_swagger_ui_html(openapi_url=\"/openapi.json\", title=\"docs\")\n\n\n@app.get(\"/redoc\", include_in_schema=False)\nasync def get_redoc_documentation(username: str = Depends(get_current_username)):\n    return get_redoc_html(openapi_url=\"/openapi.json\", title=\"docs\")\n\n\n@app.get(\"/openapi.json\", include_in_schema=False)\nasync def openapi(username: str = Depends(get_current_username)):\n    return get_openapi(title=app.title, version=app.version, routes=app.routes\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/tiangolo/fastapi/issues/364",
      "date_published": "2023-12-12T01:27:04Z",
      "date_modified": "2023-12-12T01:27:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/llmware-ai-llmware/",
      "url": "https://go.waylonwalker.com/llmware-ai-llmware/",
      "title": "⭐ llmware-ai llmware",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/llmware-ai/llmware\" 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\"\u003ellmware\u003c/a\u003e by \u003ca href=\"https://github.com/llmware-ai\" 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\"\u003ellmware-ai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eUnified framework for building enterprise RAG pipelines with small, specialized models\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [llmware](https://github.com/llmware-ai/llmware) by [llmware-ai](https://github.com/llmware-ai).\n\nUnified framework for building enterprise RAG pipelines with small, specialized models\n",
      "summary": "Looking for inspiration? llmware by llmware-ai.",
      "date_published": "2023-12-11T15:51:29Z",
      "date_modified": "2023-12-11T15:51:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-175/",
      "url": "https://go.waylonwalker.com/thought-175/",
      "title": "💭 Cancel subscriptions | Stripe Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stripe.com/docs/billing/subscriptions/cancel#canceling\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://d37ugbyn3rpeym.cloudfront.net/docs/og-image/billing.subscriptions.cancel.ogimage.png\" alt=\"Cancel subscriptions — Cancel subscriptions immediately or at the end of the subscription period with proration options, invoice handling, and automatic cancellation after failed payment attempts.\" loading=\"lazy\"/ data-glightbox=\"description: Cancel subscriptions — Cancel subscriptions immediately or at the end of the subscription period with proration options, invoice handling, and automatic cancellation after failed payment attempts.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCancel subscriptions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCancel subscriptions immediately or at the end of the subscription period with proration options, invoice handling, and automatic cancellation after failed payment attempts.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estripe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a handy guide to cancelling stripe subscriptions.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set your secret key. Remember to switch to your live secret key in production.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# See your keys here: https://dashboard.stripe.com/apikeys\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003estripe\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eapi_key\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sk_test_51ODvHtB26msLKqCAPBAo1qkBBuIfT5tQBX6YFWCLMsPixIExxITCRVa9tNCIqkdQS8olhR79NYXsFWBPKsM3LbGO00zEcNQfNI\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emodify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;sub_49ty4767H20z6a\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecancel_at_period_end\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can even inverse it by flipping \u003ccode\u003eTrue\u003c/code\u003e to \u003ccode\u003eFalse\u003c/code\u003e and re activate the subscription.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stripe.com/docs/billing/subscriptions/cancel#canceling\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://d37ugbyn3rpeym.cloudfront.net/docs/og-image/billing.subscriptions.cancel.ogimage.png\" alt=\"Cancel subscriptions — Cancel subscriptions immediately or at the end of the subscription period with proration options, invoice handling, and automatic cancellation after failed payment attempts.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCancel subscriptions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCancel subscriptions immediately or at the end of the subscription period with proration options, invoice handling, and automatic cancellation after failed payment attempts.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estripe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a handy guide to cancelling stripe subscriptions.\n\n``` python\n# Set your secret key. Remember to switch to your live secret key in production.\n# See your keys here: https://dashboard.stripe.com/apikeys\nimport stripe\nstripe.api_key = \"sk_test_51ODvHtB26msLKqCAPBAo1qkBBuIfT5tQBX6YFWCLMsPixIExxITCRVa9tNCIqkdQS8olhR79NYXsFWBPKsM3LbGO00zEcNQfNI\"\n\nstripe.Subscription.modify(\n  \"sub_49ty4767H20z6a\",\n  cancel_at_period_end=True,\n)\n```\n\nYou can even inverse it by flipping `True` to `False` and re activate the subscription.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stripe.com/docs/billing/subscriptions/cancel#canceling",
      "date_published": "2023-12-10T04:28:33Z",
      "date_modified": "2023-12-10T04:28:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "stripe",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/stripe-cancellations/",
      "url": "https://go.waylonwalker.com/stripe-cancellations/",
      "title": "Stripe Cancellations in FastAPI and SQLModel",
      "content_html": "\u003cp\u003eToday I am working on fokais.com, trying to get to a point where I can launch\nby workig through stripe integrations. This is my first time using stripe, so\nthere has been quite a bit to learn, and I am probably building in more than I\nneed to before launching, but I am learning, and not in a rush to launch.\u003c/p\u003e\n\u003cp\u003eI am building the fokais backent in python primarilyt with \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 and sqlmodel\non sqlite. My billing integration is going to be all Stripe.\u003c/p\u003e\n\u003ch2 id=\"stripe-subscription-cancellations-docs\"\u003eStripe Subscription Cancellations Docs \u003ca href=\"#stripe-subscription-cancellations-docs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a link to the stripe docs for your refrence, especially if you want to\nsee how to cancel subscriptions in other languages. They include code samples\nfor many popular languages.\u003c/p\u003e\n\u003ca href=\"https://stripe.com/docs/billing/subscriptions/cancel#canceling\" title=\"Cancel subscriptions | Stripe Documentation\"\u003e\n    \u003cimg class=\"object-fit aspect-[800/450] w-full rounded-lg border border-black bg-neutral-900 shadow-lg shadow-neutral-900 glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https%3A%2F%2Fstripe.com%2Fdocs%2Fbilling%2Fsubscriptions%2Fcancel%23canceling\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"Cancel subscriptions | Stripe Documentation\" title=\"Cancel subscriptions | Stripe Documentation\"/ data-glightbox=\"description: Cancel subscriptions | Stripe Documentation\"\u003e\n\u003c/a\u003e\n\u003ch2 id=\"user-model\"\u003eUser Model \u003ca href=\"#user-model\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is the part of the user model that includes the cancel and reactivate\nmethods. It pretty much follows the stripe guide.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUserBase\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e  \u003cspan class=\"c1\"\u003e# type: ignore[call-arg]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eunique\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efull_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eemail_verified\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ebool\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edisabled\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ebool\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esignup_date\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_factory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eutcnow\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estripe_customer_id\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ecancel_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emodify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ecancel_at_period_end\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erefresh\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ereactivate_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emodify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ecancel_at_period_end\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erefresh\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"cancellations-api\"\u003eCancellations api \u003ca href=\"#cancellations-api\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is the cancellations api. I created an are you sure form that I can link\nto from the accounts page with a normal anchor tag. Note that I am doing a\n\u003ccode\u003ePOST\u003c/code\u003e request to do the cancellation from a form. I want this to work for any\nuser whether there is js or not. This is an operation that will change the\nusers data, and I want to make sure that it avoids all browser and cdn caching.\nAs a scrappy startup we are running light on infrastructure and are caching\nhard at the CDN to avoid excessive server hits.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e I am doing a `POST` request to do the cancellation from a form.\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/cancel\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/cancel/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_cancel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_user_if_logged_in\u003c/span\u003e\u003cspan class=\"p\"\u003e)],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;cancel.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;prices\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprices\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;products\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;current_user\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/cancel\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/cancel/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003epost_cancel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_user_if_logged_in\u003c/span\u003e\u003cspan class=\"p\"\u003e)],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecancel_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eHTMLResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;p id=\u0026#34;cancel\u0026#34; hx-swap-oob=\u0026#34;outerHTML\u0026#34;\u0026gt;Your Subscription has been Cancelled\u0026lt;/p\u0026gt;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"reactivations\"\u003eReactivations \u003ca href=\"#reactivations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eReactivating accounts looks just about the same as cancelling, only flippng \u003ccode\u003eTrue\u003c/code\u003e to \u003ccode\u003eFalse\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/reactivate\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/reactivate/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_reactivate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_user_if_logged_in\u003c/span\u003e\u003cspan class=\"p\"\u003e)],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;reactivate.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;prices\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprices\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;products\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;current_user\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/reactivate\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@pricing_router.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/reactivate/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003epost_reactivate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_user_if_logged_in\u003c/span\u003e\u003cspan class=\"p\"\u003e)],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereactivate_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eHTMLResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;p id=\u0026#34;reactivate\u0026#34; hx-swap-oob=\u0026#34;outerHTML\u0026#34;\u0026gt;Your Subscription has been reactivated\u0026lt;/p\u0026gt;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"full-user-model\"\u003eFull User Model \u003ca href=\"#full-user-model\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is the full user model, completely subject to change in the future, but it\nincludes the cancel and reactivate methods.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUserBase\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e  \u003cspan class=\"c1\"\u003e# type: ignore[call-arg]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eunique\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efull_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eemail_verified\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ebool\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edisabled\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ebool\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esignup_date\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_factory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eutcnow\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estripe_customer_id\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nb\"\u003enext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_session\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@classmethod\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_by_id\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nb\"\u003enext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_session\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erefresh\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active_subscriptions_\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3600\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active_products_\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3600\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_checkout_sessions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003echeckout\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estripe_checkout_session_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eCheckoutSession\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eCheckoutSession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser_id\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estripe_checkout_session_id\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_active_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003echeckout\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estripe_checkout_session_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eCheckoutSession\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eCheckoutSession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euser_id\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estripe_checkout_session_id\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;complete\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ehas_active_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active_subscriptions_\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_active_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active_subscriptions_\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3600\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eactive_plans\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eplans\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eplan\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eplans\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esubscription_to_plan\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eplans\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eplan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eplans\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eplan_to_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eplans\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ek\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ek\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ev\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription_to_plan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\u003cspan class=\"p\"\u003e()}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eplans\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_active_products\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eplans\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_plans\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eProduct\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eplan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproduct\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eplan\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eplans\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eplan_to_product\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eplans\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_plans\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eplan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eProduct\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eplan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproduct\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eplan\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eplans\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eprodct_to_plan\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eplans\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_plans\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eProduct\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eplan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproduct\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eplan\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eplan\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eplans\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eactive_products\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active_products_\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_active_products\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active_products_\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3600\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ebest_active_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ebest_active_product\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_products\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esort\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ekey\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003elambda\u003c/span\u003e \u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;level\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproducts\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ebest_active_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esubscription_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eplan_to_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprodct_to_plan\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebest_active_product\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eretrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@property\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eproduct\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebest_active_product\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eproduct\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esubscription_status\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esubscriptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ecancel_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emodify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ecancel_at_period_end\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erefresh\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ereactivate_subscription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eactive_subscriptions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emodify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ecancel_at_period_end\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erefresh\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I am working on fokais.com, trying to get to a point where I can launch\nby workig through stripe integrations. This is my first time using stripe, so\nthere has been quite a bit to learn, and I am probably building in more than I\nneed to before launching, but I am learning, and not in a rush to launch.\n\nI am building the fokais backent in python primarilyt with fastapi and sqlmodel\non sqlite. My billing integration is going to be all Stripe.\n\n## Stripe Subscription Cancellations Docs\n\nHere is a link to the stripe docs for your refrence, especially if you want to\nsee how to cancel subscriptions in other languages. They include code samples\nfor many popular languages.\n\n\u003ca href=\"https://stripe.com/docs/billing/subscriptions/cancel#canceling\" title=\"Cancel subscriptions | Stripe Documentation\"\u003e\n    \u003cimg class=\"object-fit aspect-[800/450] w-full rounded-lg border border-black bg-neutral-900 shadow-lg shadow-neutral-900\" src=\"https://shots.waylonwalker.com/shot/?url=https%3A%2F%2Fstripe.com%2Fdocs%2Fbilling%2Fsubscriptions%2Fcancel%23canceling\u0026amp;height=450\u0026amp;width=800\u0026amp;scaled_width=800\u0026amp;scaled_height=450\u0026amp;selectors=\" alt=\"Cancel subscriptions | Stripe Documentation\" title=\"Cancel subscriptions | Stripe Documentation\"\u003e\n\u003c/a\u003e\n\n## User Model\n\nThis is the part of the user model that includes the cancel and reactivate\nmethods. It pretty much follows the stripe guide.\n\n```python\nclass UserBase(SQLModel, table=False):  # type: ignore[call-arg]\n    username: str = Field(unique=True)\n    full_name: str\n    email: str\n    email_verified: bool = False\n    disabled: bool = False\n    signup_date: Optional[datetime] = Field(default_factory=datetime.utcnow)\n    stripe_customer_id: Optional[str]\n\n    def cancel_subscription(self):\n        for subscription in self.active_subscriptions:\n            stripe.Subscription.modify(\n                subscription.id,\n                cancel_at_period_end=True,\n            )\n        self.refresh()\n\n    def reactivate_subscription(self):\n        for subscription in self.active_subscriptions:\n            stripe.Subscription.modify(\n                subscription.id,\n                cancel_at_period_end=False,\n            )\n        self.refresh()\n```\n\n## Cancellations api\n\nHere is the cancellations api. I created an are you sure form that I can link\nto from the accounts page with a normal anchor tag. Note that I am doing a\n`POST` request to do the cancellation from a form. I want this to work for any\nuser whether there is js or not. This is an operation that will change the\nusers data, and I want to make sure that it avoids all browser and cdn caching.\nAs a scrappy startup we are running light on infrastructure and are caching\nhard at the CDN to avoid excessive server hits.\n\n!!! Note\n     I am doing a `POST` request to do the cancellation from a form.\n\n```python\n@pricing_router.get(\"/cancel\")\n@pricing_router.get(\"/cancel/\")\ndef get_cancel(\n    request: Request,\n    current_user: Annotated[User, Depends(get_current_user_if_logged_in)],\n):\n    return config.templates.TemplateResponse(\n        \"cancel.html\",\n        {\n            \"request\": request,\n            \"prices\": products.prices,\n            \"products\": products.products,\n            \"current_user\": current_user,\n        },\n    )\n\n\n@pricing_router.post(\"/cancel\")\n@pricing_router.post(\"/cancel/\")\ndef post_cancel(\n    request: Request,\n    current_user: Annotated[User, Depends(get_current_user_if_logged_in)],\n):\n    current_user.cancel_subscription()\n    return HTMLResponse('\u003cp id=\"cancel\" hx-swap-oob=\"outerHTML\"\u003eYour Subscription has been Cancelled\u003c/p\u003e')\n\n```\n\n## Reactivations\n\nReactivating accounts looks just about the same as cancelling, only flippng `True` to `False`.\n\n```python\n\n@pricing_router.get(\"/reactivate\")\n@pricing_router.get(\"/reactivate/\")\ndef get_reactivate(\n    request: Request,\n    current_user: Annotated[User, Depends(get_current_user_if_logged_in)],\n):\n    return config.templates.TemplateResponse(\n        \"reactivate.html\",\n        {\n            \"request\": request,\n            \"prices\": products.prices,\n            \"products\": products.products,\n            \"current_user\": current_user,\n        },\n    )\n\n\n@pricing_router.post(\"/reactivate\")\n@pricing_router.post(\"/reactivate/\")\ndef post_reactivate(\n    request: Request,\n    current_user: Annotated[User, Depends(get_current_user_if_logged_in)],\n):\n    current_user.reactivate_subscription()\n    return HTMLResponse('\u003cp id=\"reactivate\" hx-swap-oob=\"outerHTML\"\u003eYour Subscription has been reactivated\u003c/p\u003e')\n\n```\n\n## Full User Model\n\nThis is the full user model, completely subject to change in the future, but it\nincludes the cancel and reactivate methods.\n\n```python\nclass UserBase(SQLModel, table=False):  # type: ignore[call-arg]\n    username: str = Field(unique=True)\n    full_name: str\n    email: str\n    email_verified: bool = False\n    disabled: bool = False\n    signup_date: Optional[datetime] = Field(default_factory=datetime.utcnow)\n    stripe_customer_id: Optional[str]\n\n    @property\n    def session(self):\n        return next(get_session())\n\n    @classmethod\n    def get_by_id(cls, id):\n        return next(get_session()).get(cls, id)\n\n    def refresh(self):\n        cache.set(f\"active_subscriptions_{self.id}\", None, 3600)\n        cache.set(f\"active_products_{self.id}\", None, 3600)\n\n    def get_checkout_sessions(self):\n        return [\n            stripe.checkout.Session.retrieve(s.stripe_checkout_session_id)\n            for s in self.session.exec(select(CheckoutSession).where(CheckoutSession.user_id == self.id)).all()\n            if s.stripe_checkout_session_id is not None\n        ]\n\n    def get_active_subscriptions(self):\n        subscriptions = [\n            s.subscription\n            for s in [\n                stripe.checkout.Session.retrieve(s.stripe_checkout_session_id)\n                for s in self.session.exec(select(CheckoutSession).where(CheckoutSession.user_id == self.id)).all()\n                if s.stripe_checkout_session_id is not None\n            ]\n            if s.status == \"complete\"\n        ]\n        active_subscriptions = [stripe.Subscription.retrieve(subscription) for subscription in subscriptions]\n        return active_subscriptions\n\n    def has_active_subscription(self):\n        return len(self.active_subscriptions) \u003e 0\n\n    @property\n    def active_subscriptions(self):\n        active_subscriptions = cache.get(f\"active_subscriptions_{self.id}\")\n        if active_subscriptions is not None:\n            return active_subscriptions\n        active_subscriptions = self.get_active_subscriptions()\n        cache.set(f\"active_subscriptions_{self.id}\", active_subscriptions, 3600)\n\n        return active_subscriptions\n\n    @property\n    def active_plans(self):\n        subscriptions = self.active_subscriptions\n        plans = [subscription.plan for subscription in subscriptions]\n        return plans\n\n    @property\n    def subscription_to_plan(self):\n        subscriptions = self.active_subscriptions\n        plans = {subscription.id: subscription.plan.id for subscription in subscriptions}\n        return plans\n\n    @property\n    def plan_to_subscription(self):\n        plans = {v: k for k, v in self.subscription_to_plan.items()}\n\n        return plans\n\n    def get_active_products(self):\n        plans = self.active_plans\n        products = [stripe.Product.retrieve(plan.product) for plan in plans]\n        return products\n\n    @property\n    def plan_to_product(self):\n        plans = self.active_plans\n        products = {plan.id: stripe.Product.retrieve(plan.product).id for plan in plans}\n        return products\n\n    @property\n    def prodct_to_plan(self):\n        plans = self.active_plans\n        products = {stripe.Product.retrieve(plan.product).id: plan.id for plan in plans}\n        return products\n\n    @property\n    def active_products(self):\n        products = cache.get(f\"active_products_{self.id}\")\n        if products is not None:\n            return products\n        products = self.get_active_products()\n        cache.set(f\"active_products_{self.id}\", products, 3600)\n\n        return products\n\n    @property\n    def best_active_subscription(self):\n        subscriptions = self.active_subscriptions\n        return subscriptions[0]\n\n    @property\n    def best_active_product(self):\n        products = self.active_products\n        products.sort(key=lambda p: p.metadata.get('level', 0))\n        return products[0]\n\n    @property\n    def best_active_subscription(self):\n        subscription_id = self.plan_to_subscription[self.prodct_to_plan[self.best_active_product.id]]\n        return stripe.Subscription.retrieve(subscription_id)\n\n    @property\n    def config(self):\n        product = self.best_active_product\n        return product.metadata\n\n    def subscription_status(self):\n        subscriptions = self.active_subscriptions()\n\n    def cancel_subscription(self):\n        for subscription in self.active_subscriptions:\n            stripe.Subscription.modify(\n                subscription.id,\n                cancel_at_period_end=True,\n            )\n        self.refresh()\n\n    def reactivate_subscription(self):\n        for subscription in self.active_subscriptions:\n            stripe.Subscription.modify(\n                subscription.id,\n                cancel_at_period_end=False,\n            )\n        self.refresh()\n```\n",
      "summary": "Today I am working on fokais.com, trying to get to a point where I can launch by workig through stripe integrations. This is my first time using stripe, so...",
      "date_published": "2023-12-09T22:29:15Z",
      "date_modified": "2023-12-09T22:29:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-174/",
      "url": "https://go.waylonwalker.com/thought-174/",
      "title": "💭 Retrieve an upcoming invoice | Stripe API Reference",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stripe.com/docs/api/invoices/upcoming\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stripe.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stripe.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estripe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can find your customers next billing date through the stripe api by using \u003ccode\u003eInvoice\u003c/code\u003e. and passing in customer, customer_details, subscription, or schedule.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003estripe\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eapi_key\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sk_test_51ODvHtB26msLKqCAPBAo1qkBBuIfT5tQBX6YFWCLMsPixIExxITCRVa9tNCIqkdQS8olhR79NYXsFWBPKsM3LbGO00zEcNQfNI\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003einvoice\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eInvoice\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupcoming\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecustomer\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;cus_NeZwdNtLEOXuvB\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWithin the invoice, you can find the next_payment_attempt as a epoch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efromtimestamp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003einvoice\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003enext_payment_attempt\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eamount\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003einvoice\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eamount_due\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecurrency\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003einvoice\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrency\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stripe.com/docs/api/invoices/upcoming\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estripe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nYou can find your customers next billing date through the stripe api by using `Invoice`. and passing in customer, customer_details, subscription, or schedule.\n\n\n``` python\nimport stripe\nstripe.api_key = \"sk_test_51ODvHtB26msLKqCAPBAo1qkBBuIfT5tQBX6YFWCLMsPixIExxITCRVa9tNCIqkdQS8olhR79NYXsFWBPKsM3LbGO00zEcNQfNI\"\ninvoice = stripe.Invoice.upcoming(customer=\"cus_NeZwdNtLEOXuvB\")\n```\n\nWithin the invoice, you can find the next_payment_attempt as a epoch.\n\n``` python\ndate = datetime.fromtimestamp(invoice.next_payment_attempt)\namount = invoice.amount_due\ncurrency = invoice.currency\n```\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stripe.com/docs/api/invoices/upcoming",
      "date_published": "2023-12-07T14:49:51Z",
      "date_modified": "2023-12-07T14:49:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "stripe",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-173/",
      "url": "https://go.waylonwalker.com/thought-173/",
      "title": "💭 Search | Stripe Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stripe.com/docs/search#search-query-language\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://d37ugbyn3rpeym.cloudfront.net/docs/og-image/search.ogimage.png\" alt=\"Search — Use the search APIs to look up and retrieve objects in your Stripe data. Using search is a faster alternative to paginating through all resources.\" loading=\"lazy\"/ data-glightbox=\"description: Search — Use the search APIs to look up and retrieve objects in your Stripe data. Using search is a faster alternative to paginating through all resources.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSearch\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUse the search APIs to look up and retrieve objects in your Stripe data. Using search is a faster alternative to paginating through all resources.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estripe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eStripe has it’s own query language for querying data.  I’m just getting into using it and it seems pretty good so far.  I needed to lookup the price for products.  I was able to find prices for my product using the python api as shown below.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estripe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePrice\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esearch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;active: \u0026#39;true\u0026#39; and product: \u0026#39;prod_P8SfwtxJ45cWE2\u0026#39;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stripe.com/docs/search#search-query-language\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://d37ugbyn3rpeym.cloudfront.net/docs/og-image/search.ogimage.png\" alt=\"Search — Use the search APIs to look up and retrieve objects in your Stripe data. Using search is a faster alternative to paginating through all resources.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSearch\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUse the search APIs to look up and retrieve objects in your Stripe data. Using search is a faster alternative to paginating through all resources.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estripe.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nStripe has it's own query language for querying data.  I'm just getting into using it and it seems pretty good so far.  I needed to lookup the price for products.  I was able to find prices for my product using the python api as shown below.\n\n``` python\nstripe.Price.search(query=\"active: 'true' and product: 'prod_P8SfwtxJ45cWE2'\")\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stripe.com/docs/search#search-query-language",
      "date_published": "2023-12-06T21:54:17Z",
      "date_modified": "2023-12-06T21:54:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "stripe",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-172/",
      "url": "https://go.waylonwalker.com/thought-172/",
      "title": "💭 Stripe keys and IDs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/fnky/76f533366f75cf75802c8052b577e2a5\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gist.github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gist.github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003estripe-keys-and-ids.tsv\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003etsv\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre\u003e\u003ccode class=\"language-TSV\"\u003ePrefix\tDescription\tNotes\nac_\tPlatform Client ID\tIdentifier for an auth code/client id.\nacct_\tAccount ID\tIdentifier for an Account object.\naliacc_\tAlipay Account ID\tIdentifier for an Alipay account.\nba_\tBank Account ID\tIdentifier for a Bank Account object.\nbtok_\tBank Token ID\tIdentifier for a Bank Token object.\ncard_\tCard ID\tIdentifier for a Card object.\ncbtxn_\tCustomer Balance Transaction ID\tIdentifier for a Customer Balance Transaction object.\nch_\tCharge ID\tIdentifier for a Charge object.\ncn_\tCredit Note ID\tIdentifier for a Credit Note object.\ncs_live_\tLive Checkout Session ID\tIdentifier for a checkout Session object in live mode.\ncs_test_\tTest Checkout Session ID\tIdentifier for a checkout Session object in test mode.\ncus_\tCustomer ID\tIdentifier for a Customer object.\ndp_\tDispute ID\tIdentifier for a Dispute object.\nevt_\tEvent ID\tIdentifier for an Event object.\nfee_\tApplication Fee ID\tIdentifier for an Application Fee object.\nfile_\tFile ID\tIdentifier for a File object.\nfr_\tApplication Fee Refund ID\tIdentifier for an Application Fee Refund object.\niauth_\tIssuing Authorization ID\tIdentifier for an Issuing Authorization object.\nic_\tIssuing Card ID\tIdentifier for an Issuing Card object.\nich_\tIssuing Card Holder ID\tIdentifier for an Issuing Card Holder object.\nidp_\tIssuing Dispute ID\tIdentifier for an Issuing Dispute object.\nii_\tInvoice Item ID\tIdentifier for an Invoice Item object.\nil_\tInvoice Line Item ID\tIdentifier for a Invoice Line Item object.\nin_\tInvoice ID\tIdentifier for an Invoice object.\nipi_\tIssuing Transaction ID\tIdentifier for an Issuing Transaction object.\nlink_\tFile Link ID\tIdentifier for a File Link object.\nor_\tOrder ID\tIdentifier for an Order object.\norret_\tOrder Return ID\tIdentifier for an Order Return object.\nperson_\tPerson ID\tIdentifier for a Person object.\npi_\tPayment Intent ID\tIdentifier for a Payment Intent object.\npk_live_\tLive public key\tPublic key in a live environment.\npk_test_\tTest public key\tPublic key in a test environment.\npm_\tPayment Method ID\tIdentifier for a Payment Method object.\npo_\tPayout ID\tIdentifier for a Payout object.\nprice_\tPrice ID\tIdentifier for a Price object.\nprod_\tProduct ID\tIdentifier for a Product object.\nprv_\tReview ID\tIdentifier for a Review object.\npst_live_\tLive Connection token\tConnection token in a live environment.\npst_test_\tTest Connection token\tConnection token in a test environment.\npy_\tPayment ID\tIdentifier for a Payment object.\npyr_\tPayment Refund ID\tIdentifier for a psuedo Refund object of a payment.\nqt_\tQuote ID\tIdentifier for a Quote object.\nrcpt_\tReceipt ID\tIdentifier for a receipt.\nre_\tRefund ID\tIdentifier for a Refund object.\nreq_\tRequest ID\tIdentifier for a HTTP Request\nrk_live_\tLive restricted key\tRestricted key for live environment eg. stripe-cli\nrk_test_\tTest restricted key\tRestricted key for test environment eg. stripe-cli\nseti_\tSetup Intent ID\tIdentifier for a Setup Intent object.\nsi_\tSubscription Item ID\tIdentifier for a Subscription Item object.\nsk_live_\tLive secret key\tSecret key in a live environment.\nsk_test_\tTest secret key\tPecret key in a test environment.\nsku_\tSKU ID\tIdentifier for a SKU object.\nsli_\tSubscription Line Item ID\tIdentifier for a Subscription Line Item object.\nsqr_\tScheduled Query Run ID\tIdentifier for a Scheduled Query Run object.\nsrc_\tSource ID\tIdentifier for a Source object.\nsrc_\tSource ID\tIdentifier for a Source object.\nsub_\tSubscription ID\tIdentifier for a Subscription object.\ntml_\tTerminal Location ID\tIdentifier for a Terminal Location object.\ntmr_\tTerminal Reader ID\tIdentifier for a Terminal Reader object.\ntok_\tToken ID\tIdentifier for a Token object.\ntrr_\tTransfer ID\tIdentifier a Transfer object.\ntu_\tTopup ID\tIdentifier for a Topup object.\ntxi_\tTax ID\tIdentifier for a customer Tax object.\ntxn_\tTransaction ID\tIdentifier for a Transaction object.\ntxr_\tTax Rate ID\tIdentifier for a Tax Rate object.\nwe_\tWebhook Endpoint ID\tIdentifier for a webhook endpoint.\nwhsec_\tWebhook Secret\tSecret key for signing a web hook.\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eStripe has so many keys and ids this is a very helpful list to decode what exactly an id is for.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/fnky/76f533366f75cf75802c8052b577e2a5\" target=\"_blank\" rel=\"noopener noreferrer\"\u003estripe-keys-and-ids.tsv\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003etsv\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre\u003e\u003ccode class=\"language-TSV\"\u003ePrefix\tDescription\tNotes\nac_\tPlatform Client ID\tIdentifier for an auth code/client id.\nacct_\tAccount ID\tIdentifier for an Account object.\naliacc_\tAlipay Account ID\tIdentifier for an Alipay account.\nba_\tBank Account ID\tIdentifier for a Bank Account object.\nbtok_\tBank Token ID\tIdentifier for a Bank Token object.\ncard_\tCard ID\tIdentifier for a Card object.\ncbtxn_\tCustomer Balance Transaction ID\tIdentifier for a Customer Balance Transaction object.\nch_\tCharge ID\tIdentifier for a Charge object.\ncn_\tCredit Note ID\tIdentifier for a Credit Note object.\ncs_live_\tLive Checkout Session ID\tIdentifier for a checkout Session object in live mode.\ncs_test_\tTest Checkout Session ID\tIdentifier for a checkout Session object in test mode.\ncus_\tCustomer ID\tIdentifier for a Customer object.\ndp_\tDispute ID\tIdentifier for a Dispute object.\nevt_\tEvent ID\tIdentifier for an Event object.\nfee_\tApplication Fee ID\tIdentifier for an Application Fee object.\nfile_\tFile ID\tIdentifier for a File object.\nfr_\tApplication Fee Refund ID\tIdentifier for an Application Fee Refund object.\niauth_\tIssuing Authorization ID\tIdentifier for an Issuing Authorization object.\nic_\tIssuing Card ID\tIdentifier for an Issuing Card object.\nich_\tIssuing Card Holder ID\tIdentifier for an Issuing Card Holder object.\nidp_\tIssuing Dispute ID\tIdentifier for an Issuing Dispute object.\nii_\tInvoice Item ID\tIdentifier for an Invoice Item object.\nil_\tInvoice Line Item ID\tIdentifier for a Invoice Line Item object.\nin_\tInvoice ID\tIdentifier for an Invoice object.\nipi_\tIssuing Transaction ID\tIdentifier for an Issuing Transaction object.\nlink_\tFile Link ID\tIdentifier for a File Link object.\nor_\tOrder ID\tIdentifier for an Order object.\norret_\tOrder Return ID\tIdentifier for an Order Return object.\nperson_\tPerson ID\tIdentifier for a Person object.\npi_\tPayment Intent ID\tIdentifier for a Payment Intent object.\npk_live_\tLive public key\tPublic key in a live environment.\npk_test_\tTest public key\tPublic key in a test environment.\npm_\tPayment Method ID\tIdentifier for a Payment Method object.\npo_\tPayout ID\tIdentifier for a Payout object.\nprice_\tPrice ID\tIdentifier for a Price object.\nprod_\tProduct ID\tIdentifier for a Product object.\nprv_\tReview ID\tIdentifier for a Review object.\npst_live_\tLive Connection token\tConnection token in a live environment.\npst_test_\tTest Connection token\tConnection token in a test environment.\npy_\tPayment ID\tIdentifier for a Payment object.\npyr_\tPayment Refund ID\tIdentifier for a psuedo Refund object of a payment.\nqt_\tQuote ID\tIdentifier for a Quote object.\nrcpt_\tReceipt ID\tIdentifier for a receipt.\nre_\tRefund ID\tIdentifier for a Refund object.\nreq_\tRequest ID\tIdentifier for a HTTP Request\nrk_live_\tLive restricted key\tRestricted key for live environment eg. stripe-cli\nrk_test_\tTest restricted key\tRestricted key for test environment eg. stripe-cli\nseti_\tSetup Intent ID\tIdentifier for a Setup Intent object.\nsi_\tSubscription Item ID\tIdentifier for a Subscription Item object.\nsk_live_\tLive secret key\tSecret key in a live environment.\nsk_test_\tTest secret key\tPecret key in a test environment.\nsku_\tSKU ID\tIdentifier for a SKU object.\nsli_\tSubscription Line Item ID\tIdentifier for a Subscription Line Item object.\nsqr_\tScheduled Query Run ID\tIdentifier for a Scheduled Query Run object.\nsrc_\tSource ID\tIdentifier for a Source object.\nsrc_\tSource ID\tIdentifier for a Source object.\nsub_\tSubscription ID\tIdentifier for a Subscription object.\ntml_\tTerminal Location ID\tIdentifier for a Terminal Location object.\ntmr_\tTerminal Reader ID\tIdentifier for a Terminal Reader object.\ntok_\tToken ID\tIdentifier for a Token object.\ntrr_\tTransfer ID\tIdentifier a Transfer object.\ntu_\tTopup ID\tIdentifier for a Topup object.\ntxi_\tTax ID\tIdentifier for a customer Tax object.\ntxn_\tTransaction ID\tIdentifier for a Transaction object.\ntxr_\tTax Rate ID\tIdentifier for a Tax Rate object.\nwe_\tWebhook Endpoint ID\tIdentifier for a webhook endpoint.\nwhsec_\tWebhook Secret\tSecret key for signing a web hook.\n\u003c/code\u003e\u003c/pre\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nStripe has so many keys and ids this is a very helpful list to decode what exactly an id is for.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gist.github.com/fnky/76f533366f75cf75802c8052b577e2a5",
      "date_published": "2023-12-06T13:46:44Z",
      "date_modified": "2023-12-06T13:46:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "stripe",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-171/",
      "url": "https://go.waylonwalker.com/thought-171/",
      "title": "💭 Overworked - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"IVdaysrIS74\" title=\"Overworked\" playlabel=\"Play: Overworked\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDang this is such a good message.  I can’t exactly relate to being forced into the overworking situation that PirateSofware is talking about.  I can relate to being conditioned to feeling a certain way and changing that is very difficult.  I can also relate to not feeling like I am getting enough done in the day.  Sometimes a bit of separation is good.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"IVdaysrIS74\" title=\"Overworked\" playlabel=\"Play: Overworked\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDang this is such a good message.  I can't exactly relate to being forced into the overworking situation that PirateSofware is talking about.  I can relate to being conditioned to feeling a certain way and changing that is very difficult.  I can also relate to not feeling like I am getting enough done in the day.  Sometimes a bit of separation is good.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/IVdaysrIS74",
      "date_published": "2023-11-30T16:55:05Z",
      "date_modified": "2023-11-30T16:55:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "soft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/still-loving-tailwind/",
      "url": "https://go.waylonwalker.com/still-loving-tailwind/",
      "title": "Still Loving Tailwind",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/img-c8Fom5UqPWT6IzLefZ3YKU68.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/img-c8Fom5UqPWT6IzLefZ3YKU68.png\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI’ve been using tailwind for a few months now and I can still say I’m loving\nit. I’ve been using it to create some rapid prototypes that may or may not\never become something, a document that is likely to go to print (a resume), and some quick\ndashboards.\u003c/p\u003e\n\u003ch2 id=\"i-started-using-tailwind-a-few-month-back\"\u003eI started using Tailwind a few month back \u003ca href=\"#i-started-using-tailwind-a-few-month-back\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA few months back in september of 2023 I made \u003ca href=\"https://waylonwalker.com/a-case-for-tailwindcss/\" 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\"\u003ea case for\ntailwindcss\u003c/a\u003e. And have been\nusing it on quite a few projects since.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003evalues are well thought out\u003c/li\u003e\n\u003cli\u003eit’s really easy to use\u003c/li\u003e\n\u003cli\u003eclasses that make sense\u003c/li\u003e\n\u003cli\u003etree shakable\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"fokaiscom\"\u003efokais.com \u003ca href=\"#fokaiscom\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI started working on fokais.com only a few weeks ago, It’s going to be a SAS to\nmake blogging easier. I’ve started hosting some tools for this blog that I\nreally like that I think I can turn into a service. It’s been fantastic to\nquickly pump out new pages with tailwind.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://fokais.com\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.waylonwalker.com/shot/?url=https://fokais.com\u0026amp;height=600\u0026amp;width=1200\u0026amp;scaled_width=600\u0026amp;scaled_height=300\u0026amp;selectors=\" alt=\"screenshot of https://fokais.com\"/ data-glightbox=\"description: screenshot of https://fokais.com\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"\u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e\"\u003eHTMX \u003ca href=\"#htmx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003etailwind and htmx are a match made in heaven. They both really lean on\nLocation of Behavior over Separation of concerns. They do really well at\nmaking small components that you can throw on and endpoint and stack into any\npage. With tailwind I just configure it to look at all my templates, and I can\nguarantee that the styles will be in app.css, and all I need to do is add\nclasses to my component.\u003c/p\u003e\n\u003cp\u003eHeres a sample component for a user widget that will go on every page. It has\neverything it needs right in the template.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003ehx-swap-oob\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;outerHTML\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;user-header\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;absolute top-0 right-0 mt-8 mr-4\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% if current_user %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003edetails\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;user-header-details\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eopen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;group list-none px-4 py-2 self-center justify-self-center bg-neutral-600/10 shadow-lg shadow-zinc-950/20 ring-2 ring-zinc-950/5 rounded-xl flex justify-center align-center flex-col\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003esummary\u003c/span\u003e \u003cspan class=\"na\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;list-style-type: none\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e{{ current_user.username }}\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003esummary\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;hidden group-hover:block my-4\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mt-6 px-4 py-2 rounded bg-purple-950/5 ring-2 ring-cyan-500/30 text-cyan-500 font-bold\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;get_logout\u0026#39;) }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        Logout\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003edetails\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% else %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{{ url_for(\u0026#39;post_login\u0026#39;) }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mt-5 text-xl text-white font-bold text-shadow-xl text-shadow-zinc-950\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    login\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% endif %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"internal-apps\"\u003einternal apps \u003ca href=\"#internal-apps\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve built several interal apps, and tailwind has been really great for this.\nIts super quick to pop classes on components and get things to look decent\nquickly, or put some real polish into making them look nice.\u003c/p\u003e\n\u003ch2 id=\"my-website-waylonwalkercom\"\u003eMy Website waylonwalker.com \u003ca href=\"#my-website-waylonwalkercom\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve dropped my old decrepid css for some tailwind on my main site. My css was\nmuch smaller, but did not work quite as well on all devices, and most\nimportantly was becoming a house of cards. Every time I fixed one thing several\nother things would fail. Colors were a bit muddy, and not as nicely configured\nas tailwind.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMost importantly was becoming a house of cards. Every time I fixed one thing\nseveral other things would fail.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eOne rough side of styling a blog in tailwind is that you don’t necessarily have\ncontrol over granular details of how your pages get rendered without getting\nreally deep into the markdown renderer, or writing your posts in \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. It ends\nup looking a bit ugly, and is against the tailwind best practices, but it seems\nlike the best way for a site like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003etailwind\u003c/span\u003e \u003cspan class=\"nt\"\u003ebase\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003etailwind\u003c/span\u003e \u003cspan class=\"nt\"\u003ecomponents\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003etailwind\u003c/span\u003e \u003cspan class=\"nt\"\u003eutilities\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003eimport\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;./highlight.css\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003esocial\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003efont-bold\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003eflex\u003c/span\u003e \u003cspan class=\"err\"\u003eflex-row\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003egap-4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003ejustify-center\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003epy-8\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e#\u003c/span\u003e\u003cspan class=\"nn\"\u003eposts\u003c/span\u003e \u003cspan class=\"nt\"\u003eul\u003c/span\u003e \u003cspan class=\"nt\"\u003eul\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003ebackdrop-blur-sm\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003eflex\u003c/span\u003e \u003cspan class=\"err\"\u003eflex-col\u003c/span\u003e \u003cspan class=\"n\"\u003esm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"k\"\u003egrid\u003c/span\u003e \u003cspan class=\"k\"\u003egrid\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"k\"\u003eflow\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"kc\"\u003erow\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003edense\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003egap-4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003egrid-template-columns\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nf\"\u003erepeat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003eauto\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efit\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eminmax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e300\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003efr\u003c/span\u003e\u003cspan class=\"p\"\u003e));\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e@apply\u003c/span\u003e \u003cspan class=\"err\"\u003ep-4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"grid\"\u003egrid \u003ca href=\"#grid\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve struggled to use grid on my projects, and I’ve tried a few different times\nwith no real success or adoption, but started using it on my resume, to have a\nmain middle column, with two outer full bleed columns where I can make some\nelements full bleed to the edge. tailwind made this easy, once done, I had an\nadmonition that was beautiful full bleed with a touch of color.\u003c/p\u003e\n",
      "content_text": "\n![](https://images.waylonwalker.com/img-c8Fom5UqPWT6IzLefZ3YKU68.png)\n\nI've been using tailwind for a few months now and I can still say I'm loving\nit. I've been using it to create some rapid prototypes that may or may not\never become something, a document that is likely to go to print (a resume), and some quick\ndashboards.\n\n## I started using Tailwind a few month back\n\nA few months back in september of 2023 I made [a case for\ntailwindcss](https://waylonwalker.com/a-case-for-tailwindcss/). And have been\nusing it on quite a few projects since.\n\n- values are well thought out\n- it's really easy to use\n- classes that make sense\n- tree shakable\n\n## fokais.com\n\nI started working on fokais.com only a few weeks ago, It's going to be a SAS to\nmake blogging easier. I've started hosting some tools for this blog that I\nreally like that I think I can turn into a service. It's been fantastic to\nquickly pump out new pages with tailwind.\n\n[![screenshot of https://fokais.com](https://shots.waylonwalker.com/shot/?url=https://fokais.com\u0026height=600\u0026width=1200\u0026scaled_width=600\u0026scaled_height=300\u0026selectors=)](https://fokais.com)\n\n## HTMX\n\ntailwind and htmx are a match made in heaven. They both really lean on\nLocation of Behavior over Separation of concerns. They do really well at\nmaking small components that you can throw on and endpoint and stack into any\npage. With tailwind I just configure it to look at all my templates, and I can\nguarantee that the styles will be in app.css, and all I need to do is add\nclasses to my component.\n\nHeres a sample component for a user widget that will go on every page. It has\neverything it needs right in the template.\n\n```html\n\u003cdiv\n  hx-swap-oob=\"outerHTML\"\n  id=\"user-header\"\n  class=\"absolute top-0 right-0 mt-8 mr-4\"\n\u003e\n  {% if current_user %}\n  \u003cdetails\n    id=\"user-header-details\"\n    open\n    class=\"group list-none px-4 py-2 self-center justify-self-center bg-neutral-600/10 shadow-lg shadow-zinc-950/20 ring-2 ring-zinc-950/5 rounded-xl flex justify-center align-center flex-col\"\n  \u003e\n    \u003csummary style=\"list-style-type: none\"\u003e{{ current_user.username }}\u003c/summary\u003e\n    \u003cdiv class=\"hidden group-hover:block my-4\"\u003e\n      \u003ca\n        class=\"mt-6 px-4 py-2 rounded bg-purple-950/5 ring-2 ring-cyan-500/30 text-cyan-500 font-bold\"\n        href=\"{{ url_for('get_logout') }}\"\n      \u003e\n        Logout\n      \u003c/a\u003e\n    \u003c/div\u003e\n  \u003c/details\u003e\n\n  {% else %}\n  \u003ca\n    href=\"{{ url_for('post_login') }}\"\n    class=\"mt-5 text-xl text-white font-bold text-shadow-xl text-shadow-zinc-950\"\n  \u003e\n    login\n  \u003c/a\u003e\n  {% endif %}\n\u003c/div\u003e\n```\n\n## internal apps\n\nI've built several interal apps, and tailwind has been really great for this.\nIts super quick to pop classes on components and get things to look decent\nquickly, or put some real polish into making them look nice.\n\n## My Website waylonwalker.com\n\nI've dropped my old decrepid css for some tailwind on my main site. My css was\nmuch smaller, but did not work quite as well on all devices, and most\nimportantly was becoming a house of cards. Every time I fixed one thing several\nother things would fail. Colors were a bit muddy, and not as nicely configured\nas tailwind.\n\n\u003e Most importantly was becoming a house of cards. Every time I fixed one thing\n\u003e several other things would fail.\n\nOne rough side of styling a blog in tailwind is that you don't necessarily have\ncontrol over granular details of how your pages get rendered without getting\nreally deep into the markdown renderer, or writing your posts in html. It ends\nup looking a bit ugly, and is against the tailwind best practices, but it seems\nlike the best way for a site like this.\n\n```css\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n@import \"./highlight.css\";\n\n.social {\n  @apply font-bold;\n  @apply flex flex-row;\n  @apply gap-4;\n  @apply justify-center;\n  @apply py-8;\n}\n\n#posts ul ul {\n  @apply backdrop-blur-sm;\n  @apply flex flex-col sm:grid grid-flow-row-dense;\n  @apply gap-4;\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n  @apply p-4;\n}\n```\n\n## grid\n\nI've struggled to use grid on my projects, and I've tried a few different times\nwith no real success or adoption, but started using it on my resume, to have a\nmain middle column, with two outer full bleed columns where I can make some\nelements full bleed to the edge. tailwind made this easy, once done, I had an\nadmonition that was beautiful full bleed with a touch of color.\n",
      "summary": "I've been using tailwind for a few months now and I can still say I'm loving it. I've been using it to create some rapid prototypes that may or may not ever...",
      "date_published": "2023-11-30T11:54:52Z",
      "date_modified": "2023-11-30T11:54:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-170/",
      "url": "https://go.waylonwalker.com/thought-170/",
      "title": "💭 CSS @media print issues with background-color; - Stack Overflow",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/3893986/css-media-print-issues-with-background-color#answer-14784655\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGet those print colors exact\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kp\"\u003e-webkit-\u003c/span\u003e\u003cspan class=\"n\"\u003eprint-color-adjust\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003eexact\u003c/span\u003e \u003cspan class=\"cp\"\u003e!important\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eprint-color-adjust\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003eexact\u003c/span\u003e \u003cspan class=\"cp\"\u003e!important\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/3893986/css-media-print-issues-with-background-color#answer-14784655\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGet those print colors exact\n\n``` css\nbody{\n  -webkit-print-color-adjust:exact !important;\n  print-color-adjust:exact !important;\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/3893986/css-media-print-issues-with-background-color#answer-14784655",
      "date_published": "2023-11-30T03:00:52Z",
      "date_modified": "2023-11-30T03:00:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-169/",
      "url": "https://go.waylonwalker.com/thought-169/",
      "title": "💭 page-break-after - CSS: Cascading Style Sheets | MDN",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developer.mozilla.org/mdn-social-image.46ac2375.png\" alt=\"page-break-after - CSS | MDN — The page-break-after CSS property adjusts page breaks after the current element.\" loading=\"lazy\"/ data-glightbox=\"description: page-break-after - CSS | MDN — The page-break-after CSS property adjusts page breaks after the current element.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epage-break-after - CSS | MDN\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe page-break-after CSS property adjusts page breaks after the current element.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMDN Web Docs · developer.mozilla.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’m working on something that might go to print, so I want the page breaks to happen somewhat in my control as the content author.  As I do my writing I break my content up in to many short sections using h2, sometimes an h3.  These are generally short sections that go together, should stay together, and typically are not too lengthy to cause a large white space in print.\u003c/p\u003e\n\u003cp\u003eI found a way in css to only allow page breaks to happen on h2 and h3, and it turned out perfect, suck it WSIWIG editors\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003epage-break-before\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eavoid\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eh3\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003epage-break-before\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developer.mozilla.org/mdn-social-image.46ac2375.png\" alt=\"page-break-after - CSS | MDN — The page-break-after CSS property adjusts page breaks after the current element.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epage-break-after - CSS | MDN\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe page-break-after CSS property adjusts page breaks after the current element.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMDN Web Docs \u0026middot; developer.mozilla.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI'm working on something that might go to print, so I want the page breaks to happen somewhat in my control as the content author.  As I do my writing I break my content up in to many short sections using h2, sometimes an h3.  These are generally short sections that go together, should stay together, and typically are not too lengthy to cause a large white space in print.\n\nI found a way in css to only allow page breaks to happen on h2 and h3, and it turned out perfect, suck it WSIWIG editors\n\n\n``` css\n* {\n  page-break-before: avoid;\n}\n\nh2,\nh3 {\n  page-break-before: auto;\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after",
      "date_published": "2023-11-30T02:38:49Z",
      "date_modified": "2023-11-30T02:38:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-168/",
      "url": "https://go.waylonwalker.com/thought-168/",
      "title": "💭 Go by Example",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gobyexample.com/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gobyexample.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gobyexample.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGo by Example\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egobyexample.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFantastic resource for learning go.  You work through small examples quickly, learning single concepts along the way.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://gobyexample.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGo by Example\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egobyexample.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFantastic resource for learning go.  You work through small examples quickly, learning single concepts along the way.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gobyexample.com/",
      "date_published": "2023-11-29T14:11:42Z",
      "date_modified": "2023-11-29T14:11:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "go",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-167/",
      "url": "https://go.waylonwalker.com/thought-167/",
      "title": "💭 How to Build a Website or App",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://syntax.fm/show/696/how-to-build-a-website-or-app\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://syntax.fm/og/696.jpg\" alt=\"How to Build a Website or App - Syntax #696 — This podcast episode covers a wide range of topics related to building a website or web application from start to finish.\" loading=\"lazy\"/ data-glightbox=\"description: How to Build a Website or App - Syntax #696 — This podcast episode covers a wide range of topics related to building a website or web application from start to finish.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Build a Website or App - Syntax #696\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis podcast episode covers a wide range of topics related to building a website or web application from start to finish.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esyntax.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e    Great tips in this one.  They discuss everything from front end to backend, databases and ORMS, here are a few of my favorite points.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eUse good data or good fake data\n\u003cul\u003e\n\u003cli\u003emake it have some variation like long and short text\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eDon’t use a database if you need one, static content is eaiser to manage\u003c/li\u003e\n\u003cli\u003eend to end test, (does the site load page x)\u003c/li\u003e\n\u003cli\u003eYou DONT NEED all this complexity, you can deploy a site with \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 and CSS.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://syntax.fm/show/696/how-to-build-a-website-or-app\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://syntax.fm/og/696.jpg\" alt=\"How to Build a Website or App - Syntax #696 — This podcast episode covers a wide range of topics related to building a website or web application from start to finish.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Build a Website or App - Syntax #696\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis podcast episode covers a wide range of topics related to building a website or web application from start to finish.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esyntax.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n        Great tips in this one.  They discuss everything from front end to backend, databases and ORMS, here are a few of my favorite points.\n\n* Use good data or good fake data\n  * make it have some variation like long and short text\n* Don't use a database if you need one, static content is eaiser to manage\n* end to end test, (does the site load page x)\n* You DONT NEED all this complexity, you can deploy a site with HTML and CSS.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://syntax.fm/show/696/how-to-build-a-website-or-app",
      "date_published": "2023-11-28T02:04:02Z",
      "date_modified": "2023-11-28T02:04:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-165/",
      "url": "https://go.waylonwalker.com/thought-165/",
      "title": "💭 Will McGugan on X: \"Just a wee thing that came up today. I thi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/willmcgugan/status/1729158038551220477\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTextual is so sick, Will just made a live markdown editor in the terminal!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/willmcgugan/status/1729158038551220477\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTextual is so sick, Will just made a live markdown editor in the terminal!  \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/willmcgugan/status/1729158038551220477",
      "date_published": "2023-11-27T16:31:33Z",
      "date_modified": "2023-11-27T16:31:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tui",
        "textual",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-164/",
      "url": "https://go.waylonwalker.com/thought-164/",
      "title": "💭 Sebastián Ramírez on X: \"Now @FastAPI has 65k+ GitHub stars! ✨...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/tiangolo/status/1729153717956715007\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\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 passes flask in GitHub stars!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/tiangolo/status/1729153717956715007\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.wayl.one/shot/?url=https://twitter.com/tiangolo/status/1729153717956715007\u0026amp;height=800\u0026amp;width=450\u0026amp;scaled_width=450\u0026amp;scaled_height=800\u0026amp;selectors=\" alt=\"screenshot of https://twitter.com/tiangolo/status/1729153717956715007\"/ data-glightbox=\"description: screenshot of https://twitter.com/tiangolo/status/1729153717956715007\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/tiangolo/status/1729153717956715007\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFastapi passes flask in GitHub stars!\n\n[![screenshot of https://twitter.com/tiangolo/status/1729153717956715007](https://shots.wayl.one/shot/?url=https://twitter.com/tiangolo/status/1729153717956715007\u0026height=800\u0026width=450\u0026scaled_width=450\u0026scaled_height=800\u0026selectors=)](https://twitter.com/tiangolo/status/1729153717956715007)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/tiangolo/status/1729153717956715007",
      "date_published": "2023-11-27T16:15:36Z",
      "date_modified": "2023-11-27T16:15:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-163/",
      "url": "https://go.waylonwalker.com/thought-163/",
      "title": "💭 Separations of Concerns is a Lie - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"eMTFzpxR0QQ\" title=\"Separations of Concerns is a Lie\" playlabel=\"Play: Separations of Concerns is a Lie\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eNice take by \u003ca href=\"https://twitter.com/t3dotgg\"\u003e@t3dotgg\u003c/a\u003e.   Some of the old patterns that go deep into webdev, MVC, separation of concerns, REST, are things we are told to believe on day one,  thrown so many things, no mental bandwidth, or experience to form our own opinions we must take them as fact.  Rarely do we take these facts and revisit them with our new understandings years later.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"eMTFzpxR0QQ\" title=\"Separations of Concerns is a Lie\" playlabel=\"Play: Separations of Concerns is a Lie\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nNice take by [@t3dotgg](https://twitter.com/t3dotgg).   Some of the old patterns that go deep into webdev, MVC, separation of concerns, REST, are things we are told to believe on day one,  thrown so many things, no mental bandwidth, or experience to form our own opinions we must take them as fact.  Rarely do we take these facts and revisit them with our new understandings years later.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=eMTFzpxR0QQ\u0026t=326",
      "date_published": "2023-11-27T14:49:31Z",
      "date_modified": "2023-11-27T14:49:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-162/",
      "url": "https://go.waylonwalker.com/thought-162/",
      "title": "💭 Pype|Dev🐍 (py-puh-day) on X: \"@wtravishubbard Management is ab...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/pypeaday/status/1727156823185113304\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eToday I learned the meaning of abhorrent\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eabhorrent\năb-hôr′ənt, -hŏr′-\nadjective\nDisgusting, loathsome, or repellent.\nFeeling repugnance or loathing.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/pypeaday/status/1727156823185113304\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nToday I learned the meaning of abhorrent\n\n\u003e abhorrent\n\u003e ăb-hôr′ənt, -hŏr′-\n\u003e adjective\n\u003e Disgusting, loathsome, or repellent.\n\u003e Feeling repugnance or loathing.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/pypeaday/status/1727156823185113304",
      "date_published": "2023-11-22T03:27:24Z",
      "date_modified": "2023-11-22T03:27:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "words",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastapi-sqlmodel/",
      "url": "https://go.waylonwalker.com/fastapi-sqlmodel/",
      "title": "⭐ fastapi sqlmodel",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/fastapi/sqlmodel\" 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\"\u003esqlmodel\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/fastapi\" 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\"\u003efastapi\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eSQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [sqlmodel](https://github.com/fastapi/sqlmodel), an amazing project by [fastapi](https://github.com/fastapi). It's worth exploring!\n\nSQL databases in Python, designed for simplicity, compatibility, and robustness.\n",
      "summary": "I'm really excited about sqlmodel, an amazing project by fastapi. It's worth exploring!",
      "date_published": "2023-11-18T15:42:30Z",
      "date_modified": "2023-11-18T15:42:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sawyerhood-draw-a-ui/",
      "url": "https://go.waylonwalker.com/sawyerhood-draw-a-ui/",
      "title": "⭐ SawyerHood draw-a-ui",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/SawyerHood/draw-a-ui\" 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\"\u003edraw-a-ui\u003c/a\u003e, created by \u003ca href=\"https://github.com/SawyerHood\" 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\"\u003eSawyerHood\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDraw a mockup and generate \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 for it\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [draw-a-ui](https://github.com/SawyerHood/draw-a-ui), created by [SawyerHood](https://github.com/SawyerHood).\n\nDraw a mockup and generate html for it\n",
      "summary": "If you're into interesting projects, don't miss out on draw-a-ui, created by SawyerHood.",
      "date_published": "2023-11-14T19:02:43Z",
      "date_modified": "2023-11-14T19:02:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-161/",
      "url": "https://go.waylonwalker.com/thought-161/",
      "title": "💭 Heroicons",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://heroicons.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://heroicons.com/_next/static/media/social-card.fefc68e0.jpg\" alt=\"Heroicons — Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS.\" loading=\"lazy\"/ data-glightbox=\"description: Heroicons — Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHeroicons\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBeautiful hand-crafted SVG icons, by the makers of Tailwind CSS.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHeroicons · heroicons.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eheroicons is a really nice set of many of the basic icons that you will need for building nice ui’s.  They have a really nice copy as svg or jsx button, so that you can just yank it and paste it on your page without any extra packages or installation.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://heroicons.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://heroicons.com/_next/static/media/social-card.fefc68e0.jpg\" alt=\"Heroicons — Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHeroicons\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBeautiful hand-crafted SVG icons, by the makers of Tailwind CSS.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHeroicons \u0026middot; heroicons.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nheroicons is a really nice set of many of the basic icons that you will need for building nice ui's.  They have a really nice copy as svg or jsx button, so that you can just yank it and paste it on your page without any extra packages or installation.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://heroicons.com/",
      "date_published": "2023-11-14T01:06:12Z",
      "date_modified": "2023-11-14T01:06:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "icons",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-160/",
      "url": "https://go.waylonwalker.com/thought-160/",
      "title": "💭 Uptime Kuma",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://uptime.kuma.pet/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/uptime.kuma.pet.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/uptime.kuma.pet.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUptime Kuma\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA self-hosted monitoring tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003euptime.kuma.pet\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eUptime kuma is a fantastic \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 monitoring tool.  One docker run command and you are up and running.  Once you are in you have full control over checking status of urls, frequency, allowed timeouts, and a HUGE list of notification providers\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run -d --restart\u003cspan class=\"o\"\u003e=\u003c/span\u003ealways -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI deployed it in my \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 today.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/_WaylonWalker/status/1723077941649707468\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.wayl.one/shot/?url=https://twitter.com/_WaylonWalker/status/1723077941649707468\u0026amp;height=800\u0026amp;width=450\u0026amp;scaled_width=450\u0026amp;scaled_height=800\u0026amp;selectors=\" alt=\"screenshot of https://twitter.com/_WaylonWalker/status/1723077941649707468\"/ data-glightbox=\"description: screenshot of https://twitter.com/_WaylonWalker/status/1723077941649707468\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://uptime.kuma.pet/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUptime Kuma\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA self-hosted monitoring tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003euptime.kuma.pet\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nUptime kuma is a fantastic self hosted monitoring tool.  One docker run command and you are up and running.  Once you are in you have full control over checking status of urls, frequency, allowed timeouts, and a HUGE list of notification providers\n\n\n``` bash\ndocker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1\n```\n\n\nI deployed it in my homelab today.\n\n[![screenshot of https://twitter.com/_WaylonWalker/status/1723077941649707468](https://shots.wayl.one/shot/?url=https://twitter.com/_WaylonWalker/status/1723077941649707468\u0026height=800\u0026width=450\u0026scaled_width=450\u0026scaled_height=800\u0026selectors=)](https://twitter.com/_WaylonWalker/status/1723077941649707468)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://uptime.kuma.pet/",
      "date_published": "2023-11-11T02:46:12Z",
      "date_modified": "2023-11-11T02:46:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/louislam-uptime-kuma/",
      "url": "https://go.waylonwalker.com/louislam-uptime-kuma/",
      "title": "⭐ louislam uptime-kuma",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/louislam/uptime-kuma\" 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\"\u003euptime-kuma\u003c/a\u003e from \u003ca href=\"https://github.com/louislam\" 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\"\u003elouislam\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA fancy \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 monitoring tool\u003c/p\u003e\n",
      "content_text": "\nI came across [uptime-kuma](https://github.com/louislam/uptime-kuma) from [louislam](https://github.com/louislam), and it's packed with great features and ideas.\n\nA fancy self-hosted monitoring tool\n",
      "summary": "I came across uptime-kuma from louislam, and it's packed with great features and ideas.",
      "date_published": "2023-11-11T01:21:48Z",
      "date_modified": "2023-11-11T01:21:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-158/",
      "url": "https://go.waylonwalker.com/thought-158/",
      "title": "💭 kv - Command | Vault | HashiCorp Developer",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.hashicorp.com/vault/docs/commands/kv\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developer.hashicorp.com/og-image/vault.jpg\" alt=\"kv - Command | Vault | HashiCorp Developer — The \u0026#34;kv\u0026#34; command groups subcommands for interacting with Vault\u0026#39;s key/value\nsecret engine.\" loading=\"lazy\"/ data-glightbox=\"description: kv - Command | Vault | HashiCorp Developer — The \u0026#34;kv\u0026#34; command groups subcommands for interacting with Vault\u0026#39;s key/value\nsecret engine.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ekv - Command | Vault | HashiCorp Developer\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe \u0026#34;kv\u0026#34; command groups subcommands for interacting with Vault\u0026#39;s key/value\nsecret engine.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekv - Command | Vault | HashiCorp Developer · developer.hashicorp.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ehashi vault lets you manage secrets right from your cli.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# set your vault url\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eVAULT_ADDR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ehttps://myvault.mydomain\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault login\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# get a secret\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv get secret/hvac\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# put a secret\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv put -mount\u003cspan class=\"o\"\u003e=\u003c/span\u003esecret creds \u003cspan class=\"nv\"\u003epasscode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003emy-long-passcode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# get it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv get secret/creds\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# == Secret Path ==\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# secret/data/creds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ======= Metadata =======\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Key                Value\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ---                -----\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# created_time       2023-11-05T02:53:40.978120001Z\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# custom_metadata    \u0026lt;nil\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# deletion_time      n/a\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# destroyed          false\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# version            3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ====== Data ======\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Key         Value\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ---         -----\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# bar         baz\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# passcode    my-long-passcode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# get one field\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv get -field\u003cspan class=\"o\"\u003e=\u003c/span\u003epasscode secret/creds\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# my-long-passcode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv put -mount\u003cspan class=\"o\"\u003e=\u003c/span\u003esecret creds \u003cspan class=\"nv\"\u003ebar\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ebaz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# set more keys\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv put -mount\u003cspan class=\"o\"\u003e=\u003c/span\u003esecret creds \u003cspan class=\"nv\"\u003epasscode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003emy-long-passcode \u003cspan class=\"nv\"\u003ebar\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ebaz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# == Secret Path ==\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# secret/data/creds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ======= Metadata =======\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Key                Value\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ---                -----\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# created_time       2023-11-05T03:24:14.65958906Z\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# custom_metadata    \u0026lt;nil\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# deletion_time      n/a\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# destroyed          false\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# version            4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evault kv get secret/creds\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# == Secret Path ==\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# secret/data/creds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ======= Metadata =======\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Key                Value\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ---                -----\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# created_time       2023-11-05T02:53:40.978120001Z\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# custom_metadata    \u0026lt;nil\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# deletion_time      n/a\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# destroyed          false\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# version            4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ====== Data ======\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Key         Value\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ---         -----\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# bar         baz\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# passcode    my-long-passcode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.hashicorp.com/vault/docs/commands/kv\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developer.hashicorp.com/og-image/vault.jpg\" alt=\"kv - Command | Vault | HashiCorp Developer — The \u0026#34;kv\u0026#34; command groups subcommands for interacting with Vault\u0026#39;s key/value\nsecret engine.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ekv - Command | Vault | HashiCorp Developer\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe \u0026#34;kv\u0026#34; command groups subcommands for interacting with Vault\u0026#39;s key/value\nsecret engine.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekv - Command | Vault | HashiCorp Developer \u0026middot; developer.hashicorp.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nhashi vault lets you manage secrets right from your cli.\n\n``` bash\n# set your vault url\nexport VAULT_ADDR=https://myvault.mydomain\nvault login\n\n# get a secret\nvault kv get secret/hvac\n\n# put a secret\nvault kv put -mount=secret creds passcode=my-long-passcode\n\n# get it\nvault kv get secret/creds\n\n# == Secret Path ==\n# secret/data/creds\n# \n# ======= Metadata =======\n# Key                Value\n# ---                -----\n# created_time       2023-11-05T02:53:40.978120001Z\n# custom_metadata    \u003cnil\u003e\n# deletion_time      n/a\n# destroyed          false\n# version            3\n# \n# ====== Data ======\n# Key         Value\n# ---         -----\n# bar         baz\n# passcode    my-long-passcode\n\n# get one field\nvault kv get -field=passcode secret/creds\n\n# my-long-passcode\nvault kv put -mount=secret creds bar=baz\n\n# set more keys\nvault kv put -mount=secret creds passcode=my-long-passcode bar=baz\n\n# \n# == Secret Path ==\n# secret/data/creds\n# \n# ======= Metadata =======\n# Key                Value\n# ---                -----\n# created_time       2023-11-05T03:24:14.65958906Z\n# custom_metadata    \u003cnil\u003e\n# deletion_time      n/a\n# destroyed          false\n# version            4\n\nvault kv get secret/creds\n\n# == Secret Path ==\n# secret/data/creds\n# \n# ======= Metadata =======\n# Key                Value\n# ---                -----\n# created_time       2023-11-05T02:53:40.978120001Z\n# custom_metadata    \u003cnil\u003e\n# deletion_time      n/a\n# destroyed          false\n# version            4\n# \n# ====== Data ======\n# Key         Value\n# ---         -----\n# bar         baz\n# passcode    my-long-passcode\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developer.hashicorp.com/vault/docs/commands/kv",
      "date_published": "2023-11-05T03:26:51Z",
      "date_modified": "2023-11-05T03:26:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cloudflare-cloudflared/",
      "url": "https://go.waylonwalker.com/cloudflare-cloudflared/",
      "title": "⭐ cloudflare cloudflared",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/cloudflare/cloudflared\" 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\"\u003ecloudflared\u003c/a\u003e by \u003ca href=\"https://github.com/cloudflare\" 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\"\u003ecloudflare\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCloudflare Tunnel client (formerly Argo Tunnel)\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [cloudflared](https://github.com/cloudflare/cloudflared) by [cloudflare](https://github.com/cloudflare).\n\nCloudflare Tunnel client (formerly Argo Tunnel)\n",
      "summary": "Looking for inspiration? cloudflared by cloudflare.",
      "date_published": "2023-11-04T00:23:59Z",
      "date_modified": "2023-11-04T00:23:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-vhs/",
      "url": "https://go.waylonwalker.com/charmbracelet-vhs/",
      "title": "⭐ charmbracelet vhs",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/charmbracelet/vhs\" 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\"\u003evhs\u003c/a\u003e by \u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eYour CLI home video recorder 📼\u003c/p\u003e\n",
      "content_text": "\nThe work on [vhs](https://github.com/charmbracelet/vhs) by [charmbracelet](https://github.com/charmbracelet).\n\nYour CLI home video recorder 📼\n",
      "summary": "The work on vhs by charmbracelet.",
      "date_published": "2023-11-03T11:45:12Z",
      "date_modified": "2023-11-03T11:45:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kanaries-rath/",
      "url": "https://go.waylonwalker.com/kanaries-rath/",
      "title": "⭐ Kanaries Rath",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Kanaries\" 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\"\u003eKanaries\u003c/a\u003e and their project \u003ca href=\"https://github.com/Kanaries/Rath\" 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\"\u003eRath\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNext generation of automated data exploratory analysis and visualization platform.\u003c/p\u003e\n",
      "content_text": "\nCheck out [Kanaries](https://github.com/Kanaries) and their project [Rath](https://github.com/Kanaries/Rath).\n\nNext generation of automated data exploratory analysis and visualization platform.\n",
      "summary": "Check out Kanaries and their project Rath.",
      "date_published": "2023-11-01T15:31:43Z",
      "date_modified": "2023-11-01T15:31:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ykhli-local-ai-stack/",
      "url": "https://go.waylonwalker.com/ykhli-local-ai-stack/",
      "title": "⭐ ykhli local-ai-stack",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ykhli/local-ai-stack\" 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\"\u003elocal-ai-stack\u003c/a\u003e by \u003ca href=\"https://github.com/ykhli\" 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\"\u003eykhli\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA starter kit to build \u003cem\u003elocal-only\u003c/em\u003e AI apps that cost $0 to run – starting with document Q\u0026amp;A. Written in Javascript\u003c/p\u003e\n",
      "content_text": "\nThe work on [local-ai-stack](https://github.com/ykhli/local-ai-stack) by [ykhli](https://github.com/ykhli).\n\nA starter kit to build *local-only* AI apps that cost $0 to run -- starting with document Q\u0026A. Written in Javascript\n",
      "summary": "The work on local-ai-stack by ykhli.",
      "date_published": "2023-11-01T11:40:40Z",
      "date_modified": "2023-11-01T11:40:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rajatomar788-pywebcopy/",
      "url": "https://go.waylonwalker.com/rajatomar788-pywebcopy/",
      "title": "⭐ rajatomar788 pywebcopy",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/rajatomar788/pywebcopy\" 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\"\u003epywebcopy\u003c/a\u003e from \u003ca href=\"https://github.com/rajatomar788\" 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\"\u003erajatomar788\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eLocally saves webpages to your hard disk with images, css, js \u0026amp; links as is.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pywebcopy](https://github.com/rajatomar788/pywebcopy) from [rajatomar788](https://github.com/rajatomar788).\n\nLocally saves webpages to your hard disk with images, css, js \u0026 links as is.\n",
      "summary": "I'm impressed by pywebcopy from rajatomar788.",
      "date_published": "2023-11-01T02:35:26Z",
      "date_modified": "2023-11-01T02:35:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-fem-htmx/",
      "url": "https://go.waylonwalker.com/theprimeagen-fem-htmx/",
      "title": "⭐ ThePrimeagen fem-htmx",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/ThePrimeagen/fem-htmx\" 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\"\u003efem-htmx\u003c/a\u003e from \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [fem-htmx](https://github.com/ThePrimeagen/fem-htmx) from [ThePrimeagen](https://github.com/ThePrimeagen).\n\nNo description available.\n",
      "summary": "I'm impressed by fem-htmx from ThePrimeagen.",
      "date_published": "2023-10-31T16:43:42Z",
      "date_modified": "2023-10-31T16:43:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-fem-htmx-proj/",
      "url": "https://go.waylonwalker.com/theprimeagen-fem-htmx-proj/",
      "title": "⭐ ThePrimeagen fem-htmx-proj",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/ThePrimeagen/fem-htmx-proj\" 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\"\u003efem-htmx-proj\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nJust starred [fem-htmx-proj](https://github.com/ThePrimeagen/fem-htmx-proj) by [ThePrimeagen](https://github.com/ThePrimeagen). It's an exciting project with a lot to offer.\n\nNo description available.\n",
      "summary": "Just starred fem-htmx-proj by ThePrimeagen. It's an exciting project with a lot to offer.",
      "date_published": "2023-10-31T16:43:29Z",
      "date_modified": "2023-10-31T16:43:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hynek-stamina/",
      "url": "https://go.waylonwalker.com/hynek-stamina/",
      "title": "⭐ hynek stamina",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/hynek/stamina\" 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\"\u003estamina\u003c/a\u003e from \u003ca href=\"https://github.com/hynek\" 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\"\u003ehynek\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eProduction-grade retries for Python\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [stamina](https://github.com/hynek/stamina) from [hynek](https://github.com/hynek).\n\nProduction-grade retries for Python\n",
      "summary": "I'm impressed by stamina from hynek.",
      "date_published": "2023-10-31T16:43:09Z",
      "date_modified": "2023-10-31T16:43:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-157/",
      "url": "https://go.waylonwalker.com/thought-157/",
      "title": "💭 johanhaleby/kubetail: Bash script to tail Kubernetes logs from...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/johanhaleby/kubetail\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/465b504347b3212688d07712076c0f5ca2dd765449157182a566ae652ad568b6/johanhaleby/kubetail\" alt=\"GitHub - johanhaleby/kubetail: Bash script to tail Kubernetes logs from multiple pods at the same time — Bash script to tail Kubernetes logs from multiple pods at the same time - johanhaleby/kubetail\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - johanhaleby/kubetail: Bash script to tail Kubernetes logs from multiple pods at the same time — Bash script to tail Kubernetes logs from multiple pods at the same time - johanhaleby/kubetail\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - johanhaleby/kubetail: Bash script to tail Kubernetes logs from multiple pods at the same time\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBash script to tail Kubernetes logs from multiple pods at the same time - johanhaleby/kubetail\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eKubetail is a pretty sick bash script that allows you to tail logs for multiple pods in one stream.  Very handy when you have more than one replica running.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://raw.githubusercontent.com/johanhaleby/kubetail/master/kubetail\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod u+x ./kubetail\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow with kubetail I can tail all the logs for every shot-wayl-one pod in the shot namespace.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./kubetail shot-wayl-one -n shot\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://screenshots.waylonwalker.com/kubetail.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://screenshots.waylonwalker.com/kubetail.png\" alt=\"output from running the kubetail command\"/ data-glightbox=\"description: output from running the kubetail command\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/johanhaleby/kubetail\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/465b504347b3212688d07712076c0f5ca2dd765449157182a566ae652ad568b6/johanhaleby/kubetail\" alt=\"GitHub - johanhaleby/kubetail: Bash script to tail Kubernetes logs from multiple pods at the same time — Bash script to tail Kubernetes logs from multiple pods at the same time - johanhaleby/kubetail\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - johanhaleby/kubetail: Bash script to tail Kubernetes logs from multiple pods at the same time\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBash script to tail Kubernetes logs from multiple pods at the same time - johanhaleby/kubetail\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nKubetail is a pretty sick bash script that allows you to tail logs for multiple pods in one stream.  Very handy when you have more than one replica running.\n\n``` bash\nwget https://raw.githubusercontent.com/johanhaleby/kubetail/master/kubetail\nchmod u+x ./kubetail\n```\n\nNow with kubetail I can tail all the logs for every shot-wayl-one pod in the shot namespace.\n\n``` bash\n./kubetail shot-wayl-one -n shot\n```\n\n![output from running the kubetail command](https://screenshots.waylonwalker.com/kubetail.png)\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/johanhaleby/kubetail",
      "date_published": "2023-10-31T01:04:16Z",
      "date_modified": "2023-10-31T01:04:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/johanhaleby-kubetail/",
      "url": "https://go.waylonwalker.com/johanhaleby-kubetail/",
      "title": "⭐ johanhaleby kubetail",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/johanhaleby/kubetail\" 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\"\u003ekubetail\u003c/a\u003e from \u003ca href=\"https://github.com/johanhaleby\" 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\"\u003ejohanhaleby\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBash script to tail Kubernetes logs from multiple pods at the same time\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [kubetail](https://github.com/johanhaleby/kubetail) from [johanhaleby](https://github.com/johanhaleby).\n\nBash script to tail Kubernetes logs from multiple pods at the same time\n",
      "summary": "I'm impressed by kubetail from johanhaleby.",
      "date_published": "2023-10-31T00:49:57Z",
      "date_modified": "2023-10-31T00:49:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-156/",
      "url": "https://go.waylonwalker.com/thought-156/",
      "title": "💭 Kubernetes Secrets in 5 Minutes! - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"cQAEK9PBY8U\" title=\"Kubernetes Secrets in 5 Minutes!\" playlabel=\"Play: Kubernetes Secrets in 5 Minutes!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI am converting my docker compose env secrets over to k8s secrets.  This guide was clear and to the point how I can replicate this exact workflow.\u003c/p\u003e\n\u003cp\u003eFirst set the secret, the easiest way is to use kubectl wtih –from-literal because it automatically base64 encodes for you.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl create secret generic minio-access-key --from-literal\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003eACCESS_KEY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e7FkTV**** -n shot\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you don’t use the \u003ccode\u003e--from-literal\u003c/code\u003e you will have to base64 encode it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;7FkTV****\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e openssl base64\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce you have your secret deployed, you have to update the container spec in your deployment manifest to get the valueFrom secretKeyRef.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eACCESS_KEY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003evalueFrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                \u003c/span\u003e\u003cspan class=\"nt\"\u003esecretKeyRef\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                  \u003c/span\u003e\u003cspan class=\"nt\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eACCESS_KEY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eminio-access-key\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSECRET_KEY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003evalueFrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                \u003c/span\u003e\u003cspan class=\"nt\"\u003esecretKeyRef\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                  \u003c/span\u003e\u003cspan class=\"nt\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSECRET_KEY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e                  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eminio-secret-key\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eregistry.wayl.one/shot-scraper-api\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eshot-wayl-one\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eports\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e- \u003cspan class=\"nt\"\u003econtainerPort\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e5000\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e              \u003c/span\u003e\u003cspan class=\"nt\"\u003eprotocol\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eTCP\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eresources\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e{}\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003erestartPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eAlways\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"cQAEK9PBY8U\" title=\"Kubernetes Secrets in 5 Minutes!\" playlabel=\"Play: Kubernetes Secrets in 5 Minutes!\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI am converting my docker compose env secrets over to k8s secrets.  This guide was clear and to the point how I can replicate this exact workflow.\n\nFirst set the secret, the easiest way is to use kubectl wtih --from-literal because it automatically base64 encodes for you.\n\n``` bash\nkubectl create secret generic minio-access-key --from-literal=ACCESS_KEY=7FkTV**** -n shot\n```\n\nIf you don't use the `--from-literal` you will have to base64 encode it.\n\n``` bash\necho \"7FkTV****\" | openssl base64\n```\n\nOnce you have your secret deployed, you have to update the container spec in your deployment manifest to get the valueFrom secretKeyRef.\n\n``` yaml\n    spec:\n      containers:\n        - env:\n            - name: ACCESS_KEY\n              valueFrom:\n                secretKeyRef:\n                  key: ACCESS_KEY\n                  name: minio-access-key\n            - name: SECRET_KEY\n              valueFrom:\n                secretKeyRef:\n                  key: SECRET_KEY\n                  name: minio-secret-key\n          image: registry.wayl.one/shot-scraper-api\n          name: shot-wayl-one\n          ports:\n            - containerPort: 5000\n              protocol: TCP\n          resources: {}\n      restartPolicy: Always\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=cQAEK9PBY8U\u0026t=186",
      "date_published": "2023-10-30T16:47:19Z",
      "date_modified": "2023-10-30T16:47:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infra",
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-155/",
      "url": "https://go.waylonwalker.com/thought-155/",
      "title": "💭 Waylon Walker 🐍 on X: \"Which is more complicated\" / X",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/_WaylonWalker/status/1718300097174270193\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWow, shocked at these results.  All this time I’ve been told and believed that k8s is incredibly hard, and you need a $1M problem before you think about it because it will take a $1M team to maintain it.  So far my experience has been good, and I definitely do not have a $1M problem in my \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.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/_WaylonWalker/status/1718300097174270193\"\u003e\u003cimg class=\"glightbox\" src=\"https://shots.wayl.one/shot/?url=https://twitter.com/_WaylonWalker/status/1718300097174270193\u0026amp;height=500\u0026amp;width=700\u0026amp;scaled_width=700\u0026amp;scaled_height=500\u0026amp;selectors=\" alt=\"screenshot of https://twitter.com/_WaylonWalker/status/1718300097174270193\"/ data-glightbox=\"description: screenshot of https://twitter.com/_WaylonWalker/status/1718300097174270193\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/_WaylonWalker/status/1718300097174270193\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWow, shocked at these results.  All this time I've been told and believed that k8s is incredibly hard, and you need a $1M problem before you think about it because it will take a $1M team to maintain it.  So far my experience has been good, and I definitely do not have a $1M problem in my homelab.\n\n[![screenshot of https://twitter.com/_WaylonWalker/status/1718300097174270193](https://shots.wayl.one/shot/?url=https://twitter.com/_WaylonWalker/status/1718300097174270193\u0026height=500\u0026width=700\u0026scaled_width=700\u0026scaled_height=500\u0026selectors=)](https://twitter.com/_WaylonWalker/status/1718300097174270193)\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/_WaylonWalker/status/1718300097174270193",
      "date_published": "2023-10-30T13:25:53Z",
      "date_modified": "2023-10-30T13:25:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infra",
        "k8s",
        "aws",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-154/",
      "url": "https://go.waylonwalker.com/thought-154/",
      "title": "💭 Wes Bos on X: \"🔥 The stale-while-revalidate header is suuuuuup...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/wesbos/status/1717923624559005977\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWes has some of the coolest \u003ca href=\"/og/\" class=\"glossary-term\" title=\"OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...\"\u003eOG\u003c/a\u003e images i’ve ever seen.  Here he talks about how to enable cache configuration so that its constantly updating the cache without the user waiting for the image to be created.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/wesbos/status/1717923624559005977\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWes has some of the coolest OG images i've ever seen.  Here he talks about how to enable cache configuration so that its constantly updating the cache without the user waiting for the image to be created.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/wesbos/status/1717923624559005977",
      "date_published": "2023-10-28T14:29:59Z",
      "date_modified": "2023-10-28T14:29:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "seo",
        "og",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ecthelionvi-neocomposer-nvim/",
      "url": "https://go.waylonwalker.com/ecthelionvi-neocomposer-nvim/",
      "title": "⭐ ecthelionvi NeoComposer.nvim",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/ecthelionvi/NeoComposer.nvim\" 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\"\u003eNeoComposer.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/ecthelionvi\" 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\"\u003eecthelionvi\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNeovim plugin that simplifies macros, enhancing productivity with harmony.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [NeoComposer.nvim](https://github.com/ecthelionvi/NeoComposer.nvim) by [ecthelionvi](https://github.com/ecthelionvi).\n\nNeovim plugin that simplifies macros, enhancing productivity with harmony.\n",
      "summary": "Looking for inspiration? NeoComposer.nvim by ecthelionvi.",
      "date_published": "2023-10-28T04:41:41Z",
      "date_modified": "2023-10-28T04:41:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-153/",
      "url": "https://go.waylonwalker.com/thought-153/",
      "title": "💭 \u003c/\u003e htmx ~ Locality of Behaviour (LoB)",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/essays/locality-of-behaviour/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ Locality of Behaviour (LoB)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCarson Gross explores the Locality of Behaviour (LoB) principle, which emphasizes making the behavior of code units obvious on inspection to enhance maintainability. He discusses the tradeoffs betw...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eInteresting principle here.  What a great example, If I’m looking at the second jQuery example, I have to dig into dev tools or make some assumtions that this team uses jQuery, and selects by id, therefore I can grep for \u003ccode\u003e$(\u0026#34;#d1\u0026#34;)\u003c/code\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eConsider two different implementations of an AJAX request in \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, the first in \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre\u003e\u003ccode class=\"language-heml\"\u003e\u0026lt;button hx-get=\u0026#34;/clicked\u0026#34;\u0026gt;Click Me\u0026lt;/button\u0026gt;\n\n\n\u0026gt; and the second in jQuery:\n\n``` js\n  $(\u0026#34;#d1\u0026#34;).on(\u0026#34;click\u0026#34;, function(){\n    $.ajax({\n         /* AJAX options... */\n    });\n  });\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;d1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003eClick Me\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/essays/locality-of-behaviour/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ Locality of Behaviour (LoB)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCarson Gross explores the Locality of Behaviour (LoB) principle, which emphasizes making the behavior of code units obvious on inspection to enhance maintainability. He discusses the tradeoffs betw...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nInteresting principle here.  What a great example, If I'm looking at the second jQuery example, I have to dig into dev tools or make some assumtions that this team uses jQuery, and selects by id, therefore I can grep for `$(\"#d1\")`.\n\n\u003e Consider two different implementations of an AJAX request in HTML, the first in htmx:\n``` heml\n\u003cbutton hx-get=\"/clicked\"\u003eClick Me\u003c/button\u003e\n\n\n\u003e and the second in jQuery:\n\n``` js\n  $(\"#d1\").on(\"click\", function(){\n    $.ajax({\n         /* AJAX options... */\n    });\n  });\n```\n``` html\n\u003cbutton id=\"d1\"\u003eClick Me\u003c/button\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/essays/locality-of-behaviour/",
      "date_published": "2023-10-28T01:11:56Z",
      "date_modified": "2023-10-28T01:11:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-152/",
      "url": "https://go.waylonwalker.com/thought-152/",
      "title": "💭 Creating k8s jobs with python",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post-og/152\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" 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\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI was looking to add running kubernetes jobs to a python cli I am creating, and I found this solution, mostly thanks to \u003ccode\u003eollama run mistral:7b-instruct-q4_K_M \u003c/code\u003e and my loose understanding of what the yaml syntax is supposed to look like for a kubernetes job.  This will let me create a job in the cluster, choose the image that runs, the command that is called, and how long until the job expires and is cleaned up.  While the job still exists I can go in and look at the logs, but once its ttl has expired they are gone.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ekubernetes\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Load the default kubeconfig\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload_kube_config\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Define the API client for batch jobs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapi_instance\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBatchV1Api\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a new job object\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ejob\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1Job\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapi_version\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;batch/v1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ekind\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Job\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emetadata\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1ObjectMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;myjob\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003espec\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1JobSpec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ettl_seconds_after_finished\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1PodTemplateSpec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003emetadata\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1ObjectMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003elabels\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;app\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;myjob\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003espec\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1PodSpec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003econtainers\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eV1Container\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;myjobcontainer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;busybox\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003ecommand\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ls\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003erestart_policy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Never\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ebackoff_limit\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Call the Kubernetes API to create the job\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapi_instance\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate_namespaced_job\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enamespace\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;default\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebody\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ejob\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://thoughts.waylonwalker.com/post-og/152\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ethoughts.waylonwalker.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI was looking to add running kubernetes jobs to a python cli I am creating, and I found this solution, mostly thanks to `ollama run mistral:7b-instruct-q4_K_M ` and my loose understanding of what the yaml syntax is supposed to look like for a kubernetes job.  This will let me create a job in the cluster, choose the image that runs, the command that is called, and how long until the job expires and is cleaned up.  While the job still exists I can go in and look at the logs, but once its ttl has expired they are gone.\n\n\n``` python\nfrom kubernetes import client, config\n\n# Load the default kubeconfig\nconfig.load_kube_config()\n\n# Define the API client for batch jobs\napi_instance = client.BatchV1Api()\n\n# Create a new job object\njob = client.V1Job(\n    api_version=\"batch/v1\",\n    kind=\"Job\",\n    metadata=client.V1ObjectMeta(name=\"myjob\"),\n    spec=client.V1JobSpec(\n        ttl_seconds_after_finished=100,\n        template=client.V1PodTemplateSpec(\n            metadata=client.V1ObjectMeta(labels={\"app\": \"myjob\"}),\n            spec=client.V1PodSpec(\n                containers=[\n                    client.V1Container(\n                        name=\"myjobcontainer\",\n                        image=\"busybox\",\n                        command=[\"ls\", \"/\"],\n                    ),\n                ],\n                restart_policy=\"Never\",\n            ),\n        ),\n        backoff_limit=1,\n    ),\n)\n\n# Call the Kubernetes API to create the job\napi_instance.create_namespaced_job(namespace=\"default\", body=job)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://thoughts.waylonwalker.com/post-og/152",
      "date_published": "2023-10-28T00:52:24Z",
      "date_modified": "2023-10-28T00:52:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kevinhwang91-nvim-ufo/",
      "url": "https://go.waylonwalker.com/kevinhwang91-nvim-ufo/",
      "title": "⭐ kevinhwang91 nvim-ufo",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/kevinhwang91\" 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\"\u003ekevinhwang91\u003c/a\u003e and their project \u003ca href=\"https://github.com/kevinhwang91/nvim-ufo\" 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\"\u003envim-ufo\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNot UFO in the sky, but an ultra fold in Neovim.\u003c/p\u003e\n",
      "content_text": "\nCheck out [kevinhwang91](https://github.com/kevinhwang91) and their project [nvim-ufo](https://github.com/kevinhwang91/nvim-ufo).\n\nNot UFO in the sky, but an ultra fold in Neovim.\n",
      "summary": "Check out kevinhwang91 and their project nvim-ufo.",
      "date_published": "2023-10-25T21:24:01Z",
      "date_modified": "2023-10-25T21:24:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-151/",
      "url": "https://go.waylonwalker.com/thought-151/",
      "title": "💭 Diagnostic - Neovim docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://neovim.io/doc/user/diagnostic.html#vim.diagnostic.reset()\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/neovim.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/neovim.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehttps://neovim.io/doc/user/diagnostic/\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eneovim.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eClear out lsp diagnostics in nvim.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elua\u003c/span\u003e \u003cspan class=\"n\"\u003evim.diagnostic\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereset\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://neovim.io/doc/user/diagnostic.html#vim.diagnostic.reset()\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehttps://neovim.io/doc/user/diagnostic/\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eneovim.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nClear out lsp diagnostics in nvim.\n\n\n``` lua\nlua vim.diagnostic.reset()\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://neovim.io/doc/user/diagnostic.html#vim.diagnostic.reset()",
      "date_published": "2023-10-25T14:01:06Z",
      "date_modified": "2023-10-25T14:01:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-149/",
      "url": "https://go.waylonwalker.com/thought-149/",
      "title": "💭 How to kill process based on the port number in Linux - Linux ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://linuxconfig.org/how-to-kill-process-based-on-the-port-number-in-linux\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://linuxconfig.org/wp-content/uploads/2022/08/00-how-to-kill-process-based-on-the-port-number-in-linux.png\" alt=\"How to kill process based on the port number in Linux — Learn to kill a process by port in Linux using fuser, lsof, and ss commands. Essential for system admins managing network processes efficiently.\" loading=\"lazy\"/ data-glightbox=\"description: How to kill process based on the port number in Linux — Learn to kill a process by port in Linux using fuser, lsof, and ss commands. Essential for system admins managing network processes efficiently.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to kill process based on the port number in Linux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLearn to kill a process by port in Linux using fuser, lsof, and ss commands. Essential for system admins managing network processes efficiently.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLinuxConfig · linuxconfig.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI’ve often struggled to find and kill a process using a certain port on archlinux.  Mainly becuase most guides use netstat rather than \u003ccode\u003ess\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eHere is how I just killed the process using port 5000 using \u003ccode\u003efuser\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo fuser -k 5000/tcp\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can also get information about the process by running \u003ccode\u003elsof\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ lsof -i :5000\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCOMMAND      PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ethoughts \u003cspan class=\"m\"\u003e1058292\u003c/span\u003e waylon   11u  IPv4 \u003cspan class=\"m\"\u003e119622828\u003c/span\u003e      0t0  TCP *:commplex-main \u003cspan class=\"o\"\u003e(\u003c/span\u003eLISTEN\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://linuxconfig.org/how-to-kill-process-based-on-the-port-number-in-linux\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://linuxconfig.org/wp-content/uploads/2022/08/00-how-to-kill-process-based-on-the-port-number-in-linux.png\" alt=\"How to kill process based on the port number in Linux — Learn to kill a process by port in Linux using fuser, lsof, and ss commands. Essential for system admins managing network processes efficiently.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to kill process based on the port number in Linux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLearn to kill a process by port in Linux using fuser, lsof, and ss commands. Essential for system admins managing network processes efficiently.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eLinuxConfig \u0026middot; linuxconfig.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI've often struggled to find and kill a process using a certain port on archlinux.  Mainly becuase most guides use netstat rather than `ss`.\n\n\nHere is how I just killed the process using port 5000 using `fuser`.\n\n``` bash\nsudo fuser -k 5000/tcp\n```\n\nYou can also get information about the process by running `lsof`\n\n\n``` bash\n❯ lsof -i :5000\nCOMMAND      PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME\nthoughts 1058292 waylon   11u  IPv4 119622828      0t0  TCP *:commplex-main (LISTEN)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://linuxconfig.org/how-to-kill-process-based-on-the-port-number-in-linux",
      "date_published": "2023-10-23T15:15:02Z",
      "date_modified": "2023-10-23T15:15:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "arch",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-148/",
      "url": "https://go.waylonwalker.com/thought-148/",
      "title": "💭 mkimuram/k8sviz: Generate Kubernetes architecture diagrams fro...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/mkimuram/k8sviz\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/c7b91b2f214336d82d412b49698fe3ec0f50390d9b6fb36492860b23249ec5ca/mkimuram/k8sviz\" alt=\"GitHub - mkimuram/k8sviz: Generate Kubernetes architecture diagrams from the actual state in a namespace — Generate Kubernetes architecture diagrams from the actual state in a namespace - mkimuram/k8sviz\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - mkimuram/k8sviz: Generate Kubernetes architecture diagrams from the actual state in a namespace — Generate Kubernetes architecture diagrams from the actual state in a namespace - mkimuram/k8sviz\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - mkimuram/k8sviz: Generate Kubernetes architecture diagrams from the actual state in a namespace\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGenerate Kubernetes architecture diagrams from the actual state in a namespace - mkimuram/k8sviz\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a sick kubernetes architecture diagran generation tool.\u003c/p\u003e\n\u003cp\u003eHere is an example\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://raw.githubusercontent.com/mkimuram/k8sviz/master/examples/wordpress/default.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://raw.githubusercontent.com/mkimuram/k8sviz/master/examples/wordpress/default.png\" alt=\"an example output from k8sviz\"/ data-glightbox=\"description: an example output from k8sviz\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"installation\"\u003einstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ curl -LO https://raw.githubusercontent.com/mkimuram/k8sviz/master/k8sviz.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ chmod u+x k8sviz.sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"usage\"\u003eUsage \u003ca href=\"#usage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./k8sviz.sh --kubeconfig ~/.config/kube/falcon-k3s.yaml -t png -o k8sviz.png\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/mkimuram/k8sviz\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/c7b91b2f214336d82d412b49698fe3ec0f50390d9b6fb36492860b23249ec5ca/mkimuram/k8sviz\" alt=\"GitHub - mkimuram/k8sviz: Generate Kubernetes architecture diagrams from the actual state in a namespace — Generate Kubernetes architecture diagrams from the actual state in a namespace - mkimuram/k8sviz\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - mkimuram/k8sviz: Generate Kubernetes architecture diagrams from the actual state in a namespace\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGenerate Kubernetes architecture diagrams from the actual state in a namespace - mkimuram/k8sviz\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a sick kubernetes architecture diagran generation tool.\n\nHere is an example\n\n![an example output from k8sviz](https://raw.githubusercontent.com/mkimuram/k8sviz/master/examples/wordpress/default.png)\n\n\n## installation\n\n``` bash\n$ curl -LO https://raw.githubusercontent.com/mkimuram/k8sviz/master/k8sviz.sh\n$ chmod u+x k8sviz.sh\n```\n### Usage\n\n``` bash\n./k8sviz.sh --kubeconfig ~/.config/kube/falcon-k3s.yaml -t png -o k8sviz.png\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/mkimuram/k8sviz",
      "date_published": "2023-10-22T21:07:26Z",
      "date_modified": "2023-10-22T21:07:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k8s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/casey-just/",
      "url": "https://go.waylonwalker.com/casey-just/",
      "title": "⭐ casey just",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/casey/just\" 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\"\u003ejust\u003c/a\u003e by \u003ca href=\"https://github.com/casey\" 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\"\u003ecasey\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003e🤖 Just a command runner\u003c/p\u003e\n",
      "content_text": "\nJust starred [just](https://github.com/casey/just) by [casey](https://github.com/casey). It's an exciting project with a lot to offer.\n\n🤖 Just a command runner\n",
      "summary": "Just starred just by casey. It's an exciting project with a lot to offer.",
      "date_published": "2023-10-22T16:07:03Z",
      "date_modified": "2023-10-22T16:07:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-147/",
      "url": "https://go.waylonwalker.com/thought-147/",
      "title": "💭 casey/just: 🤖 Just a command runner",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/casey/just\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/02aad539d7a99bb629a08a7d76bb8271f8ad6f0467d84a4f38a956f54e5021cd/casey/just\" alt=\"GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - casey/just: 🤖 Just a command runner\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI think just, might just be the thing I have been looking for.  I’ve been looking for some ci/cd that I can host myself, but everything looks pretty big, so for now I am going to use just as my task runner.\u003c/p\u003e\n\u003cp\u003eI installed with installer.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.wayl.one/casey/just \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI set up my devtainer builds with just.  Here is my \u003ccode\u003ejustfile\u003c/code\u003e, yes you just need the cli and a file named \u003ccode\u003ejustfile\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebase alpine slim\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ebase\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebuild deploy\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ealpine\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebuild-alpine deploy-alpine\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eslim\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebuild-slim deploy-slim\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ebuild\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"l\"\u003epodman build -t registry.wayl.one/devtainer:latest .\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edeploy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"l\"\u003epodman push registry.wayl.one/devtainer\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ebuild-alpine\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"l\"\u003epodman build -f docker/Dockerfile.alpine -t registry.wayl.one/devtainer:alpine .\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edeploy-alpine\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"l\"\u003epodman push registry.wayl.one/devtainer:alpine\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ebuild-slim\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"l\"\u003epodman build -f docker/Dockerfile.slim -t registry.wayl.one/devtainer:slim .\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edeploy-slim\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"l\"\u003epodman push registry.wayl.one/devtainer:slim\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/casey/just\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/02aad539d7a99bb629a08a7d76bb8271f8ad6f0467d84a4f38a956f54e5021cd/casey/just\" alt=\"GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - casey/just: 🤖 Just a command runner\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI think just, might just be the thing I have been looking for.  I've been looking for some ci/cd that I can host myself, but everything looks pretty big, so for now I am going to use just as my task runner.\n\n\nI installed with installer.\n\n``` bash\ncurl https://i.wayl.one/casey/just | bash\n```\n\nI set up my devtainer builds with just.  Here is my `justfile`, yes you just need the cli and a file named `justfile`.\n\n``` yaml\ndefault: base alpine slim\nbase: build deploy\nalpine: build-alpine deploy-alpine\nslim: build-slim deploy-slim\n\nbuild:\n    podman build -t registry.wayl.one/devtainer:latest .\ndeploy:\n    podman push registry.wayl.one/devtainer\n\nbuild-alpine:\n    podman build -f docker/Dockerfile.alpine -t registry.wayl.one/devtainer:alpine .\ndeploy-alpine:\n    podman push registry.wayl.one/devtainer:alpine\n\nbuild-slim:\n    podman build -f docker/Dockerfile.slim -t registry.wayl.one/devtainer:slim .\ndeploy-slim:\n    podman push registry.wayl.one/devtainer:slim\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/casey/just",
      "date_published": "2023-10-22T02:09:57Z",
      "date_modified": "2023-10-22T02:09:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "dev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-146/",
      "url": "https://go.waylonwalker.com/thought-146/",
      "title": "💭 Translate a Docker Compose File to Kubernetes Resources | Kube...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"/images/kubernetes-open-graph.png\" alt=\"Translate a Docker Compose File to Kubernetes Resources — What\" loading=\"lazy\"/ data-glightbox=\"description: Translate a Docker Compose File to Kubernetes Resources — What\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTranslate a Docker Compose File to Kubernetes Resources\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhat\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKubernetes · kubernetes.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode\u003ekompose\u003c/code\u003e is a sick cli to convert docker-compose.yml to kubernetes manifest.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekompose convert\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekompose convert -o deployment.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/images/kubernetes-open-graph.png\" alt=\"Translate a Docker Compose File to Kubernetes Resources — What\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTranslate a Docker Compose File to Kubernetes Resources\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhat\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eKubernetes \u0026middot; kubernetes.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n`kompose` is a sick cli to convert docker-compose.yml to kubernetes manifest.\n\n``` bash\n# install\n\ncurl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose\n\nkompose convert\nkompose convert -o deployment.yaml\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/",
      "date_published": "2023-10-22T02:04:18Z",
      "date_modified": "2023-10-22T02:04:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-145/",
      "url": "https://go.waylonwalker.com/thought-145/",
      "title": "💭 Daniel Nashed's Blog",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm\" alt=\"https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm\"/ data-glightbox=\"description: https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eRunning your own docker registry in one line\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epodman run -d -p 5000:5000 --restart\u003cspan class=\"o\"\u003e=\u003c/span\u003ealways --name registry registry:latest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm](/static/https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm)\n\nRunning your own docker registry in one line\n\n\n``` bash\npodman run -d -p 5000:5000 --restart=always --name registry registry:latest\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.nashcom.de/nashcomblog.nsf/dx/k3s-podman-and-a-registry.htm",
      "date_published": "2023-10-21T01:49:41Z",
      "date_modified": "2023-10-21T01:49:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "containers",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-144/",
      "url": "https://go.waylonwalker.com/thought-144/",
      "title": "💭 Kubernetes Persistent Volumes with Deployment and StatefulSet",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://akomljen.com/kubernetes-persistent-volumes-with-deployment-and-statefulset/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://akomljen.com/content/images/2018/04/kubernetes_persistent_volume.jpg\" alt=\"Kubernetes Persistent Volumes with Deployment and StatefulSet — How to use Kubernetes persistent volumes with deployment and stateful set and also when you should use one or another.\" loading=\"lazy\"/ data-glightbox=\"description: Kubernetes Persistent Volumes with Deployment and StatefulSet — How to use Kubernetes persistent volumes with deployment and stateful set and also when you should use one or another.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKubernetes Persistent Volumes with Deployment and StatefulSet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to use Kubernetes persistent volumes with deployment and stateful set and also when you should use one or another.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eAlen Komljen · akomljen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eExample of how to add a pvc to a deployment.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://akomljen.com/kubernetes-persistent-volumes-with-deployment-and-statefulset/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://akomljen.com/content/images/2018/04/kubernetes_persistent_volume.jpg\" alt=\"Kubernetes Persistent Volumes with Deployment and StatefulSet — How to use Kubernetes persistent volumes with deployment and stateful set and also when you should use one or another.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eKubernetes Persistent Volumes with Deployment and StatefulSet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to use Kubernetes persistent volumes with deployment and stateful set and also when you should use one or another.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eAlen Komljen \u0026middot; akomljen.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nExample of how to add a pvc to a deployment.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://akomljen.com/kubernetes-persistent-volumes-with-deployment-and-statefulset/",
      "date_published": "2023-10-21T01:47:58Z",
      "date_modified": "2023-10-21T01:47:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-143/",
      "url": "https://go.waylonwalker.com/thought-143/",
      "title": "💭 Inspect a Kubernetes PersistentVolumeClaim | Frank Sauerburger",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html\" alt=\"https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html\"/ data-glightbox=\"description: https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI was curious to see what was going on inside of my minio object storage. Great technique here by Frank to create an inspector pod, then you can do as you wish with the data.\u003c/p\u003e\n\u003cp\u003eI created the manifest as \u003ccode\u003epvc-inspector.yml\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eapiVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ev1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekind\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ePod\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epvc-inspector\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003espec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebusybox\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epvc-inspector\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ecommand\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;tail\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;-f\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/dev/null\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumeMounts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003emountPath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/pvc\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epvc-mount\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epvc-mount\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epersistentVolumeClaim\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eclaimName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epvc-name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen used it like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# create pvc-inspector pod\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl apply -f pvc-inspector.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# exec into inspector\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl \u003cspan class=\"nb\"\u003eexec\u003c/span\u003e -it pvc-inspector -- sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# explore data\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003els /pvc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# cleanup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl delete -f pvc-inspector.yml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html](/static/https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html)\n\nI was curious to see what was going on inside of my minio object storage. Great technique here by Frank to create an inspector pod, then you can do as you wish with the data.\n\nI created the manifest as `pvc-inspector.yml`\n\n``` yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: pvc-inspector\nspec:\n  containers:\n  - image: busybox\n    name: pvc-inspector\n    command: [\"tail\"]\n    args: [\"-f\", \"/dev/null\"]\n    volumeMounts:\n    - mountPath: /pvc\n      name: pvc-mount\n  volumes:\n  - name: pvc-mount\n    persistentVolumeClaim:\n      claimName: pvc-name\n```\n\nThen used it like this.\n\n``` bash\n# create pvc-inspector pod\nkubectl apply -f pvc-inspector.yml\n# exec into inspector\nkubectl exec -it pvc-inspector -- sh\n# explore data\nls /pvc\n# cleanup\nkubectl delete -f pvc-inspector.yml\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://frank.sauerburger.io/2021/12/01/inspect-k8s-pvc.html",
      "date_published": "2023-10-21T01:34:08Z",
      "date_modified": "2023-10-21T01:34:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-142/",
      "url": "https://go.waylonwalker.com/thought-142/",
      "title": "💭 Can't create Secret in Kubernetes: illegal base64 data at inpu...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/53394973/cant-create-secret-in-kubernetes-illegal-base64-data-at-input\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIn order to use k8s secrets manifest you first need to encode the data values.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s1\"\u003e\u0026#39;mega_secret_key\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e openssl base64\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/53394973/cant-create-secret-in-kubernetes-illegal-base64-data-at-input\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIn order to use k8s secrets manifest you first need to encode the data values.\n\n``` bash\necho -n 'mega_secret_key' | openssl base64\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/53394973/cant-create-secret-in-kubernetes-illegal-base64-data-at-input",
      "date_published": "2023-10-21T00:49:39Z",
      "date_modified": "2023-10-21T00:49:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-141/",
      "url": "https://go.waylonwalker.com/thought-141/",
      "title": "💭 Can I access k3s using just kubectl (no sudo and no k3s comman...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/kubernetes/comments/cojjf5/can_i_access_k3s_using_just_kubectl_no_sudo_and/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.reddit.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.reddit.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCan I access k3s using just kubectl (no sudo and no k3s command)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCan I access k3s using just kubectl (no sudo and no k3s command)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit · reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eRight after installing k3s you are going to need to use \u003ccode\u003esudo\u003c/code\u003e to use any \u003ccode\u003ekubectl\u003c/code\u003e command.  The reason for this is that the default config is owned by root.  To get around this you will need to make your own config and set the \u003ccode\u003eKUBECONFIG\u003c/code\u003e environment variable\u003c/p\u003e\n\u003cp\u003eTo do this I used \u003ccode\u003esudo\u003c/code\u003e one last time to copy the \u003ccode\u003ek3s.yaml\u003c/code\u003e file into my own directory and take ownership of it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo cp /etc/rancher/k3s/k3s.yaml /home/waylon/.config/kube\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chown -R waylon:waylon ~/.config/kube\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eKUBECONFIG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e~/.config/kube/k3s.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-reddit\"\u003e\n  \u003ca href=\"https://www.reddit.com/r/kubernetes/comments/cojjf5/can_i_access_k3s_using_just_kubectl_no_sudo_and/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCan I access k3s using just kubectl (no sudo and no k3s command)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCan I access k3s using just kubectl (no sudo and no k3s command)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReddit \u0026middot; reddit.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nRight after installing k3s you are going to need to use `sudo` to use any `kubectl` command.  The reason for this is that the default config is owned by root.  To get around this you will need to make your own config and set the `KUBECONFIG` environment variable\n\nTo do this I used `sudo` one last time to copy the `k3s.yaml` file into my own directory and take ownership of it.\n\n``` bash\nsudo cp /etc/rancher/k3s/k3s.yaml /home/waylon/.config/kube\n\nsudo chown -R waylon:waylon ~/.config/kube\n\nexport KUBECONFIG=~/.config/kube/k3s.yaml\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.reddit.com/r/kubernetes/comments/cojjf5/can_access_using_kubectl_sudo_and/",
      "date_published": "2023-10-20T22:52:00Z",
      "date_modified": "2023-10-20T22:52:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-140/",
      "url": "https://go.waylonwalker.com/thought-140/",
      "title": "💭 Quick-Start Guide | K3s",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.k3s.io/quick-start\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.k3s.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.k3s.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQuick-Start Guide | K3s\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis guide will help you quickly launch a cluster with default options. Make sure your nodes meet the requirements before proceeding.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.k3s.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI recently spun up k3s in my \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.  I’m trying to offload some work off of my free tier fly.io app in order to keep it free tier without crashing.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install and start k3s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -sfL https://get.k3s.io \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh -\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# check to see if your nodes are started\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo kubectl get nodes\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eMy main hiccup so far was the machine I am running on runs zfs on root, and it would not start the master node.  Rather than figuring out how to make zfs play nice I just pointed k3s to a drive that is not zfs.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# manuallly\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo k3s server -d /mnt/vault/.rancher/k3s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# without editing systemd service\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo ln -s /mnt/vault/.rancher/k3s /var/lib/rancher/k3s\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.k3s.io/quick-start\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eQuick-Start Guide | K3s\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis guide will help you quickly launch a cluster with default options. Make sure your nodes meet the requirements before proceeding.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.k3s.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI recently spun up k3s in my homelab.  I'm trying to offload some work off of my free tier fly.io app in order to keep it free tier without crashing.\n\n\n``` bash\n# install and start k3s\ncurl -sfL https://get.k3s.io | sh -\n# check to see if your nodes are started\nsudo kubectl get nodes\n```\n\nMy main hiccup so far was the machine I am running on runs zfs on root, and it would not start the master node.  Rather than figuring out how to make zfs play nice I just pointed k3s to a drive that is not zfs.\n\n``` bash\n# manuallly\nsudo k3s server -d /mnt/vault/.rancher/k3s\n# without editing systemd service\nsudo ln -s /mnt/vault/.rancher/k3s /var/lib/rancher/k3s\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.k3s.io/quick-start",
      "date_published": "2023-10-20T21:32:03Z",
      "date_modified": "2023-10-20T21:32:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "k3s",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/djmaze-docker-caching-proxy/",
      "url": "https://go.waylonwalker.com/djmaze-docker-caching-proxy/",
      "title": "⭐ djmaze docker-caching-proxy",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/djmaze\" 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\"\u003edjmaze\u003c/a\u003e and their project \u003ca href=\"https://github.com/djmaze/docker-caching-proxy\" 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\"\u003edocker-caching-proxy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCaching proxy docker image\u003c/p\u003e\n",
      "content_text": "\nCheck out [djmaze](https://github.com/djmaze) and their project [docker-caching-proxy](https://github.com/djmaze/docker-caching-proxy).\n\nCaching proxy docker image\n",
      "summary": "Check out djmaze and their project docker-caching-proxy.",
      "date_published": "2023-10-20T03:47:56Z",
      "date_modified": "2023-10-20T03:47:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-139/",
      "url": "https://go.waylonwalker.com/thought-139/",
      "title": "💭 Tailwind Connect 2023 — Keynote - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"CLkxRnRQtDE\" title=\"Tailwind Connect 2023 — Keynote\" playlabel=\"Play: Tailwind Connect 2023 — Keynote\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eTailwind comes with \u003ccode\u003espace\u003c/code\u003e that I have never heard of that is made to give margin and padding together in one class.  Adam dropped it here in the Tailwind Connect conference.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"CLkxRnRQtDE\" title=\"Tailwind Connect 2023 — Keynote\" playlabel=\"Play: Tailwind Connect 2023 — Keynote\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nTailwind comes with `space` that I have never heard of that is made to give margin and padding together in one class.  Adam dropped it here in the Tailwind Connect conference.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=CLkxRnRQtDE",
      "date_published": "2023-10-19T13:41:24Z",
      "date_modified": "2023-10-19T13:41:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "tailwind",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ggozad-oterm/",
      "url": "https://go.waylonwalker.com/ggozad-oterm/",
      "title": "⭐ ggozad oterm",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/ggozad/oterm\" 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\"\u003eoterm\u003c/a\u003e by \u003ca href=\"https://github.com/ggozad\" 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\"\u003eggozad\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ea text-based terminal client for Ollama\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [oterm](https://github.com/ggozad/oterm) by [ggozad](https://github.com/ggozad).\n\na text-based terminal client for Ollama\n",
      "summary": "Looking for inspiration? oterm by ggozad.",
      "date_published": "2023-10-18T15:31:57Z",
      "date_modified": "2023-10-18T15:31:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-138/",
      "url": "https://go.waylonwalker.com/thought-138/",
      "title": "💭 Episode #433 Litestar: Effortlessly Build Performant APIs - [T...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://talkpython.fm/episodes/show/433/litestar-effortlessly-build-performant-apis\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn-podcast.talkpython.fm/episodes/youtube_image/8gnB4ToIkQg/litestar-effortlessly-build-performant-apis.jpg?v=1\" alt=\"Litestar: Effortlessly Build Performant APIs — We all know about Flask and Django. And of course FastAPI made a huge splash when it came on the scene a few years ago. But new web frameworks are being created all the time. And they have these earlier frameworks to borrow from as well. On this episode we dive into a new framework gaining a lot of traction called Litestar. Will it be the foundation of your next project? Join me as I get to know Litestar with its maintainers: Jacob Coffee, Janek Nouvertné, and Cody Fincher.\" loading=\"lazy\"/ data-glightbox=\"description: Litestar: Effortlessly Build Performant APIs — We all know about Flask and Django. And of course FastAPI made a huge splash when it came on the scene a few years ago. But new web frameworks are being created all the time. And they have these earlier frameworks to borrow from as well. On this episode we dive into a new framework gaining a lot of traction called Litestar. Will it be the foundation of your next project? Join me as I get to know Litestar with its maintainers: Jacob Coffee, Janek Nouvertné, and Cody Fincher.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLitestar: Effortlessly Build Performant APIs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe all know about Flask and Django. And of course FastAPI made a huge splash when it came on the scene a few years ago. But new web frameworks are being created all the time. And they have these ea...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etalkpython.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eLitestar is an interesting api framework similar to fastpi, that I am interested to check out to see if it fits into some project scope.  It sounds like it comes with a lot more batteries included for things like auth, but does not have hard opinions like django.  At this point I’m not jumping off of \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, but its something I want to try.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://talkpython.fm/episodes/show/433/litestar-effortlessly-build-performant-apis\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn-podcast.talkpython.fm/episodes/youtube_image/8gnB4ToIkQg/litestar-effortlessly-build-performant-apis.jpg?v=1\" alt=\"Litestar: Effortlessly Build Performant APIs — We all know about Flask and Django. And of course FastAPI made a huge splash when it came on the scene a few years ago. But new web frameworks are being created all the time. And they have these earlier frameworks to borrow from as well. On this episode we dive into a new framework gaining a lot of traction called Litestar. Will it be the foundation of your next project? Join me as I get to know Litestar with its maintainers: Jacob Coffee, Janek Nouvertné, and Cody Fincher.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLitestar: Effortlessly Build Performant APIs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe all know about Flask and Django. And of course FastAPI made a huge splash when it came on the scene a few years ago. But new web frameworks are being created all the time. And they have these ea...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etalkpython.fm\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLitestar is an interesting api framework similar to fastpi, that I am interested to check out to see if it fits into some project scope.  It sounds like it comes with a lot more batteries included for things like auth, but does not have hard opinions like django.  At this point I'm not jumping off of fastapi, but its something I want to try.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://talkpython.fm/episodes/show/433/litestar-effortlessly-build-performant-apis",
      "date_published": "2023-10-17T18:45:08Z",
      "date_modified": "2023-10-17T18:45:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-137/",
      "url": "https://go.waylonwalker.com/thought-137/",
      "title": "💭 Delete a Postgres Cluster · Fly Docs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fly.io/docs/postgres/managing/deleting/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://og-images.fly.dev/image?template=light\u0026amp;text=Delete+a+Postgres+Cluster\" alt=\"Delete a Postgres Cluster — Documentation and guides from the team at Fly.io.\" loading=\"lazy\"/ data-glightbox=\"description: Delete a Postgres Cluster — Documentation and guides from the team at Fly.io.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDelete a Postgres Cluster\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation and guides from the team at Fly.io.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFly · fly.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDeleting a fly postgres db cluster was not straightforward to me as the app name is not inferred from the toml like it is for the main app.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efly apps destroy \u0026lt;pg-app-name\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efly pg db list -a \u0026lt;pg-app-name\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fly.io/docs/postgres/managing/deleting/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://og-images.fly.dev/image?template=light\u0026amp;text=Delete+a+Postgres+Cluster\" alt=\"Delete a Postgres Cluster — Documentation and guides from the team at Fly.io.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDelete a Postgres Cluster\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation and guides from the team at Fly.io.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFly \u0026middot; fly.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDeleting a fly postgres db cluster was not straightforward to me as the app name is not inferred from the toml like it is for the main app.\n\n\n``` bash\nfly apps destroy \u003cpg-app-name\u003e\nfly pg db list -a \u003cpg-app-name\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fly.io/docs/postgres/managing/deleting/",
      "date_published": "2023-10-17T18:42:30Z",
      "date_modified": "2023-10-17T18:42:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "infra",
        "fly",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-136/",
      "url": "https://go.waylonwalker.com/thought-136/",
      "title": "💭 Twitter Requires full image_urls",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eYet again twitter cards were causing me pain.  This time it was me not realizing that they require full urls, and not relative or abolute urls.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis was not working\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;twitter:image\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/shot/?path={{ request.url|quote_plus }}\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent-type\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;image/png\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eThis does work with a full url\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;twitter:image\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://thoughts.waylonwalker.com/shot/?path={{ request.url|quote_plus }}\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent-type\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;image/png\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nYet again twitter cards were causing me pain.  This time it was me not realizing that they require full urls, and not relative or abolute urls.\n\n\u003e This was not working\n\n``` html\n    \u003cmeta name=\"twitter:image\" content=\"/shot/?path={{ request.url|quote_plus }}\" content-type='image/png'/\u003e\n```\n\n\u003e This does work with a full url\n\n``` html\n    \u003cmeta name=\"twitter:image\" content=\"https://thoughts.waylonwalker.com/shot/?path={{ request.url|quote_plus }}\" content-type='image/png'/\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2023-10-17T17:30:09Z",
      "date_modified": "2023-10-17T17:30:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "meta",
        "twitter",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-135/",
      "url": "https://go.waylonwalker.com/thought-135/",
      "title": "💭 Has Web Development Regressed? A Conversation with Wes Bos | B...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"EMg-AruNQQs\" title=\"Has Web Development Gotten Worse? w/ @WesBos  | 023\" playlabel=\"Play: Has Web Development Gotten Worse? w/ @WesBos  | 023\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBoot.dev is crushing it with these interviews. This one has Wes Bos, includes teaching, webdev, where is webdev headed.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"EMg-AruNQQs\" title=\"Has Web Development Gotten Worse? w/ @WesBos  | 023\" playlabel=\"Play: Has Web Development Gotten Worse? w/ @WesBos  | 023\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nBoot.dev is crushing it with these interviews. This one has Wes Bos, includes teaching, webdev, where is webdev headed.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=EMg-AruNQQs",
      "date_published": "2023-10-17T01:33:41Z",
      "date_modified": "2023-10-17T01:33:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "interviews",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/david-kunz-gen-nvim/",
      "url": "https://go.waylonwalker.com/david-kunz-gen-nvim/",
      "title": "⭐ David-Kunz gen.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/David-Kunz/gen.nvim\" 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\"\u003egen.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/David-Kunz\" 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\"\u003eDavid-Kunz\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eNeovim plugin to generate text using LLMs with customizable prompts\u003c/p\u003e\n",
      "content_text": "\n[gen.nvim](https://github.com/David-Kunz/gen.nvim) by [David-Kunz](https://github.com/David-Kunz) is a game-changer in its space. Excited to see how it evolves.\n\nNeovim plugin to generate text using LLMs with customizable prompts\n",
      "summary": "gen.nvim by David-Kunz is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2023-10-14T02:31:34Z",
      "date_modified": "2023-10-14T02:31:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-134/",
      "url": "https://go.waylonwalker.com/thought-134/",
      "title": "💭 David-Kunz/gen.nvim: Neovim plugin to generate text using LLMs...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/David-Kunz/gen.nvim\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/David-Kunz/gen.nvim\" alt=\"https://github.com/David-Kunz/gen.nvim\"/ data-glightbox=\"description: https://github.com/David-Kunz/gen.nvim\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis seems like a promising tool to use with ollama.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/David-Kunz/gen.nvim](/static/https://github.com/David-Kunz/gen.nvim)\n\nThis seems like a promising tool to use with ollama.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/David-Kunz/gen.nvim",
      "date_published": "2023-10-14T02:31:29Z",
      "date_modified": "2023-10-14T02:31:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-133/",
      "url": "https://go.waylonwalker.com/thought-133/",
      "title": "💭 Ollama",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ollama.ai/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://ollama.com/public/og.png\" alt=\"Ollama — Ollama is the easiest way to automate your work using open models, while keeping your data safe.\" loading=\"lazy\"/ data-glightbox=\"description: Ollama — Ollama is the easiest way to automate your work using open models, while keeping your data safe.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOllama\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOllama is the easiest way to automate your work using open models, while keeping your data safe.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eollama.ai\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eollama is the easiest to get going local llm tool that I have tried, and seems to be crazy fast.  It feels faster than chat gpt, which has not been the experience I have had previously with running llm’s on my hardware.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.jpillora.com/jmorganca/ollama \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama serve\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run mistral\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run codellama:7b-code\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ollama.ai/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://ollama.com/public/og.png\" alt=\"Ollama — Ollama is the easiest way to automate your work using open models, while keeping your data safe.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOllama\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOllama is the easiest way to automate your work using open models, while keeping your data safe.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eollama.ai\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nollama is the easiest to get going local llm tool that I have tried, and seems to be crazy fast.  It feels faster than chat gpt, which has not been the experience I have had previously with running llm's on my hardware.\n\n\n``` bash\ncurl https://i.jpillora.com/jmorganca/ollama | bash\nollama serve\nollama run mistral\nollama run codellama:7b-code\nollama list\n```\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ollama.ai/",
      "date_published": "2023-10-14T02:31:03Z",
      "date_modified": "2023-10-14T02:31:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/boeing-config-file-validator/",
      "url": "https://go.waylonwalker.com/boeing-config-file-validator/",
      "title": "⭐ Boeing config-file-validator",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Boeing\" 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\"\u003eBoeing\u003c/a\u003e and their project \u003ca href=\"https://github.com/Boeing/config-file-validator\" 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\"\u003econfig-file-validator\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCross Platform tool to validate configuration files\u003c/p\u003e\n",
      "content_text": "\nCheck out [Boeing](https://github.com/Boeing) and their project [config-file-validator](https://github.com/Boeing/config-file-validator).\n\nCross Platform tool to validate configuration files\n",
      "summary": "Check out Boeing and their project config-file-validator.",
      "date_published": "2023-10-13T23:41:40Z",
      "date_modified": "2023-10-13T23:41:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/christianchiarulli-neotweet/",
      "url": "https://go.waylonwalker.com/christianchiarulli-neotweet/",
      "title": "⭐ ChristianChiarulli NeoTweet",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/ChristianChiarulli/NeoTweet\" 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\"\u003eNeoTweet\u003c/a\u003e, created by \u003ca href=\"https://github.com/ChristianChiarulli\" 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\"\u003eChristianChiarulli\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [NeoTweet](https://github.com/ChristianChiarulli/NeoTweet), created by [ChristianChiarulli](https://github.com/ChristianChiarulli).\n\nNo description available.\n",
      "summary": "If you're into interesting projects, don't miss out on NeoTweet, created by ChristianChiarulli.",
      "date_published": "2023-10-13T23:41:24Z",
      "date_modified": "2023-10-13T23:41:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-132/",
      "url": "https://go.waylonwalker.com/thought-132/",
      "title": "💭 sysid/sse-starlette",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/sysid/sse-starlette\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/eb34d130aa35401031da9d40b48b77db1d6dbf11baa6096884e5b4b1689f9505/sysid/sse-starlette\" alt=\"GitHub - sysid/sse-starlette — Contribute to sysid/sse-starlette development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - sysid/sse-starlette — Contribute to sysid/sse-starlette development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - sysid/sse-starlette\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to sysid/sse-starlette development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003esse-\u003ca href=\"/starlette/\" class=\"glossary-term\" title=\"Starlette is a low level web framework for modern (as of 2025) async python development most famously used by \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.\"\u003estarlette\u003c/a\u003e provides server sent events for startlette and FastApi.  I’m evaluating for use with \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation: \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install sse-starlette\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"usage\"\u003eUsage: \u003ca href=\"#usage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003easyncio\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003euvicorn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003estarlette.applications\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eStarlette\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003estarlette.routing\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eRoute\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003esse_starlette.sse\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eEventSourceResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003enumbers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eminimum\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emaximum\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"nb\"\u003erange\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eminimum\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emaximum\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003easyncio\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mf\"\u003e0.9\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eyield\u003c/span\u003e \u003cspan class=\"nb\"\u003edict\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003esse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egenerator\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enumbers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eEventSourceResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egenerator\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eroutes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eRoute\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eendpoint\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eStarlette\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eroutes\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eroutes\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euvicorn\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehost\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;0.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e8000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elog_level\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;info\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/sysid/sse-starlette\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/eb34d130aa35401031da9d40b48b77db1d6dbf11baa6096884e5b4b1689f9505/sysid/sse-starlette\" alt=\"GitHub - sysid/sse-starlette — Contribute to sysid/sse-starlette development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - sysid/sse-starlette\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to sysid/sse-starlette development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nsse-starlette provides server sent events for startlette and FastApi.  I'm evaluating for use with htmx.\n\n## Installation:\n\n``` bash\npip install sse-starlette\n```\n## Usage:\n\n``` python\nimport asyncio\nimport uvicorn\nfrom starlette.applications import Starlette\nfrom starlette.routing import Route\nfrom sse_starlette.sse import EventSourceResponse\n\nasync def numbers(minimum, maximum):\n    for i in range(minimum, maximum + 1):\n        await asyncio.sleep(0.9)\n        yield dict(data=i)\n\nasync def sse(request):\n    generator = numbers(1, 5)\n    return EventSourceResponse(generator)\n\nroutes = [\n    Route(\"/\", endpoint=sse)\n]\n\napp = Starlette(debug=True, routes=routes)\n\nif __name__ == \"__main__\":\n    uvicorn.run(app, host=\"0.0.0.0\", port=8000, log_level='info')\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/sysid/sse-starlette",
      "date_published": "2023-10-12T19:14:45Z",
      "date_modified": "2023-10-12T19:14:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-131/",
      "url": "https://go.waylonwalker.com/thought-131/",
      "title": "💭 Overflow - Tailwind CSS",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailwindcss.com/docs/overflow\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://tailwindcss.com/api/og?path=/docs/overflow\" alt=\"overflow - Layout — Utilities for controlling how an element handles content that is too large for the container.\" loading=\"lazy\"/ data-glightbox=\"description: overflow - Layout — Utilities for controlling how an element handles content that is too large for the container.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eoverflow - Layout\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUtilities for controlling how an element handles content that is too large for the container.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etailwindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eControlling overflow with tailwindcss\u003c/p\u003e\n\u003ch2 id=\"examples\"\u003eExamples \u003ca href=\"#examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;overflow-visible ...\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;overflow-hidden ...\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://tailwindcss.com/docs/overflow\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://tailwindcss.com/api/og?path=/docs/overflow\" alt=\"overflow - Layout — Utilities for controlling how an element handles content that is too large for the container.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eoverflow - Layout\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUtilities for controlling how an element handles content that is too large for the container.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003etailwindcss.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nControlling overflow with tailwindcss\n\n## Examples\n\n``` html\n\u003cdiv class=\"overflow-visible ...\"\u003e\u003c/div\u003e\n\n\u003cdiv class=\"overflow-hidden ...\"\u003e\u003c/div\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://tailwindcss.com/docs/overflow",
      "date_published": "2023-10-11T19:16:21Z",
      "date_modified": "2023-10-11T19:16:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "tailwind",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-130/",
      "url": "https://go.waylonwalker.com/thought-130/",
      "title": "💭 How To Create a Custom Scrollbar",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp\" alt=\"https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp\"/ data-glightbox=\"description: https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eDefault scrollbars on a dark theme website are just the ugliest thing.  This page covers all the pseudo selectors needed to style the scrollbar.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e/* width */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ewidth\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e/* Track */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-track\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ebackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#f1f1f1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e/* Handle */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ebackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#888\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e/* Handle on hover */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"nd\"\u003e-webkit-scrollbar-thumb\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nd\"\u003ehover\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ebackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#555\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp](/static/https://www.w3schools.com/howto/howto_css_custom_scrollbar.asp)\n\nDefault scrollbars on a dark theme website are just the ugliest thing.  This page covers all the pseudo selectors needed to style the scrollbar.\n\n``` css\n/* width */\n::-webkit-scrollbar {\n  width: 10px;\n}\n\n/* Track */\n::-webkit-scrollbar-track {\n  background: #f1f1f1;\n}\n\n/* Handle */\n::-webkit-scrollbar-thumb {\n  background: #888;\n}\n\n/* Handle on hover */\n::-webkit-scrollbar-thumb:hover {\n  background: #555;\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.w3schools.com/howto/howto_custom_scrollbar.asp",
      "date_published": "2023-10-11T19:11:49Z",
      "date_modified": "2023-10-11T19:11:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-129/",
      "url": "https://go.waylonwalker.com/thought-129/",
      "title": "💭 wincent/aspects/dotfiles/files/.zshrc at 85fc42d9e96d408a5b367...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc\" alt=\"https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc\"/ data-glightbox=\"description: https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eWincent (Greg Hurrel) has a pretty solid and fast zshrc.  I recently grabbed his completion section and it seems to be working better than whatever I had.\u003c/p\u003e\n\u003cp\u003ezsh completion snippet\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Completion\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003efpath\u003c/span\u003e\u003cspan class=\"o\"\u003e=(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e/.zsh/completions \u003cspan class=\"nv\"\u003e$fpath\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eautoload -U compinit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecompinit -u\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Make completion:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# - Try exact (case-sensitive) match first.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# - Then fall back to case-insensitive.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# - Accept abbreviations after . or _ or - (ie. f.b -\u0026gt; foo.bar).\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# - Substring complete (ie. bar -\u0026gt; foobar).\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*\u0026#39;\u003c/span\u003e matcher-list \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;+m:{[:lower:]}={[:upper:]}\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;+m:{[:upper:]}={[:lower:]}\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;+m:{_-}={-_}\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;r:|[._-]=* r:|=*\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;l:|=* r:|=*\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Colorize completions using default `ls` colors.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*\u0026#39;\u003c/span\u003e list-colors \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Allow completion of ..\u0026lt;Tab\u0026gt; to ../ and beyond.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle -e \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*\u0026#39;\u003c/span\u003e special-dirs \u003cspan class=\"s1\"\u003e\u0026#39;[[ $PREFIX = (../)#(..) ]] \u0026amp;\u0026amp; reply=(..)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# $CDPATH is overpowered (can allow us to jump to 100s of directories) so tends\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# to dominate completion; exclude path-directories from the tag-order so that\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# they will only be used as a fallback if no completions are found.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*:complete:(cd|pushd):*\u0026#39;\u003c/span\u003e tag-order \u003cspan class=\"s1\"\u003e\u0026#39;local-directories named-directories\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Categorize completion suggestions with headings:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*\u0026#39;\u003c/span\u003e group-name \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*:descriptions\u0026#39;\u003c/span\u003e format %F\u003cspan class=\"o\"\u003e{\u003c/span\u003edefault\u003cspan class=\"o\"\u003e}\u003c/span\u003e%B%\u003cspan class=\"o\"\u003e{\u003c/span\u003e\u003cspan class=\"nv\"\u003e$__WINCENT\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eITALIC_ON\u003cspan class=\"o\"\u003e]\u003c/span\u003e%\u003cspan class=\"o\"\u003e}\u003c/span\u003e--- %d ---%\u003cspan class=\"o\"\u003e{\u003c/span\u003e\u003cspan class=\"nv\"\u003e$__WINCENT\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eITALIC_OFF\u003cspan class=\"o\"\u003e]\u003c/span\u003e%\u003cspan class=\"o\"\u003e}\u003c/span\u003e%b%f\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Enable keyboard navigation of completions in menu\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# (not just tab/shift-tab but cursor keys as well):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezstyle \u003cspan class=\"s1\"\u003e\u0026#39;:completion:*\u0026#39;\u003c/span\u003e menu \u003cspan class=\"k\"\u003eselect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc](/static/https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc)\n\nWincent (Greg Hurrel) has a pretty solid and fast zshrc.  I recently grabbed his completion section and it seems to be working better than whatever I had.\n\nzsh completion snippet\n\n\n``` bash\n#\n# Completion\n#\n\nfpath=($HOME/.zsh/completions $fpath)\n\nautoload -U compinit\ncompinit -u\n\n# Make completion:\n# - Try exact (case-sensitive) match first.\n# - Then fall back to case-insensitive.\n# - Accept abbreviations after . or _ or - (ie. f.b -\u003e foo.bar).\n# - Substring complete (ie. bar -\u003e foobar).\nzstyle ':completion:*' matcher-list '' '+m:{[:lower:]}={[:upper:]}' '+m:{[:upper:]}={[:lower:]}' '+m:{_-}={-_}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'\n\n# Colorize completions using default `ls` colors.\nzstyle ':completion:*' list-colors ''\n\n# Allow completion of ..\u003cTab\u003e to ../ and beyond.\nzstyle -e ':completion:*' special-dirs '[[ $PREFIX = (../)#(..) ]] \u0026\u0026 reply=(..)'\n\n# $CDPATH is overpowered (can allow us to jump to 100s of directories) so tends\n# to dominate completion; exclude path-directories from the tag-order so that\n# they will only be used as a fallback if no completions are found.\nzstyle ':completion:*:complete:(cd|pushd):*' tag-order 'local-directories named-directories'\n\n# Categorize completion suggestions with headings:\nzstyle ':completion:*' group-name ''\nzstyle ':completion:*:descriptions' format %F{default}%B%{$__WINCENT[ITALIC_ON]%}--- %d ---%{$__WINCENT[ITALIC_OFF]%}%b%f\n\n# Enable keyboard navigation of completions in menu\n# (not just tab/shift-tab but cursor keys as well):\nzstyle ':completion:*' menu select\n``` \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc",
      "date_published": "2023-10-10T12:38:22Z",
      "date_modified": "2023-10-10T12:38:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "shell",
        "zsh",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-128/",
      "url": "https://go.waylonwalker.com/thought-128/",
      "title": "💭 Change Autocomplete Styles in WebKit Browsers | CSS-Tricks - C...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"//css-tricks.com/wp-content/uploads/2016/04/form-autocomplete.gif\" alt=\"Change Autocomplete Styles in WebKit Browsers | CSS-Tricks — We got a nice tip from Lydia Dugger via email with a method for changing the styles that WebKit browsers apply to form fields that have been autocompleted.\" loading=\"lazy\"/ data-glightbox=\"description: Change Autocomplete Styles in WebKit Browsers | CSS-Tricks — We got a nice tip from Lydia Dugger via email with a method for changing the styles that WebKit browsers apply to form fields that have been autocompleted.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eChange Autocomplete Styles in WebKit Browsers | CSS-Tricks\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe got a nice tip from Lydia Dugger via email with a method for changing the styles that WebKit browsers apply to form fields that have been autocompleted.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCSS-Tricks · css-tricks.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAll the hover, select, autofil, focus combinations have left me confused on how to consistently get my form elements styled in dark mode\u003c/p\u003e\n\u003cp\u003eThis snippet from CSS tricks has fixed all the different states for me to give me full control.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e/* Change Autocomplete styles in Chrome*/\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover, \ninput:-webkit-autofill:focus,\ntextarea:-webkit-autofill,\ntextarea:-webkit-autofill:hover,\ntextarea:-webkit-autofill:focus,\nselect:-webkit-autofill,\nselect:-webkit-autofill:hover,\nselect:-webkit-autofill:focus {\n  border: 1px solid green;\n  -webkit-text-fill-color: green;\n  -webkit-box-shadow: 0 0 0px 1000px #000 inset;\n  transition: background-color 5000s ease-in-out 0s;\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"//css-tricks.com/wp-content/uploads/2016/04/form-autocomplete.gif\" alt=\"Change Autocomplete Styles in WebKit Browsers | CSS-Tricks — We got a nice tip from Lydia Dugger via email with a method for changing the styles that WebKit browsers apply to form fields that have been autocompleted.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eChange Autocomplete Styles in WebKit Browsers | CSS-Tricks\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe got a nice tip from Lydia Dugger via email with a method for changing the styles that WebKit browsers apply to form fields that have been autocompleted.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCSS-Tricks \u0026middot; css-tricks.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAll the hover, select, autofil, focus combinations have left me confused on how to consistently get my form elements styled in dark mode\n\nThis snippet from CSS tricks has fixed all the different states for me to give me full control.\n```\n/* Change Autocomplete styles in Chrome*/\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover, \ninput:-webkit-autofill:focus,\ntextarea:-webkit-autofill,\ntextarea:-webkit-autofill:hover,\ntextarea:-webkit-autofill:focus,\nselect:-webkit-autofill,\nselect:-webkit-autofill:hover,\nselect:-webkit-autofill:focus {\n  border: 1px solid green;\n  -webkit-text-fill-color: green;\n  -webkit-box-shadow: 0 0 0px 1000px #000 inset;\n  transition: background-color 5000s ease-in-out 0s;\n}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/",
      "date_published": "2023-10-10T01:48:04Z",
      "date_modified": "2023-10-10T01:48:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-127/",
      "url": "https://go.waylonwalker.com/thought-127/",
      "title": "💭 florimondmanca/arel: Lightweight browser hot reload for Python...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/florimondmanca/arel\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/975747e1fee22d14df94a20ee68180dc2c8d3368973060990f32c1101fed606a/florimondmanca/arel\" alt=\"GitHub - florimondmanca/arel: Lightweight browser hot reload for Python ASGI web apps — Lightweight browser hot reload for Python ASGI web apps - florimondmanca/arel\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - florimondmanca/arel: Lightweight browser hot reload for Python ASGI web apps — Lightweight browser hot reload for Python ASGI web apps - florimondmanca/arel\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - florimondmanca/arel: Lightweight browser hot reload for Python ASGI web apps\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLightweight browser hot reload for Python ASGI web apps - florimondmanca/arel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003earel is a “Lightweight browser hot reload for Python ASGI web apps”\u003c/p\u003e\n\u003cp\u003eI just implemented this on my thoughts website using \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, and it’s incredibly fast and lightweight.  There just two lines of js that make a web socket connection back to the backend that watches for changes.\u003c/p\u003e\n\u003cp\u003eWhen in development mode, this snippet gets injected directly on the page and does a refresh when arel detects a change.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nx\"\u003ews\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nx\"\u003eWebSocket\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ws://localhost:5000/hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ews\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eonmessage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003ewindow\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003elocation\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ereload\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/florimondmanca/arel\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/975747e1fee22d14df94a20ee68180dc2c8d3368973060990f32c1101fed606a/florimondmanca/arel\" alt=\"GitHub - florimondmanca/arel: Lightweight browser hot reload for Python ASGI web apps — Lightweight browser hot reload for Python ASGI web apps - florimondmanca/arel\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - florimondmanca/arel: Lightweight browser hot reload for Python ASGI web apps\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLightweight browser hot reload for Python ASGI web apps - florimondmanca/arel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\narel is a \"Lightweight browser hot reload for Python ASGI web apps\"\n\nI just implemented this on my thoughts website using fastapi, and it's incredibly fast and lightweight.  There just two lines of js that make a web socket connection back to the backend that watches for changes.\n\n\nWhen in development mode, this snippet gets injected directly on the page and does a refresh when arel detects a change.\n\n``` js\nconst ws = new WebSocket(\"ws://localhost:5000/hot-reload\");\nws.onmessage = () =\u003e window.location.reload();\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/florimondmanca/arel",
      "date_published": "2023-10-08T15:22:23Z",
      "date_modified": "2023-10-08T15:22:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-126/",
      "url": "https://go.waylonwalker.com/thought-126/",
      "title": "💭 Automatic browser reloading in FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/vrslev/6d0602bfa939a01844f645c608afb85a\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gist.github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gist.github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003emain.py\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003epython\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003earel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.templating\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etemplates\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003e_debug\u003c/span\u003e \u003cspan class=\"o\"\u003e:=\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;DEBUG\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003earel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHotReload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epaths\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003earel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_websocket_route\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eroute\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_event_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;startup\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estartup\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_event_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;shutdown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eshutdown\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;DEBUG\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003e_debug\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hot_reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eindex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;index.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# run:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# DEBUG=true uvicorn main:app --reload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI just discovered \u003ca href=\"https://pypi.org/project/arel/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003earel\u003c/a\u003e for hot reloading python applications when content changes from this snippet that implements it for fatapi.\u003c/p\u003e\n\u003cp\u003eOn app startup add the \u003ccode\u003e/hot-reload\u003c/code\u003e routes if in \u003cstrong\u003eDEBUG\u003c/strong\u003e mode.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003earel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.templating\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etemplates\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003e_debug\u003c/span\u003e \u003cspan class=\"o\"\u003e:=\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;DEBUG\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003earel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHotReload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epaths\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003earel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_websocket_route\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eroute\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_event_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;startup\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estartup\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_event_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;shutdown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eshutdown\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;DEBUG\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003e_debug\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hot_reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eindex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;index.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# run:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# DEBUG=true uvicorn main:app --reload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003einstall \u003ccode\u003earel\u003c/code\u003e and make sure you have \u003ccode\u003euvicorn[standard]\u003c/code\u003e for websocket support.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastapi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvicorn[standard]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earel\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ejinja2\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn the template, load the script when in debug mode.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% block content %}{% endblock %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c\"\u003e\u0026lt;!-- Hot reload script --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {% if DEBUG %} {{ hot_reload.script(url_for(\u0026#39;hot-reload\u0026#39;)) | safe }} {% endif\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/vrslev/6d0602bfa939a01844f645c608afb85a\" target=\"_blank\" rel=\"noopener noreferrer\"\u003emain.py\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003epython\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003earel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.templating\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etemplates\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eJinja2Templates\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003e_debug\u003c/span\u003e \u003cspan class=\"o\"\u003e:=\u003c/span\u003e \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;DEBUG\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003earel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHotReload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epaths\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003earel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_websocket_route\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eroute\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hot-reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_event_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;startup\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estartup\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_event_handler\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;shutdown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eshutdown\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;DEBUG\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003e_debug\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenv\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglobals\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hot_reload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehot_reload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eindex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;index.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# run:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# DEBUG=true uvicorn main:app --reload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI just discovered [arel](https://pypi.org/project/arel/) for hot reloading python applications when content changes from this snippet that implements it for fatapi.\n\nOn app startup add the `/hot-reload` routes if in **DEBUG** mode.\n\n``` python\n\nimport os\n\nimport arel\nfrom fastapi import FastAPI, Request\nfrom fastapi.templating import Jinja2Templates\n\napp = FastAPI()\ntemplates = Jinja2Templates(\"templates\")\n\nif _debug := os.getenv(\"DEBUG\"):\n    hot_reload = arel.HotReload(paths=[arel.Path(\".\")])\n    app.add_websocket_route(\"/hot-reload\", route=hot_reload, name=\"hot-reload\")\n    app.add_event_handler(\"startup\", hot_reload.startup)\n    app.add_event_handler(\"shutdown\", hot_reload.shutdown)\n    templates.env.globals[\"DEBUG\"] = _debug\n    templates.env.globals[\"hot_reload\"] = hot_reload\n\n\n@app.get(\"/\")\ndef index(request: Request):\n    return templates.TemplateResponse(\"index.html\", context={\"request\": request})\n\n# run:\n# DEBUG=true uvicorn main:app --reload\n```\n\ninstall `arel` and make sure you have `uvicorn[standard]` for websocket support.\n\n``` text\nfastapi\nuvicorn[standard]\narel\njinja2\n```\n\nIn the template, load the script when in debug mode.\n\n``` html\n\u003cbody\u003e\n  {% block content %}{% endblock %}\n\n  \u003c!-- Hot reload script --\u003e\n  {% if DEBUG %} {{ hot_reload.script(url_for('hot-reload')) | safe }} {% endif\n  %}\n\u003c/body\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gist.github.com/vrslev/6d0602bfa939a01844f645c608afb85a",
      "date_published": "2023-10-08T15:16:56Z",
      "date_modified": "2023-10-08T15:16:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-124/",
      "url": "https://go.waylonwalker.com/thought-124/",
      "title": "💭 Bob Belderbos on X: \"Forget Python for a sec, here's how Vim h...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/bbelderbos/status/1709525676154368055\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI need to learn regex capture groups better.  This is so dang powerful. I really like the \\v that bob uses here, it really does cut down on the terseness of all the special characters.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI wanted to replace all occurrences of:\u003c/p\u003e\n\u003cp\u003ename,name@example.com,0,171,,2023-09-21\u003c/p\u003e\n\u003cp\u003eWith:\u003c/p\u003e\n\u003cp\u003ename,name@example.com\u003c/p\u003e\n\u003cp\u003eEasy to do with Python, but what about a bit of \u0026gt; regex in Vim?\u003c/p\u003e\n\u003cp\u003e:%s/\\v([^,]+,[^,]+),.*/\\1/\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/bbelderbos/status/1709525676154368055\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI need to learn regex capture groups better.  This is so dang powerful. I really like the \\v that bob uses here, it really does cut down on the terseness of all the special characters.\n\n\u003e I wanted to replace all occurrences of:\n\u003e\n\u003e name,name@example.com,0,171,,2023-09-21\n\u003e\n\u003e With:\n\u003e\n\u003e name,name@example.com\n\u003e\n\u003e Easy to do with Python, but what about a bit of \u003e regex in Vim?\n\u003e\n\u003e :%s/\\v([^,]+,[^,]+),.*/\\1/\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/bbelderbos/status/1709525676154368055",
      "date_published": "2023-10-05T01:34:19Z",
      "date_modified": "2023-10-05T01:34:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "regex",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-123/",
      "url": "https://go.waylonwalker.com/thought-123/",
      "title": "💭 teej dv 🔭 on X: \"Hypermedia fixes this HATEOAS gonna hate\" / X",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/teej_dv/status/1708258701008593173\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHATEOAS gonna hate. More and more \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e seems like the js library for backend devs.  So rather than making 55 rest calls here, just make an endpoint that does what you want it to do with one, or a few requests.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/teej_dv/status/1708258701008593173\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHATEOAS gonna hate. More and more htmx seems like the js library for backend devs.  So rather than making 55 rest calls here, just make an endpoint that does what you want it to do with one, or a few requests.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/teej_dv/status/1708258701008593173",
      "date_published": "2023-10-05T01:13:37Z",
      "date_modified": "2023-10-05T01:13:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-122/",
      "url": "https://go.waylonwalker.com/thought-122/",
      "title": "💭 Open source, not open contribution with Ben Johnson (Changelog...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/podcast/433\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://snap.fly.dev/podcast/433/img\" alt=\"Open source, not open contribution with Ben Johnson (Changelog Interviews #433) — This week we\u0026#39;re talking with Ben Johnson. Ben is known for his work on BoltDB, his work in open source, and as a freelance Go developer. Late January when Ben open sourced his newest project Litestream in the readme he shared how the project was open source, but not open for contribution. His reason was to protect his ...\" loading=\"lazy\"/ data-glightbox=\"description: Open source, not open contribution with Ben Johnson (Changelog Interviews #433) — This week we\u0026#39;re talking with Ben Johnson. Ben is known for his work on BoltDB, his work in open source, and as a freelance Go developer. Late January when Ben open sourced his newest project Litestream in the readme he shared how the project was open source, but not open for contribution. His reason was to protect his ...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOpen source, not open contribution with Ben Johnson (Changelog Interviews #433)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis week we\u0026#39;re talking with Ben Johnson. Ben is known for his work on BoltDB, his work in open source, and as a freelance Go developer. Late January when Ben open sourced his newest project Litest...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBen Johnson was on the Changelog a few years back covering his work on litestream, and talks about why he chose to go open source, but not open contribution.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYou should have a good reason to move off of sqlite.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/podcast/433\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/podcast/433/img\" alt=\"Open source, not open contribution with Ben Johnson (Changelog Interviews #433) — This week we\u0026#39;re talking with Ben Johnson. Ben is known for his work on BoltDB, his work in open source, and as a freelance Go developer. Late January when Ben open sourced his newest project Litestream in the readme he shared how the project was open source, but not open for contribution. His reason was to protect his ...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eOpen source, not open contribution with Ben Johnson (Changelog Interviews #433)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThis week we\u0026#39;re talking with Ben Johnson. Ben is known for his work on BoltDB, his work in open source, and as a freelance Go developer. Late January when Ben open sourced his newest project Litest...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBen Johnson was on the Changelog a few years back covering his work on litestream, and talks about why he chose to go open source, but not open contribution.\n\n\u003e You should have a good reason to move off of sqlite.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/podcast/433",
      "date_published": "2023-10-05T01:11:19Z",
      "date_modified": "2023-10-05T01:11:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jpillora-installer-til/",
      "url": "https://go.waylonwalker.com/jpillora-installer-til/",
      "title": "jpillora-installer",
      "content_html": "\u003cp\u003ejpillora/installer is the install script generator I have been looking for. It\ndownloads binaries for your machine from GitHub releases and unzips them for\nyou. It grabs the latest release, so you can easily update them. I have\ntried scripting these installs in the past and struggled to consistently get\nthe latest version for every package and unpack it correctly.\u003c/p\u003e\n\u003cp\u003eAlso these pre-compiled binaries install rediculously fast compared to building\nthem from source.\u003c/p\u003e\n\u003cp\u003eCheck out some example links.\u003c/p\u003e\n\u003cp\u003eopening in a browser will show metadata\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://i.jpillora.com/serve\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/i.jpillora.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/i.jpillora.com.ico\"\u003ehttps://i.jpillora.com/serve\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you pass in script=true it will instead return the install script as it\nwould by default through curl.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://i.jpillora.com/serve?script=true\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/i.jpillora.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/i.jpillora.com.ico\"\u003ehttps://i.jpillora.com/serve?script=true\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"use-it-to-install-neovim\"\u003eUse it to install neovim \u003ca href=\"#use-it-to-install-neovim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAll you need to do to generate an install script is to pass in the GitHub repo\nslug with the org.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.jpillora.com/neovim/neovim \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe shell script that it generates for neovim looks like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DEBUG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eset\u003c/span\u003e -x\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTMP_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003emktemp -d -t jpillora-installer-XXXXXXXXXX\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e cleanup \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    rm -rf \u003cspan class=\"nv\"\u003e$TMP_DIR\u003c/span\u003e \u0026gt; /dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e fail \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    cleanup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003emsg\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;============\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Error: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$msg\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e 1\u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e install \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#settings\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eUSER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;neovim\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ePROG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;neovim\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eASPROG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eMOVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;false\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eRELEASE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;stable\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eINSECURE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;false\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOUT_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e\u003cspan class=\"nb\"\u003epwd\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eGH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://github.com\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#bash check\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$BASH_VERSION\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;Please use bash instead\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -d \u003cspan class=\"nv\"\u003e$OUT_DIR\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;output directory missing: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OUT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#dependency check, assume we are a standard POISX machine\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    which find \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;find not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    which xargs \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;xargs not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    which sort \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;sort not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    which tail \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;tail not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    which cut \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;cut not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    which du \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;du not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#choose an HTTP client\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e which curl \u0026gt; /dev/null\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;curl\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$INSECURE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e --insecure\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e --fail -# -L\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e which wget \u0026gt; /dev/null\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;wget\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$INSECURE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e --no-check-certificate\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e -qO-\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        fail \u003cspan class=\"s2\"\u003e\u0026#34;neither wget/curl are installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#debug HTTP\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DEBUG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e -v\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#optional auth to install from private repos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#NOTE: this also needs to be set on your instance of installer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eAUTH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eGITHUB_TOKEN\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$AUTH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e -H \u0026#39;Authorization: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$AUTH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#39;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#find OS #TODO BSDs and other posixs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"sb\"\u003e`\u003c/span\u003euname -s\u003cspan class=\"sb\"\u003e`\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Darwin\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eOS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;darwin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Linux\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eOS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;linux\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"o\"\u003e)\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;unknown os: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003euname -s\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#find ARCH\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e uname -m \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep -E \u003cspan class=\"s1\"\u003e\u0026#39;(arm|arch)64\u0026#39;\u003c/span\u003e \u0026gt; /dev/null\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;arm64\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# no m1 assets. if on mac arm64, rosetta allows fallback to amd64\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$OS\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;darwin\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;amd64\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e uname -m \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"m\"\u003e64\u003c/span\u003e \u0026gt; /dev/null\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;amd64\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e uname -m \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep arm \u0026gt; /dev/null\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;arm\u0026#34;\u003c/span\u003e \u003cspan class=\"c1\"\u003e#TODO armv6/v7\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e uname -m \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"m\"\u003e386\u003c/span\u003e \u0026gt; /dev/null\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;386\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        fail \u003cspan class=\"s2\"\u003e\u0026#34;unknown arch: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003euname -m\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#choose from asset list\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eURL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eFTYPE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e_\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;linux_amd64\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eURL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eFTYPE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.tar.gz\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;darwin_amd64\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eURL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/neovim/neovim/releases/download/stable/nvim-macos.tar.gz\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eFTYPE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.tar.gz\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"o\"\u003e)\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;No asset for platform \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e-\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#got URL! download it...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;Downloading\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PROG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$RELEASE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$RELEASE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ASPROG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34; as \u003c/span\u003e\u003cspan class=\"nv\"\u003e$ASPROG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34; (\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.....\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#enter tempdir\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    mkdir -p \u003cspan class=\"nv\"\u003e$TMP_DIR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TMP_DIR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.gz\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        which gzip \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;gzip is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$URL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e gzip -d - \u0026gt; \u003cspan class=\"nv\"\u003e$PROG\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;download failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.tar.bz\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.tar.bz2\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        which tar \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;tar is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        which bzip2 \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;bzip2 is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$URL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tar jxf - \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;download failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.tar.gz\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.tgz\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        which tar \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;tar is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        which gzip \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;gzip is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$URL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tar zxf - \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;download failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.zip\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        which unzip \u0026gt; /dev/null \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;unzip is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$URL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u0026gt; tmp.zip \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;download failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        unzip -o -qq tmp.zip \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;unzip failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        rm tmp.zip \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;cleanup failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.bin\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$GET\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$URL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u0026gt; \u003cspan class=\"s2\"\u003e\u0026#34;neovim_\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e_\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eARCH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;download failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        fail \u003cspan class=\"s2\"\u003e\u0026#34;unknown file type: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$FTYPE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#search subtree largest file (bin)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eTMP_BIN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003efind . -type f \u003cspan class=\"p\"\u003e|\u003c/span\u003e xargs du \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort -n \u003cspan class=\"p\"\u003e|\u003c/span\u003e tail -n \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -f 2\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TMP_BIN\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        fail \u003cspan class=\"s2\"\u003e\u0026#34;could not find find binary (largest file)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#ensure its larger than 1MB\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#TODO linux=elf/darwin=macho file detection?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"k\"\u003e$(\u003c/span\u003edu -m \u003cspan class=\"nv\"\u003e$TMP_BIN\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -f1\u003cspan class=\"k\"\u003e)\u003c/span\u003e -lt \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        fail \u003cspan class=\"s2\"\u003e\u0026#34;no binary found (\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TMP_BIN\u003c/span\u003e\u003cspan class=\"s2\"\u003e is not larger than 1MB)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#move into PATH or cwd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    chmod +x \u003cspan class=\"nv\"\u003e$TMP_BIN\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;chmod +x failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eDEST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OUT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PROG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ASPROG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eDEST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OUT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ASPROG\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#move without sudo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOUT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003emv \u003cspan class=\"nv\"\u003e$TMP_BIN\u003c/span\u003e \u003cspan class=\"nv\"\u003e$DEST\u003c/span\u003e 2\u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e1\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eSTATUS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# failed and string contains \u0026#34;Permission denied\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$STATUS\u003c/span\u003e -ne \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$OUT\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e~ \u003cspan class=\"s2\"\u003e\u0026#34;Permission denied\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;mv with sudo...\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            sudo mv \u003cspan class=\"nv\"\u003e$TMP_BIN\u003c/span\u003e \u003cspan class=\"nv\"\u003e$DEST\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e fail \u003cspan class=\"s2\"\u003e\u0026#34;sudo mv failed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            fail \u003cspan class=\"s2\"\u003e\u0026#34;mv failed (\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OUT\u003c/span\u003e\u003cspan class=\"s2\"\u003e)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Downloaded to \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DEST\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e#done\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    cleanup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einstall\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"self-host-your-own\"\u003e\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 Host\u003c/a\u003e Your Own \u003ca href=\"#self-host-your-own\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’d reccomend self hosting your own. This way you know that it’s consistent\nand unlikely to change in a way that breaks your use.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ecurl -s https://i.jpillora.com/installer | bash\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"repos-i-am-using-installer-for\"\u003eRepos I am using installer for \u003ca href=\"#repos-i-am-using-installer-for\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are the repos I am using installer for.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuinsh/atuin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebenbjohnson/litestream\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebootandy/dust\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBurntSushi/ripgrep\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmln/sd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecjbassi/ytop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edalance/procs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edbrgn/tealdeer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003educaale/xh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ego-task/task\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eimsnif/bandwhich\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eimsnif/diskonaut\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekovidgoyal/kitty\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emgdm/htmlq\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eneovim/neovim\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eogham/dog\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eogham/exa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epemistahl/grex\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esharkdp/bat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esharkdp/fd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esharkdp/pastel\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esirwart/ripsecrets\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estarship/starship\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etopgrade-rs/topgrade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezellij-org/zellij\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\njpillora/installer is the install script generator I have been looking for. It\ndownloads binaries for your machine from GitHub releases and unzips them for\nyou. It grabs the latest release, so you can easily update them. I have\ntried scripting these installs in the past and struggled to consistently get\nthe latest version for every package and unpack it correctly.\n\nAlso these pre-compiled binaries install rediculously fast compared to building\nthem from source.\n\nCheck out some example links.\n\nopening in a browser will show metadata\n\n[https://i.jpillora.com/serve](https://i.jpillora.com/serve){.hoverlink}\n\nIf you pass in script=true it will instead return the install script as it\nwould by default through curl.\n\n[https://i.jpillora.com/serve?script=true](https://i.jpillora.com/serve?script=true){.hoverlink}\n\n## Use it to install neovim\n\nAll you need to do to generate an install script is to pass in the GitHub repo\nslug with the org.\n\n```bash\ncurl https://i.jpillora.com/neovim/neovim | bash\n```\n\nThe shell script that it generates for neovim looks like this.\n\n```bash\n#!/bin/bash\nif [ \"$DEBUG\" == \"1\" ]; then\n    set -x\nfi\nTMP_DIR=$(mktemp -d -t jpillora-installer-XXXXXXXXXX)\nfunction cleanup {\n    rm -rf $TMP_DIR \u003e /dev/null\n}\nfunction fail {\n    cleanup\n    msg=$1\n    echo \"============\"\n    echo \"Error: $msg\" 1\u003e\u00262\n    exit 1\n}\nfunction install {\n    #settings\n    USER=\"neovim\"\n    PROG=\"neovim\"\n    ASPROG=\"\"\n    MOVE=\"false\"\n    RELEASE=\"stable\"\n    INSECURE=\"false\"\n    OUT_DIR=\"$(pwd)\"\n    GH=\"https://github.com\"\n    #bash check\n    [ ! \"$BASH_VERSION\" ] \u0026\u0026 fail \"Please use bash instead\"\n    [ ! -d $OUT_DIR ] \u0026\u0026 fail \"output directory missing: $OUT_DIR\"\n    #dependency check, assume we are a standard POISX machine\n    which find \u003e /dev/null || fail \"find not installed\"\n    which xargs \u003e /dev/null || fail \"xargs not installed\"\n    which sort \u003e /dev/null || fail \"sort not installed\"\n    which tail \u003e /dev/null || fail \"tail not installed\"\n    which cut \u003e /dev/null || fail \"cut not installed\"\n    which du \u003e /dev/null || fail \"du not installed\"\n    #choose an HTTP client\n    GET=\"\"\n    if which curl \u003e /dev/null; then\n        GET=\"curl\"\n        if [[ $INSECURE = \"true\" ]]; then GET=\"$GET --insecure\"; fi\n        GET=\"$GET --fail -# -L\"\n    elif which wget \u003e /dev/null; then\n        GET=\"wget\"\n        if [[ $INSECURE = \"true\" ]]; then GET=\"$GET --no-check-certificate\"; fi\n        GET=\"$GET -qO-\"\n    else\n        fail \"neither wget/curl are installed\"\n    fi\n    #debug HTTP\n    if [ \"$DEBUG\" == \"1\" ]; then\n        GET=\"$GET -v\"\n    fi\n    #optional auth to install from private repos\n    #NOTE: this also needs to be set on your instance of installer\n    AUTH=\"${GITHUB_TOKEN}\"\n    if [ ! -z \"$AUTH\" ]; then\n        GET=\"$GET -H 'Authorization: $AUTH'\"\n    fi\n    #find OS #TODO BSDs and other posixs\n    case `uname -s` in\n    Darwin) OS=\"darwin\";;\n    Linux) OS=\"linux\";;\n    *) fail \"unknown os: $(uname -s)\";;\n    esac\n    #find ARCH\n    if uname -m | grep -E '(arm|arch)64' \u003e /dev/null; then\n        ARCH=\"arm64\"\n\n        # no m1 assets. if on mac arm64, rosetta allows fallback to amd64\n        if [[ $OS = \"darwin\" ]]; then\n            ARCH=\"amd64\"\n        fi\n\n    elif uname -m | grep 64 \u003e /dev/null; then\n        ARCH=\"amd64\"\n    elif uname -m | grep arm \u003e /dev/null; then\n        ARCH=\"arm\" #TODO armv6/v7\n    elif uname -m | grep 386 \u003e /dev/null; then\n        ARCH=\"386\"\n    else\n        fail \"unknown arch: $(uname -m)\"\n    fi\n    #choose from asset list\n    URL=\"\"\n    FTYPE=\"\"\n    case \"${OS}_${ARCH}\" in\n    \"linux_amd64\")\n        URL=\"https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz\"\n        FTYPE=\".tar.gz\"\n        ;;\n    \"darwin_amd64\")\n        URL=\"https://github.com/neovim/neovim/releases/download/stable/nvim-macos.tar.gz\"\n        FTYPE=\".tar.gz\"\n        ;;\n    *) fail \"No asset for platform ${OS}-${ARCH}\";;\n    esac\n    #got URL! download it...\n    echo -n \"Downloading\"\n    echo -n \" $USER/$PROG\"\n    if [ ! -z \"$RELEASE\" ]; then\n        echo -n \" $RELEASE\"\n    fi\n    if [ ! -z \"$ASPROG\" ]; then\n        echo -n \" as $ASPROG\"\n    fi\n    echo -n \" (${OS}/${ARCH})\"\n\n    echo \".....\"\n\n    #enter tempdir\n    mkdir -p $TMP_DIR\n    cd $TMP_DIR\n    if [[ $FTYPE = \".gz\" ]]; then\n        which gzip \u003e /dev/null || fail \"gzip is not installed\"\n        bash -c \"$GET $URL\" | gzip -d - \u003e $PROG || fail \"download failed\"\n    elif [[ $FTYPE = \".tar.bz\" ]] || [[ $FTYPE = \".tar.bz2\" ]]; then\n        which tar \u003e /dev/null || fail \"tar is not installed\"\n        which bzip2 \u003e /dev/null || fail \"bzip2 is not installed\"\n        bash -c \"$GET $URL\" | tar jxf - || fail \"download failed\"\n    elif [[ $FTYPE = \".tar.gz\" ]] || [[ $FTYPE = \".tgz\" ]]; then\n        which tar \u003e /dev/null || fail \"tar is not installed\"\n        which gzip \u003e /dev/null || fail \"gzip is not installed\"\n        bash -c \"$GET $URL\" | tar zxf - || fail \"download failed\"\n    elif [[ $FTYPE = \".zip\" ]]; then\n        which unzip \u003e /dev/null || fail \"unzip is not installed\"\n        bash -c \"$GET $URL\" \u003e tmp.zip || fail \"download failed\"\n        unzip -o -qq tmp.zip || fail \"unzip failed\"\n        rm tmp.zip || fail \"cleanup failed\"\n    elif [[ $FTYPE = \".bin\" ]]; then\n        bash -c \"$GET $URL\" \u003e \"neovim_${OS}_${ARCH}\" || fail \"download failed\"\n    else\n        fail \"unknown file type: $FTYPE\"\n    fi\n    #search subtree largest file (bin)\n    TMP_BIN=$(find . -type f | xargs du | sort -n | tail -n 1 | cut -f 2)\n    if [ ! -f \"$TMP_BIN\" ]; then\n        fail \"could not find find binary (largest file)\"\n    fi\n    #ensure its larger than 1MB\n    #TODO linux=elf/darwin=macho file detection?\n    if [[ $(du -m $TMP_BIN | cut -f1) -lt 1 ]]; then\n        fail \"no binary found ($TMP_BIN is not larger than 1MB)\"\n    fi\n    #move into PATH or cwd\n    chmod +x $TMP_BIN || fail \"chmod +x failed\"\n    DEST=\"$OUT_DIR/$PROG\"\n    if [ ! -z \"$ASPROG\" ]; then\n        DEST=\"$OUT_DIR/$ASPROG\"\n    fi\n    #move without sudo\n    OUT=$(mv $TMP_BIN $DEST 2\u003e\u00261)\n    STATUS=$?\n    # failed and string contains \"Permission denied\"\n    if [ $STATUS -ne 0 ]; then\n        if [[ $OUT =~ \"Permission denied\" ]]; then\n            echo \"mv with sudo...\"\n            sudo mv $TMP_BIN $DEST || fail \"sudo mv failed\"\n        else\n            fail \"mv failed ($OUT)\"\n        fi\n    fi\n    echo \"Downloaded to $DEST\"\n    #done\n    cleanup\n}\ninstall\n```\n\n## Self Host Your Own\n\nI'd reccomend self hosting your own. This way you know that it's consistent\nand unlikely to change in a way that breaks your use.\n\n```\ncurl -s https://i.jpillora.com/installer | bash\n```\n\n## Repos I am using installer for\n\nHere are the repos I am using installer for.\n\n```bash\natuinsh/atuin\nbenbjohnson/litestream\nbootandy/dust\nBurntSushi/ripgrep\nchmln/sd\ncjbassi/ytop\ndalance/procs\ndbrgn/tealdeer\nducaale/xh\ngo-task/task\nimsnif/bandwhich\nimsnif/diskonaut\nkovidgoyal/kitty\nmgdm/htmlq\nneovim/neovim\nogham/dog\nogham/exa\npemistahl/grex\nsharkdp/bat\nsharkdp/fd\nsharkdp/pastel\nsirwart/ripsecrets\nstarship/starship\ntopgrade-rs/topgrade\nzellij-org/zellij\n```\n",
      "summary": "jpillora/installer is the install script generator I have been looking for. It downloads binaries for your machine from GitHub releases and unzips them for...",
      "date_published": "2023-10-04T19:28:33Z",
      "date_modified": "2023-10-04T19:28:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastapi-static-content/",
      "url": "https://go.waylonwalker.com/fastapi-static-content/",
      "title": "how to host static content with fastapi",
      "content_html": "\u003cp\u003eI wanted to host some static files through \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. Typical use cases for this\nmight be some static web content like \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/css/js. It could also be images or\nsome data that doesn’t need dynamically rendered.\u003c/p\u003e\n\u003ch2 id=\"from-the-docs\"\u003eFrom the Docs \u003ca href=\"#from-the-docs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe docs cover how to host static files, and give this solution that is built\ninto fastapi.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://fastapi.tiangolo.com/tutorial/static-files/\" class=\"hoverlink  has-avatar has-avatar-before\" 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\"\u003ehttps://fastapi.tiangolo.com/tutorial/static-files/\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.staticfiles\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"authenticated-static-files\"\u003eAuthenticated Static Files \u003ca href=\"#authenticated-static-files\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eThanks to \u003ca href=\"https://github.com/tiangolo/fastapi/issues/858\" 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\"\u003e#858\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/OscartGiles\" 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\"\u003eOscartGiles\u003c/a\u003e posted this solution to add\nauthentication to static files. I tried this out on 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\u003c/a\u003e and it worked flawlessly.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etyping\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esecrets\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.staticfiles\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.security\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasic\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasicCredentials\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePathLike\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etyping\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eUnion\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;os.PathLike[str]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esecurity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasic\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003everify_username\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPBasicCredentials\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003esecurity\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecorrect_username\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esecrets\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecompare_digest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecorrect_password\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esecrets\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecompare_digest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecorrect_username\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003ecorrect_password\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_401_UNAUTHORIZED\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Incorrect email or password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;WWW-Authenticate\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Basic\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ecredentials\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eAuthStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003esuper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__call__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003escope\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereceive\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003escope\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;http\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003erequest\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003escope\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereceive\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"n\"\u003everify_username\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"nb\"\u003esuper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__call__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003escope\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereceive\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esend\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;/static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eAuthStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e__file__\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparent\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you want both then, all you have to do is mount \u003ccode\u003eAuthStaticFiles\u003c/code\u003e to a\ndifferent route. Now you can have private, or paid content behind\n\u003ccode\u003e/restricted\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;/restricted\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eAuthStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e__file__\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparent\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;restricted\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;restricted\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI wanted to host some static files through fastapi. Typical use cases for this\nmight be some static web content like html/css/js. It could also be images or\nsome data that doesn't need dynamically rendered.\n\n## From the Docs\n\nThe docs cover how to host static files, and give this solution that is built\ninto fastapi.\n\n[https://fastapi.tiangolo.com/tutorial/static-files/](https://fastapi.tiangolo.com/tutorial/static-files/){.hoverlink}\n\n```python\nfrom fastapi import FastAPI\nfrom fastapi.staticfiles import StaticFiles\n\napp = FastAPI()\n\napp.mount(\"/static\", StaticFiles(directory=\"static\"), name=\"static\")\n```\n\n## Authenticated Static Files\n\n_Thanks to [#858](https://github.com/tiangolo/fastapi/issues/858)._\n\n[OscartGiles](https://github.com/OscartGiles) posted this solution to add\nauthentication to static files. I tried this out on my\n[thoughts](https://thoughts.waylonwalker.com) and it worked flawlessly.\n\n```python\nimport typing\nfrom pathlib import Path\nimport secrets\n\nfrom fastapi import FastAPI, Request, HTTPException, status\nfrom fastapi.staticfiles import StaticFiles\nfrom fastapi.security import HTTPBasic, HTTPBasicCredentials\n\n\nPathLike = typing.Union[str, \"os.PathLike[str]\"]\napp = FastAPI()\nsecurity = HTTPBasic()\n\n\nasync def verify_username(request: Request) -\u003e HTTPBasicCredentials:\n\n    credentials = await security(request)\n\n    correct_username = secrets.compare_digest(credentials.username, \"user\")\n    correct_password = secrets.compare_digest(credentials.password, \"password\")\n    if not (correct_username and correct_password):\n        raise HTTPException(\n            status_code=status.HTTP_401_UNAUTHORIZED,\n            detail=\"Incorrect email or password\",\n            headers={\"WWW-Authenticate\": \"Basic\"},\n        )\n    return credentials.username\n\n\nclass AuthStaticFiles(StaticFiles):\n    def __init__(self, *args, **kwargs) -\u003e None:\n\n        super().__init__(*args, **kwargs)\n\n    async def __call__(self, scope, receive, send) -\u003e None:\n\n        assert scope[\"type\"] == \"http\"\n\n        request = Request(scope, receive)\n        await verify_username(request)\n        await super().__call__(scope, receive, send)\n\n\napp.mount(\n    \"/static\",\n    AuthStaticFiles(directory=Path(__file__).parent / \"static\"),\n    name=\"static\",\n)\n```\n\nIf you want both then, all you have to do is mount `AuthStaticFiles` to a\ndifferent route. Now you can have private, or paid content behind\n`/restricted`.\n\n```python\napp.mount(\"/static\", StaticFiles(directory=\"static\"), name=\"static\")\napp.mount(\n    \"/restricted\",\n    AuthStaticFiles(directory=Path(__file__).parent / \"restricted\"),\n    name=\"restricted\"\n)\n```\n",
      "summary": "I wanted to host some static files through fastapi. Typical use cases for this might be some static web content like html/css/js. It could also be images or...",
      "date_published": "2023-10-04T08:32:58Z",
      "date_modified": "2023-10-04T08:32:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-121/",
      "url": "https://go.waylonwalker.com/thought-121/",
      "title": "💭 Point-in-time recovery - Wikipedia",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://en.wikipedia.org/wiki/Point-in-time_recovery\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/en.wikipedia.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/en.wikipedia.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePoint-in-time recovery - Wikipedia\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003een.wikipedia.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI just learned that the term PITR means \u003cstrong\u003ePoint In Time Recovery\u003c/strong\u003e.  I have never seen this term, but it is most often referred to in relation to database recoveries.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://en.wikipedia.org/wiki/Point-in-time_recovery\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePoint-in-time recovery - Wikipedia\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003een.wikipedia.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI just learned that the term PITR means **Point In Time Recovery**.  I have never seen this term, but it is most often referred to in relation to database recoveries.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://en.wikipedia.org/wiki/Point-in-time_recovery",
      "date_published": "2023-10-03T13:25:36Z",
      "date_modified": "2023-10-03T13:25:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalyst",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-120/",
      "url": "https://go.waylonwalker.com/thought-120/",
      "title": "💭 DjangoCon Europe 2023 | Use SQLite in production - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"yTicYJDT1zE\" title=\"DjangoCon Europe 2023 | Use SQLite in production\" playlabel=\"Play: DjangoCon Europe 2023 | Use SQLite in production\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eVery inspiring talk, TLDR, you probably don’t need a database server.  sqlite will probably be faster, simpler to maintain, and simpler to test your application.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"yTicYJDT1zE\" title=\"DjangoCon Europe 2023 | Use SQLite in production\" playlabel=\"Play: DjangoCon Europe 2023 | Use SQLite in production\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nVery inspiring talk, TLDR, you probably don't need a database server.  sqlite will probably be faster, simpler to maintain, and simpler to test your application.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=yTicYJDT1zE\u0026t=2s",
      "date_published": "2023-10-03T13:22:19Z",
      "date_modified": "2023-10-03T13:22:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/set-up-minio-bucket-entrypoint/",
      "url": "https://go.waylonwalker.com/set-up-minio-bucket-entrypoint/",
      "title": "Set up minio bucket entrypoint",
      "content_html": "\u003cp\u003eI recently se tup minio object storage in my \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 for litestream sqlite\nbackups. The litestream quickstart made it easy to get everything up and\nrunning on localhost, but I hit a wall when dns was involved to pull it from a\ndifferent machine.\u003c/p\u003e\n\u003ch2 id=\"here-is-what-i-got-to-work\"\u003eHere is what I got to work \u003ca href=\"#here-is-what-i-got-to-work\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFirst I had to configure the Key ID and Secret Access Key generated in the\nminio ui.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ aws configure\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAWS Access Key ID \u003cspan class=\"o\"\u003e[\u003c/span\u003e****************VZnD\u003cspan class=\"o\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAWS Secret Access Key \u003cspan class=\"o\"\u003e[\u003c/span\u003e****************xAm8\u003cspan class=\"o\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDefault region name \u003cspan class=\"o\"\u003e[\u003c/span\u003eus-east-1\u003cspan class=\"o\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDefault output format \u003cspan class=\"o\"\u003e[\u003c/span\u003eNone\u003cspan class=\"o\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen set the the s3 signature_version to s3v4.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaws configure \u003cspan class=\"nb\"\u003eset\u003c/span\u003e default.s3.signature_version s3v4\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow when I have minio running on \u003ca href=\"https://my-minio-endpoint.com\"\u003ehttps://my-minio-endpoint.com\u003c/a\u003e I can use the\naws cli to access the bucket.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote that \u003ccode\u003ehttps://my-minio-endpoint.com\u003c/code\u003e resolves to the bucket endpoint\n(default 9000) not the ui (default 9001).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaws --endpoint-url https://my-minio-endpoint.com s3 ls my_bucket\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"now-configuring-litestream\"\u003eNow Configuring Litestream \u003ca href=\"#now-configuring-litestream\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLitestream also accepts the \u003ccode\u003eendpoint\u003c/code\u003e argument via config. I could not get it\nto work just with the ui.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote the \u003ccode\u003eaws configure\u003c/code\u003e step above is not required for litestream, only the\naws cli.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003edbs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/path/to/database.db\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ereplicas\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003es3://my_bucket/\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eendpoint\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://my-minio-endpoint.com\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eregion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eus-east-1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eaccess-key-id\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"cp\"\u003e****************VZnD\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003esecret-access-key\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"cp\"\u003e************************************xAm8\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow run a litestream replication.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elitestream replicate -config litestream.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or put the config in /etc/litestream.yml and just run replicate\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elitestream replicate\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI recently se tup minio object storage in my homelab for litestream sqlite\nbackups. The litestream quickstart made it easy to get everything up and\nrunning on localhost, but I hit a wall when dns was involved to pull it from a\ndifferent machine.\n\n## Here is what I got to work\n\nFirst I had to configure the Key ID and Secret Access Key generated in the\nminio ui.\n\n```bash\n❯ aws configure\nAWS Access Key ID [****************VZnD]:\nAWS Secret Access Key [****************xAm8]:\nDefault region name [us-east-1]:\nDefault output format [None]:\n```\n\nThen set the the s3 signature_version to s3v4.\n\n```bash\naws configure set default.s3.signature_version s3v4\n```\n\nNow when I have minio running on \u003chttps://my-minio-endpoint.com\u003e I can use the\naws cli to access the bucket.\n\n\u003e Note that `https://my-minio-endpoint.com` resolves to the bucket endpoint\n\u003e (default 9000) not the ui (default 9001).\n\n```bash\naws --endpoint-url https://my-minio-endpoint.com s3 ls my_bucket\n```\n\n## Now Configuring Litestream\n\nLitestream also accepts the `endpoint` argument via config. I could not get it\nto work just with the ui.\n\n\u003e Note the `aws configure` step above is not required for litestream, only the\n\u003e aws cli.\n\n```yaml\ndbs:\n  - path: /path/to/database.db\n    replicas:\n      - url: s3://my_bucket/\n        endpoint: https://my-minio-endpoint.com\n        region: us-east-1\n        access-key-id: ****************VZnD\n        secret-access-key: ************************************xAm8\n```\n\nNow run a litestream replication.\n\n```bash\nlitestream replicate -config litestream.yml\n# or put the config in /etc/litestream.yml and just run replicate\nlitestream replicate\n```\n",
      "summary": "I recently se tup minio object storage in my homelab for litestream sqlite backups. The litestream quickstart made it easy to get everything up and running...",
      "date_published": "2023-10-01T20:11:51Z",
      "date_modified": "2023-10-01T20:11:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "data"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-119/",
      "url": "https://go.waylonwalker.com/thought-119/",
      "title": "💭 benbjohnson/litestream: Streaming replication for SQLite.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/benbjohnson/litestream\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/301830590/24499800-6ac0-11eb-9dea-30c5cfa8cae0\" alt=\"GitHub - benbjohnson/litestream: Streaming replication for SQLite. — Streaming replication for SQLite. Contribute to benbjohnson/litestream development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - benbjohnson/litestream: Streaming replication for SQLite. — Streaming replication for SQLite. Contribute to benbjohnson/litestream development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - benbjohnson/litestream: Streaming replication for SQLite.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStreaming replication for SQLite. Contribute to benbjohnson/litestream development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e    `litestream` is a sick cli tool for steaming replicas of sqlite.  It automatically does daily snapshots, and streams all of the writes to the replica live.\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"install\"\u003einstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall is fast using installer, no compilation, just copy the binary and run.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://i.wayl.one/benbjohnson/litestream\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/benbjohnson/litestream\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/301830590/24499800-6ac0-11eb-9dea-30c5cfa8cae0\" alt=\"GitHub - benbjohnson/litestream: Streaming replication for SQLite. — Streaming replication for SQLite. Contribute to benbjohnson/litestream development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - benbjohnson/litestream: Streaming replication for SQLite.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStreaming replication for SQLite. Contribute to benbjohnson/litestream development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n        `litestream` is a sick cli tool for steaming replicas of sqlite.  It automatically does daily snapshots, and streams all of the writes to the replica live.\n\n\n## install\n\nInstall is fast using installer, no compilation, just copy the binary and run.\n\n``` bash\ncurl https://i.wayl.one/benbjohnson/litestream\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/benbjohnson/litestream",
      "date_published": "2023-10-01T02:19:18Z",
      "date_modified": "2023-10-01T02:19:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-118/",
      "url": "https://go.waylonwalker.com/thought-118/",
      "title": "💭 Why I Built Litestream - Litestream",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://litestream.io/blog/why-i-built-litestream/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/litestream.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/litestream.io.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhy I Built Litestream - Litestream\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDespite an exponential increase in computing power, our applications require more machines than ever because of architectural decisions made 25 years ago. You can eliminate much of your complexity ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elitestream.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAs applications scale to the edge, to put compute as close to the user as possible, database queries back to the master node get slower and slower.  Enter sqlite replication, put the database wtih the application code and replicate from master.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://litestream.io/blog/why-i-built-litestream/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWhy I Built Litestream - Litestream\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDespite an exponential increase in computing power, our applications require more machines than ever because of architectural decisions made 25 years ago. You can eliminate much of your complexity ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elitestream.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAs applications scale to the edge, to put compute as close to the user as possible, database queries back to the master node get slower and slower.  Enter sqlite replication, put the database wtih the application code and replicate from master.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://litestream.io/blog/why-i-built-litestream/",
      "date_published": "2023-09-30T16:16:47Z",
      "date_modified": "2023-09-30T16:16:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-117/",
      "url": "https://go.waylonwalker.com/thought-117/",
      "title": "💭 I'm All-In on Server-Side SQLite · The Fly Blog",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fly.io/blog/all-in-on-sqlite-litestream/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fly.io/blog/all-in-on-sqlite-litestream/assets/litestream-cover.webp\" alt=\"I\u0026#39;m All-In on Server-Side SQLite — Ben Johnson has joined Fly.io\" loading=\"lazy\"/ data-glightbox=\"description: I\u0026#39;m All-In on Server-Side SQLite — Ben Johnson has joined Fly.io\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI\u0026#39;m All-In on Server-Side SQLite\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBen Johnson has joined Fly.io\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFly · fly.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSQLite is the next big database trend.  with more horizontal scaling, close to user read heavy applications, having your database in the same application stack makes a lot of sense.  Tools like litestream are going to enable global distribution in an impressive way.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fly.io/blog/all-in-on-sqlite-litestream/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fly.io/blog/all-in-on-sqlite-litestream/assets/litestream-cover.webp\" alt=\"I\u0026#39;m All-In on Server-Side SQLite — Ben Johnson has joined Fly.io\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eI\u0026#39;m All-In on Server-Side SQLite\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBen Johnson has joined Fly.io\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFly \u0026middot; fly.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSQLite is the next big database trend.  with more horizontal scaling, close to user read heavy applications, having your database in the same application stack makes a lot of sense.  Tools like litestream are going to enable global distribution in an impressive way.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fly.io/blog/all-in-on-sqlite-litestream/",
      "date_published": "2023-09-30T14:54:33Z",
      "date_modified": "2023-09-30T14:54:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-116/",
      "url": "https://go.waylonwalker.com/thought-116/",
      "title": "💭 LiteFS Cloud: Distributed SQLite with Managed Backups · The Fl...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fly.io/blog/litefs-cloud/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fly.io/blog/litefs-cloud/assets/litefs-cloud-cover.webp\" alt=\"LiteFS Cloud: Distributed SQLite with Managed Backups — Documentation and guides from the team at Fly.io.\" loading=\"lazy\"/ data-glightbox=\"description: LiteFS Cloud: Distributed SQLite with Managed Backups — Documentation and guides from the team at Fly.io.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLiteFS Cloud: Distributed SQLite with Managed Backups\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation and guides from the team at Fly.io.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFly · fly.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eFly.io’s solution to sqlite managed backups.I definitely want to look into this a bit, but moreso the tech under the hook litestream.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fly.io/blog/litefs-cloud/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fly.io/blog/litefs-cloud/assets/litefs-cloud-cover.webp\" alt=\"LiteFS Cloud: Distributed SQLite with Managed Backups — Documentation and guides from the team at Fly.io.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLiteFS Cloud: Distributed SQLite with Managed Backups\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDocumentation and guides from the team at Fly.io.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFly \u0026middot; fly.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nFly.io's solution to sqlite managed backups.I definitely want to look into this a bit, but moreso the tech under the hook litestream.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fly.io/blog/litefs-cloud/",
      "date_published": "2023-09-30T14:49:41Z",
      "date_modified": "2023-09-30T14:49:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/benbjohnson-litestream/",
      "url": "https://go.waylonwalker.com/benbjohnson-litestream/",
      "title": "⭐ benbjohnson litestream",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/benbjohnson/litestream\" 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\"\u003elitestream\u003c/a\u003e, created by \u003ca href=\"https://github.com/benbjohnson\" 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\"\u003ebenbjohnson\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eStreaming replication for SQLite.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [litestream](https://github.com/benbjohnson/litestream), created by [benbjohnson](https://github.com/benbjohnson).\n\nStreaming replication for SQLite.\n",
      "summary": "If you're into interesting projects, don't miss out on litestream, created by benbjohnson.",
      "date_published": "2023-09-29T02:48:37Z",
      "date_modified": "2023-09-29T02:48:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/laixintao-flameshow/",
      "url": "https://go.waylonwalker.com/laixintao-flameshow/",
      "title": "⭐ laixintao flameshow",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/laixintao/flameshow\" 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\"\u003eflameshow\u003c/a\u003e from \u003ca href=\"https://github.com/laixintao\" 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\"\u003elaixintao\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA terminal Flamegraph viewer.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [flameshow](https://github.com/laixintao/flameshow) from [laixintao](https://github.com/laixintao).\n\nA terminal Flamegraph viewer.\n",
      "summary": "I'm impressed by flameshow from laixintao.",
      "date_published": "2023-09-25T17:49:49Z",
      "date_modified": "2023-09-25T17:49:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jpillora-installer/",
      "url": "https://go.waylonwalker.com/jpillora-installer/",
      "title": "⭐ jpillora installer",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/jpillora/installer\" 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\"\u003einstaller\u003c/a\u003e by \u003ca href=\"https://github.com/jpillora\" 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\"\u003ejpillora\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eOne-liner for installing binaries from Github releases\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [installer](https://github.com/jpillora/installer) by [jpillora](https://github.com/jpillora).\n\nOne-liner for installing binaries from Github releases\n",
      "summary": "Looking for inspiration? installer by jpillora.",
      "date_published": "2023-09-23T15:30:56Z",
      "date_modified": "2023-09-23T15:30:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-115/",
      "url": "https://go.waylonwalker.com/thought-115/",
      "title": "💭 jpillora/installer: One-liner for installing binaries from Git...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jpillora/installer\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/9089fd8c6e317b93bf36115eaafa985dddfd346a255809da257f56c3c8debe1e/jpillora/installer\" alt=\"GitHub - jpillora/installer: One-liner for installing binaries from Github releases — One-liner for installing binaries from Github releases - jpillora/installer\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - jpillora/installer: One-liner for installing binaries from Github releases — One-liner for installing binaries from Github releases - jpillora/installer\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - jpillora/installer: One-liner for installing binaries from Github releases\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOne-liner for installing binaries from Github releases - jpillora/installer\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is a sick looking bash script generator for installing binaries off of github releases.  it reccomends curl into bash, but you could curl into install.sh  and toss that in your dotfiles repo or wherever.\u003c/p\u003e\n\u003cp\u003eInstall installer with installer\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -s https://i.jpillora.com/installer \u003cspan class=\"p\"\u003e|\u003c/span\u003e bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jpillora/installer\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/9089fd8c6e317b93bf36115eaafa985dddfd346a255809da257f56c3c8debe1e/jpillora/installer\" alt=\"GitHub - jpillora/installer: One-liner for installing binaries from Github releases — One-liner for installing binaries from Github releases - jpillora/installer\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - jpillora/installer: One-liner for installing binaries from Github releases\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eOne-liner for installing binaries from Github releases - jpillora/installer\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is a sick looking bash script generator for installing binaries off of github releases.  it reccomends curl into bash, but you could curl into install.sh  and toss that in your dotfiles repo or wherever.\n\nInstall installer with installer\n\n``` bash\ncurl -s https://i.jpillora.com/installer | bash\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/jpillora/installer",
      "date_published": "2023-09-23T00:59:09Z",
      "date_modified": "2023-09-23T00:59:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "installer",
        "github",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-114/",
      "url": "https://go.waylonwalker.com/thought-114/",
      "title": "💭 How to run pods as systemd services with Podman | Enable Sysadmin",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.redhat.com/en/blog/podman-run-pods-systemd-services\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.redhat.com/rhdc/managed-files/sysadmin/2021-02/toolbox-container.jpg\" alt=\"How to run pods as systemd services with Podman — Podman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...\" loading=\"lazy\"/ data-glightbox=\"description: How to run pods as systemd services with Podman — Podman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to run pods as systemd services with Podman\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePodman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eredhat.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epodman comes with a nice command for generating systemd service files (units).\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ podman pod create --name\u003cspan class=\"o\"\u003e=\u003c/span\u003emy-pod\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e635bcc5bb5aa0a45af4c2f5a508ebd6a02b93e69324197a06d02a12873b6d1f7\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ podman create --pod\u003cspan class=\"o\"\u003e=\u003c/span\u003emy-pod --name\u003cspan class=\"o\"\u003e=\u003c/span\u003econtainer-a -t centos top\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ec04be9c4ac1c93473499571f3c2ad74deb3e0c14f4f00e89c7be3643368daf0e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ podman create --pod\u003cspan class=\"o\"\u003e=\u003c/span\u003emy-pod --name\u003cspan class=\"o\"\u003e=\u003c/span\u003econtainer-b -t centos top\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eb42314b2deff99f5877e76058ac315b97cfb8dc40ed02f9b1b87f21a0cf2fbff\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e/.config/systemd/user\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ podman generate systemd --new --files --name my-pod\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/vrothberg/.config/systemd/user/pod-my-pod.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/vrothberg/.config/systemd/user/container-container-b.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/vrothberg/.config/systemd/user/container-container-a.service\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.redhat.com/en/blog/podman-run-pods-systemd-services\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.redhat.com/rhdc/managed-files/sysadmin/2021-02/toolbox-container.jpg\" alt=\"How to run pods as systemd services with Podman — Podman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to run pods as systemd services with Podman\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePodman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eredhat.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npodman comes with a nice command for generating systemd service files (units).\n\n``` bash\n$ podman pod create --name=my-pod\n635bcc5bb5aa0a45af4c2f5a508ebd6a02b93e69324197a06d02a12873b6d1f7\n\n$ podman create --pod=my-pod --name=container-a -t centos top\nc04be9c4ac1c93473499571f3c2ad74deb3e0c14f4f00e89c7be3643368daf0e\n\n$ podman create --pod=my-pod --name=container-b -t centos top\nb42314b2deff99f5877e76058ac315b97cfb8dc40ed02f9b1b87f21a0cf2fbff\n\n$ cd $HOME/.config/systemd/user\n\n$ podman generate systemd --new --files --name my-pod\n/home/vrothberg/.config/systemd/user/pod-my-pod.service\n/home/vrothberg/.config/systemd/user/container-container-b.service\n/home/vrothberg/.config/systemd/user/container-container-a.service\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.redhat.com/en/blog/podman-run-pods-systemd-services",
      "date_published": "2023-09-22T01:12:19Z",
      "date_modified": "2023-09-22T01:12:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "podman",
        "container",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mordechaihadad-bob/",
      "url": "https://go.waylonwalker.com/mordechaihadad-bob/",
      "title": "⭐ MordechaiHadad bob",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/MordechaiHadad\" 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\"\u003eMordechaiHadad’s\u003c/a\u003e project \u003ca href=\"https://github.com/MordechaiHadad/bob\" 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\"\u003ebob\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA version manager for neovim\u003c/p\u003e\n",
      "content_text": "\nI like [MordechaiHadad's](https://github.com/MordechaiHadad) project [bob](https://github.com/MordechaiHadad/bob).\n\nA version manager for neovim\n",
      "summary": "I like MordechaiHadad's project bob.",
      "date_published": "2023-09-20T17:41:09Z",
      "date_modified": "2023-09-20T17:41:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/makeplane-plane/",
      "url": "https://go.waylonwalker.com/makeplane-plane/",
      "title": "⭐ makeplane plane",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/makeplane\" 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\"\u003emakeplane\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/makeplane/plane\" 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\"\u003eplane\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003e🔥 🔥 🔥 Open Source JIRA, Linear, Monday, and Asana Alternative. Plane helps you track your issues, epics, and product roadmaps in the simplest way possible.\u003c/p\u003e\n",
      "content_text": "\n[makeplane](https://github.com/makeplane) has done a fantastic job with [plane](https://github.com/makeplane/plane). Highly recommend taking a look.\n\n🔥 🔥 🔥 Open Source JIRA, Linear, Monday, and Asana Alternative. Plane helps you track your issues, epics, and product roadmaps in the simplest way possible.\n",
      "summary": "makeplane has done a fantastic job with plane. Highly recommend taking a look.",
      "date_published": "2023-09-20T01:32:34Z",
      "date_modified": "2023-09-20T01:32:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-112/",
      "url": "https://go.waylonwalker.com/thought-112/",
      "title": "💭 Pagefind | Pagefind — Static low-bandwidth search at scale",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pagefind.app/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pagefind.app.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pagefind.app.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePagefind\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePagefind is a fully static search library that aims to perform well on large sites, while using as little of your users’ bandwidth as possible, and without hosting any infrastructure.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePagefind · pagefind.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ePagefind is absolutely insane.  I’ve tried a number of static site searches, and found them all hard to get get going, clunky and not the best experience as a user or developer.\u003c/p\u003e\n\u003cp\u003eI setup pagefind in about 2 minutes on my site where it found and indexed 833 pages in 2 minutes.\u003c/p\u003e\n\u003cp\u003eThe only downside I see so far is that it is a lot of bandwidth to the user.  On simulated slow 3G you can definitly feel it, but not terrible.  Anything slower and its going to start feeling frustrating.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eedit: I have actually fully deployed it on waylonwalker.com, and its fast!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ecreate the index\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx -y pagefind --site public --serve\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen I put this on a page, it looks really nice on a white background, but would need some work to drop into a dark theme.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elink\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/pagefind/pagefind-ui.css\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/pagefind/pagefind-ui.js\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;search\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003ewindow\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eaddEventListener\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;DOMContentLoaded\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eevent\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nx\"\u003ePagefindUI\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e \u003cspan class=\"nx\"\u003eelement\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;#search\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003eshowSubResults\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pagefind.app/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePagefind\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePagefind is a fully static search library that aims to perform well on large sites, while using as little of your users’ bandwidth as possible, and without hosting any infrastructure.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePagefind \u0026middot; pagefind.app\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nPagefind is absolutely insane.  I've tried a number of static site searches, and found them all hard to get get going, clunky and not the best experience as a user or developer.\n\nI setup pagefind in about 2 minutes on my site where it found and indexed 833 pages in 2 minutes.\n\nThe only downside I see so far is that it is a lot of bandwidth to the user.  On simulated slow 3G you can definitly feel it, but not terrible.  Anything slower and its going to start feeling frustrating.\n\n\u003e edit: I have actually fully deployed it on waylonwalker.com, and its fast!\n\ncreate the index\n\n``` bash\nnpx -y pagefind --site public --serve\n```\n\nThen I put this on a page, it looks really nice on a white background, but would need some work to drop into a dark theme.\n\n``` html\n\u003clink href=\"/pagefind/pagefind-ui.css\" rel=\"stylesheet\"\u003e\n\u003cscript src=\"/pagefind/pagefind-ui.js\"\u003e\u003c/script\u003e\n\u003cdiv id=\"search\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n    window.addEventListener('DOMContentLoaded', (event) =\u003e {\n        new PagefindUI({ element: \"#search\", showSubResults: true });\n    });\n\u003c/script\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pagefind.app/",
      "date_published": "2023-09-20T01:04:41Z",
      "date_modified": "2023-09-20T01:04:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "search",
        "wasm",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ahmedkhalf-project-nvim/",
      "url": "https://go.waylonwalker.com/ahmedkhalf-project-nvim/",
      "title": "⭐ ahmedkhalf project.nvim",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/ahmedkhalf/project.nvim\" 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\"\u003eproject.nvim\u003c/a\u003e, created by \u003ca href=\"https://github.com/ahmedkhalf\" 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\"\u003eahmedkhalf\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe superior project management solution for neovim.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [project.nvim](https://github.com/ahmedkhalf/project.nvim), created by [ahmedkhalf](https://github.com/ahmedkhalf).\n\nThe superior project management solution for neovim.\n",
      "summary": "If you're into interesting projects, don't miss out on project.nvim, created by ahmedkhalf.",
      "date_published": "2023-09-19T11:46:17Z",
      "date_modified": "2023-09-19T11:46:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tailwind-and-jinja/",
      "url": "https://go.waylonwalker.com/tailwind-and-jinja/",
      "title": "Setup Tailwind for Jinja",
      "content_html": "\u003cp\u003eI’ve recently given tailwindcss a second chance and am really liking it. Here\nis how I set it up for my python based projects.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://waylonwalker.com/a-case-for-tailwindcss\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\"\u003ehttps://waylonwalker.com/a-case-for-tailwindcss\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003enpm\u003c/code\u003e is used to install the cli that you will need to configure and compile tailwindcss.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpm install -g tailwindcss-cli\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need to create a tailwind.config.js file, to get this you can use the cli.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx tailwindcss init\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-tailwind-with-jinja-templates\"\u003eUsing tailwind with jinja templates \u003ca href=\"#using-tailwind-with-jinja-templates\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo set up tailwind to work with jinja templates you will need to point the\ntailwind config content to your jinja templates directory.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003emodule\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eexports\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nx\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates/**/*.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"setting-up-the-base-styles\"\u003eSetting up the base styles \u003ca href=\"#setting-up-the-base-styles\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI like to use the \u003ccode\u003e@tailwind base;\u003c/code\u003e, to do this I set up an input.css file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003etailwind\u003c/span\u003e \u003cspan class=\"nt\"\u003ebase\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003etailwind\u003c/span\u003e \u003cspan class=\"nt\"\u003ecomponents\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003etailwind\u003c/span\u003e \u003cspan class=\"nt\"\u003eutilities\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"compiling\"\u003eCompiling \u003ca href=\"#compiling\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that it’s all setup you can run the tailwindcss command. You will get an\noutput.css with base tailwind plus any of the classes that you used.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etailwindcss -i ./input.css -o ./output.css --watch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've recently given tailwindcss a second chance and am really liking it. Here\nis how I set it up for my python based projects.\n\n[https://waylonwalker.com/a-case-for-tailwindcss](https://waylonwalker.com/a-case-for-tailwindcss){.hoverlink}\n\n## Installation\n\n`npm` is used to install the cli that you will need to configure and compile tailwindcss.\n\n```sh\nnpm install -g tailwindcss-cli\n```\n\n## Setup\n\nYou will need to create a tailwind.config.js file, to get this you can use the cli.\n\n```sh\nnpx tailwindcss init\n```\n\n## Using tailwind with jinja templates\n\nTo set up tailwind to work with jinja templates you will need to point the\ntailwind config content to your jinja templates directory.\n\n```js\nmodule.exports = {\n  content: [\"templates/**/*.html\"],\n};\n```\n\n## Setting up the base styles\n\nI like to use the `@tailwind base;`, to do this I set up an input.css file.\n\n```css\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n```\n\n## Compiling\n\nNow that it's all setup you can run the tailwindcss command. You will get an\noutput.css with base tailwind plus any of the classes that you used.\n\n```sh\ntailwindcss -i ./input.css -o ./output.css --watch\n```\n",
      "summary": "I've recently given tailwindcss a second chance and am really liking it. Here is how I set it up for my python based projects.",
      "date_published": "2023-09-17T17:10:32Z",
      "date_modified": "2023-09-17T17:10:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-111/",
      "url": "https://go.waylonwalker.com/thought-111/",
      "title": "💭 Bo Burnham, I mean Miriah, says lower your programming expecta...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"J8rbUHDlZ7k\" title=\"Bo Burnham, I mean Miriah, says lower your programming expectations a lot...\" playlabel=\"Play: Bo Burnham, I mean Miriah, says lower your programming expectations a lot...\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eDang Mariah, killing it with continuous learning perspective.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"J8rbUHDlZ7k\" title=\"Bo Burnham, I mean Miriah, says lower your programming expectations a lot...\" playlabel=\"Play: Bo Burnham, I mean Miriah, says lower your programming expectations a lot...\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nDang Mariah, killing it with continuous learning perspective.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/J8rbUHDlZ7k",
      "date_published": "2023-09-13T18:51:55Z",
      "date_modified": "2023-09-13T18:51:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-110/",
      "url": "https://go.waylonwalker.com/thought-110/",
      "title": "💭 Simon Willison on X: \"Anyone got a lead on a good embedding mo...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/simonw/status/1700528222382027039\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eKinda mindblown that this is even possible.  This is so far outside of my current thinking that i didn’t even think of an elegant way to implement semantic search accross images and text at the same time.  I know it happens at Google, but I envision that as still text search accross tags and meta data about the image.\u003c/p\u003e\n\u003cp\u003eBased on the number of responses CLIP is the thing that does this.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/simonw/status/1700528222382027039\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nKinda mindblown that this is even possible.  This is so far outside of my current thinking that i didn't even think of an elegant way to implement semantic search accross images and text at the same time.  I know it happens at Google, but I envision that as still text search accross tags and meta data about the image.\n\nBased on the number of responses CLIP is the thing that does this.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/simonw/status/1700528222382027039",
      "date_published": "2023-09-10T00:05:15Z",
      "date_modified": "2023-09-10T00:05:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-textual-web/",
      "url": "https://go.waylonwalker.com/textualize-textual-web/",
      "title": "⭐ Textualize textual-web",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/Textualize/textual-web\" 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\"\u003etextual-web\u003c/a\u003e from \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eRun TUIs and terminals in your browser\u003c/p\u003e\n",
      "content_text": "\nI came across [textual-web](https://github.com/Textualize/textual-web) from [Textualize](https://github.com/Textualize), and it's packed with great features and ideas.\n\nRun TUIs and terminals in your browser\n",
      "summary": "I came across textual-web from Textualize, and it's packed with great features and ideas.",
      "date_published": "2023-09-08T19:26:42Z",
      "date_modified": "2023-09-08T19:26:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-109/",
      "url": "https://go.waylonwalker.com/thought-109/",
      "title": "💭 aca/emmet-ls: Emmet support based on LSP.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/aca/emmet-ls\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/dbcd7936962689a857bc9f3c10934afaceced969997bea20f82496e8ed6034e2/aca/emmet-ls\" alt=\"GitHub - aca/emmet-ls: Emmet support based on LSP. — Emmet support based on LSP. Contribute to aca/emmet-ls development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - aca/emmet-ls: Emmet support based on LSP. — Emmet support based on LSP. Contribute to aca/emmet-ls development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - aca/emmet-ls: Emmet support based on LSP.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEmmet support based on LSP. Contribute to aca/emmet-ls development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThis is the greatest nvim emmet plugin I have tried.  In the past I had tried the vim plugin a few times and just could not get a good flow with the keybindings and found it confusing for my occasional use.  \u003ccode\u003eemmet-ls\u003c/code\u003e just uses lsp-completion, so its the same flow as other completions.\u003c/p\u003e\n\u003cp\u003eYou can try it out by installing with \u003ccode\u003e:Mason\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"config\"\u003econfig \u003ca href=\"#config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003elspconfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;lspconfig\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003econfigs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;lspconfig/configs\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003ecapabilities\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003evim.lsp\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprotocol.make_client_capabilities\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecapabilities.textDocument\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecompletion.completionItem\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esnippetSupport\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elspconfig.emmet_ls\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e-- on_attach = on_attach,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecapabilities\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecapabilities\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efiletypes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;css\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;eruby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;javascript\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;javascriptreact\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;less\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sass\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scss\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;svelte\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pug\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;typescriptreact\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vue\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003einit_options\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ehtml\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eoptions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"c1\"\u003e-- For possible options, see: https://github.com/emmetio/emmet/blob/master/src/config.ts#L79-L267\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;bem.enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/aca/emmet-ls\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/dbcd7936962689a857bc9f3c10934afaceced969997bea20f82496e8ed6034e2/aca/emmet-ls\" alt=\"GitHub - aca/emmet-ls: Emmet support based on LSP. — Emmet support based on LSP. Contribute to aca/emmet-ls development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - aca/emmet-ls: Emmet support based on LSP.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eEmmet support based on LSP. Contribute to aca/emmet-ls development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThis is the greatest nvim emmet plugin I have tried.  In the past I had tried the vim plugin a few times and just could not get a good flow with the keybindings and found it confusing for my occasional use.  `emmet-ls` just uses lsp-completion, so its the same flow as other completions.\n\nYou can try it out by installing with `:Mason`\n\n## config\n\n``` lua\nlocal lspconfig = require('lspconfig')\nlocal configs = require('lspconfig/configs')\nlocal capabilities = vim.lsp.protocol.make_client_capabilities()\ncapabilities.textDocument.completion.completionItem.snippetSupport = true\n\nlspconfig.emmet_ls.setup({\n    -- on_attach = on_attach,\n    capabilities = capabilities,\n    filetypes = { \"css\", \"eruby\", \"html\", \"javascript\", \"javascriptreact\", \"less\", \"sass\", \"scss\", \"svelte\", \"pug\", \"typescriptreact\", \"vue\" },\n    init_options = {\n      html = {\n        options = {\n          -- For possible options, see: https://github.com/emmetio/emmet/blob/master/src/config.ts#L79-L267\n          [\"bem.enabled\"] = true,\n        },\n      },\n    }\n})\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/aca/emmet-ls",
      "date_published": "2023-09-08T12:34:38Z",
      "date_modified": "2023-09-08T12:34:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-108/",
      "url": "https://go.waylonwalker.com/thought-108/",
      "title": "💭 LLM now provides tools for working with embeddings",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2023/Sep/4/llm-embeddings/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.simonwillison.net/static/2023/wordcamp-llms/llm-work-for-you.055.jpeg\" alt=\"LLM now provides tools for working with embeddings — LLM is my Python library and command-line tool for working with language models. I just released LLM 0.9 with a new set of features that extend LLM to provide tools …\" loading=\"lazy\"/ data-glightbox=\"description: LLM now provides tools for working with embeddings — LLM is my Python library and command-line tool for working with language models. I just released LLM 0.9 with a new set of features that extend LLM to provide tools …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLLM now provides tools for working with embeddings\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLLM is my Python library and command-line tool for working with language models. I just released LLM 0.9 with a new set of features that extend LLM to provide tools …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSimon’s llm cli is getting quite interesting.  I really want to run some clustering on my website content.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2023/Sep/4/llm-embeddings/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.simonwillison.net/static/2023/wordcamp-llms/llm-work-for-you.055.jpeg\" alt=\"LLM now provides tools for working with embeddings — LLM is my Python library and command-line tool for working with language models. I just released LLM 0.9 with a new set of features that extend LLM to provide tools …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLLM now provides tools for working with embeddings\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLLM is my Python library and command-line tool for working with language models. I just released LLM 0.9 with a new set of features that extend LLM to provide tools …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSimon's llm cli is getting quite interesting.  I really want to run some clustering on my website content.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2023/Sep/4/llm-embeddings/",
      "date_published": "2023-09-07T00:35:55Z",
      "date_modified": "2023-09-07T00:35:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "llm",
        "ai",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-107/",
      "url": "https://go.waylonwalker.com/thought-107/",
      "title": "💭 Formatter",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://biomejs.dev/formatter/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://biomejs.dev/og/formatter.png\" alt=\"Formatter — How to use the Biome formatter.\" loading=\"lazy\"/ data-glightbox=\"description: Formatter — How to use the Biome formatter.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFormatter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to use the Biome formatter.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBiome · biomejs.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eTried out biome today and it worked better than prettier on jinja templates, I might adopt this over prettier.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://biomejs.dev/formatter/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://biomejs.dev/og/formatter.png\" alt=\"Formatter — How to use the Biome formatter.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFormatter\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHow to use the Biome formatter.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBiome \u0026middot; biomejs.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nTried out biome today and it worked better than prettier on jinja templates, I might adopt this over prettier.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://biomejs.dev/formatter/",
      "date_published": "2023-09-07T00:32:00Z",
      "date_modified": "2023-09-07T00:32:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/genmon-aboutfeeds/",
      "url": "https://go.waylonwalker.com/genmon-aboutfeeds/",
      "title": "⭐ genmon aboutfeeds",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/genmon/aboutfeeds\" 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\"\u003eaboutfeeds\u003c/a\u003e by \u003ca href=\"https://github.com/genmon\" 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\"\u003egenmon\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eWeb feeds/RSS “getting started” guide for new users.\u003c/p\u003e\n",
      "content_text": "\nCheck out [aboutfeeds](https://github.com/genmon/aboutfeeds) by [genmon](https://github.com/genmon). It's a well-crafted project with great potential.\n\nWeb feeds/RSS \"getting started\" guide for new users.\n",
      "summary": "Check out aboutfeeds by genmon. It's a well-crafted project with great potential.",
      "date_published": "2023-09-02T17:49:43Z",
      "date_modified": "2023-09-02T17:49:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-106/",
      "url": "https://go.waylonwalker.com/thought-106/",
      "title": "💭 \u003c/\u003e htmx ~ The disable-element Extension",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://v1.htmx.org/extensions/disable-element/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ The disable-element Extension\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ev1.htmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAn extension to disable elements during flight of an \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e request, Looks super useful for things like a create or delete button where the server would end up with an error if you double delete or double create.  This eliminates an error path that the user might see under normal use of the ui.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://v1.htmx.org/extensions/disable-element/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ The disable-element Extension\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ev1.htmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAn extension to disable elements during flight of an htmx request, Looks super useful for things like a create or delete button where the server would end up with an error if you double delete or double create.  This eliminates an error path that the user might see under normal use of the ui.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://v1.htmx.org/extensions/disable-element/",
      "date_published": "2023-09-02T17:02:58Z",
      "date_modified": "2023-09-02T17:02:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-105/",
      "url": "https://go.waylonwalker.com/thought-105/",
      "title": "💭 \u003c/\u003e htmx ~ hx-indicator Attribute",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/attributes/hx-indicator/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ hx-indicator Attribute\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe hx-indicator attribute in htmx allows you to specify the element that will have the `htmx-request` class added to it for the duration of the request. This can be used to show spinners or progre...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003ccode\u003ehtmx-request\u003c/code\u003e class is added to \u003ccode\u003ehtmx-target\u003c/code\u003e elements.  You can target this css selector to create  loading state throbbers.\u003c/p\u003e\n\u003cp\u003eBy default the target element will the \u003ccode\u003eself\u003c/code\u003e, but you can use the typical \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e css selector to select which element will recieve the \u003ccode\u003ehtmx-request\u003c/code\u003e class while the request is running.\u003c/p\u003e\n\u003cp\u003eThe only way to override the name of the class is through config.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/attributes/hx-indicator/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ hx-indicator Attribute\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe hx-indicator attribute in htmx allows you to specify the element that will have the `htmx-request` class added to it for the duration of the request. This can be used to show spinners or progre...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThe `htmx-request` class is added to `htmx-target` elements.  You can target this css selector to create  loading state throbbers.\n\nBy default the target element will the `self`, but you can use the typical htmx css selector to select which element will recieve the `htmx-request` class while the request is running.\n\nThe only way to override the name of the class is through config.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/attributes/hx-indicator/",
      "date_published": "2023-09-02T16:59:30Z",
      "date_modified": "2023-09-02T16:59:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-104/",
      "url": "https://go.waylonwalker.com/thought-104/",
      "title": "💭 The Truth About HTMX | Prime Reacts - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2hMrk7A8Wf0\" title=\"The Truth About \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003eHTMX\u003c/a\u003e | Prime Reacts\" playlabel=\"Play: The Truth About HTMX | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003ePrime concisely made sense of why htmx is so awesome compared to what has become modern reactive web dev in 2 minutes.  I had never thought of it this way and it’s incredible.\u003c/p\u003e\n\u003cp\u003eOne thing I have comepletely missed out on with my use of htmx is setting the disabled state while the server is working, what a genius move!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"2hMrk7A8Wf0\" title=\"The Truth About HTMX | Prime Reacts\" playlabel=\"Play: The Truth About HTMX | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nPrime concisely made sense of why htmx is so awesome compared to what has become modern reactive web dev in 2 minutes.  I had never thought of it this way and it's incredible.\n\nOne thing I have comepletely missed out on with my use of htmx is setting the disabled state while the server is working, what a genius move!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=2hMrk7A8Wf0\u0026t=2081s",
      "date_published": "2023-09-01T19:02:47Z",
      "date_modified": "2023-09-01T19:02:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-103/",
      "url": "https://go.waylonwalker.com/thought-103/",
      "title": "💭 \u003c/\u003e htmx ~ Examples ~ Updating Other Content",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/examples/update-other-content/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ Examples ~ Updating Other Content\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eThree ways to support updating other content.  Fantastic article walking through the different ways to update other parts of the screen using \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIn htmx there is no 2 way data binding, the dom is your state, and if you have elements derived from the same data on the screen in different places you need to think about how to keep them in sync.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/examples/update-other-content/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ Examples ~ Updating Other Content\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nThree ways to support updating other content.  Fantastic article walking through the different ways to update other parts of the screen using htmx.\n\nIn htmx there is no 2 way data binding, the dom is your state, and if you have elements derived from the same data on the screen in different places you need to think about how to keep them in sync.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/examples/update-other-content/",
      "date_published": "2023-08-26T01:03:10Z",
      "date_modified": "2023-08-26T01:03:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "htmx",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-102/",
      "url": "https://go.waylonwalker.com/thought-102/",
      "title": "💭 Bigger Applications - Multiple Files - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/bigger-applications/#another-module-with-apirouter\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/bigger-applications.png\" alt=\"Bigger Applications - Multiple Files - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Bigger Applications - Multiple Files - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBigger Applications - Multiple Files - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\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 lets you tag your \u003ccode\u003eAPIRouter\u003c/code\u003e’s so that the swagger docs are grouped according to the router.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erouter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eAPIRouter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;router\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow all routes in \u003ccode\u003erouter\u003c/code\u003e will appear in the router group in the swagger docs.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/bigger-applications/#another-module-with-apirouter\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/bigger-applications.png\" alt=\"Bigger Applications - Multiple Files - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eBigger Applications - Multiple Files - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n Fastapi lets you tag your `APIRouter`'s so that the swagger docs are grouped according to the router.\n\n``` python\nrouter = APIRouter(tags=['router'])\n```\n\nNow all routes in `router` will appear in the router group in the swagger docs.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/bigger-applications/#another-module-with-apirouter",
      "date_published": "2023-08-24T14:51:23Z",
      "date_modified": "2023-08-24T14:51:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "api",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-100/",
      "url": "https://go.waylonwalker.com/thought-100/",
      "title": "💭 Custom pages and templates - Datasette documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.datasette.io/en/stable/custom_templates.html#serving-static-files\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.datasette.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.datasette.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCustom pages and templates - Datasette documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eDatasette has its own static server that can host assets such as style sheets.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edatasette -m metadata.json --static assets:static-files/ \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.datasette.io/en/stable/custom_templates.html#serving-static-files\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCustom pages and templates - Datasette documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nDatasette has its own static server that can host assets such as style sheets.\n\n\n``` bash\ndatasette -m metadata.json --static assets:static-files/ \n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.datasette.io/en/stable/custom_templates.html#serving-static-files",
      "date_published": "2023-08-23T14:37:27Z",
      "date_modified": "2023-08-23T14:37:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hedgedoc-hedgedoc/",
      "url": "https://go.waylonwalker.com/hedgedoc-hedgedoc/",
      "title": "⭐ hedgedoc hedgedoc",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/hedgedoc/hedgedoc\" 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\"\u003ehedgedoc\u003c/a\u003e by \u003ca href=\"https://github.com/hedgedoc\" 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\"\u003ehedgedoc\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eHedgeDoc - Ideas grow better together\u003c/p\u003e\n",
      "content_text": "\nCheck out [hedgedoc](https://github.com/hedgedoc/hedgedoc) by [hedgedoc](https://github.com/hedgedoc). It's a well-crafted project with great potential.\n\nHedgeDoc - Ideas grow better together\n",
      "summary": "Check out hedgedoc by hedgedoc. It's a well-crafted project with great potential.",
      "date_published": "2023-08-23T00:41:40Z",
      "date_modified": "2023-08-23T00:41:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-htmx-lsp/",
      "url": "https://go.waylonwalker.com/theprimeagen-htmx-lsp/",
      "title": "⭐ ThePrimeagen htmx-lsp",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/ThePrimeagen/htmx-lsp\" 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\"\u003ehtmx-lsp\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eits so over\u003c/p\u003e\n",
      "content_text": "\nJust starred [htmx-lsp](https://github.com/ThePrimeagen/htmx-lsp) by [ThePrimeagen](https://github.com/ThePrimeagen). It's an exciting project with a lot to offer.\n\nits so over\n",
      "summary": "Just starred htmx-lsp by ThePrimeagen. It's an exciting project with a lot to offer.",
      "date_published": "2023-08-22T22:12:18Z",
      "date_modified": "2023-08-22T22:12:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-99/",
      "url": "https://go.waylonwalker.com/thought-99/",
      "title": "💭 Preline UI - Tailwind CSS component library | Preline UI, craf...",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://preline.co/docs/index.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://preline.co/docs/index.html\" alt=\"https://preline.co/docs/index.html\"/ data-glightbox=\"description: https://preline.co/docs/index.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eTailwind css component library.  There are many examples with copy and pastabily with the tailwind classes already setup.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://preline.co/docs/index.html](/static/https://preline.co/docs/index.html)\n\nTailwind css component library.  There are many examples with copy and pastabily with the tailwind classes already setup.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://preline.co/docs/index.html",
      "date_published": "2023-08-21T15:10:54Z",
      "date_modified": "2023-08-21T15:10:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tailwindcss",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-98/",
      "url": "https://go.waylonwalker.com/thought-98/",
      "title": "💭 Tailwind CSS Cheat Sheet",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nerdcave.com/tailwind-cheat-sheet\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/nerdcave.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/nerdcave.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTailwind CSS Cheat Sheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCheat sheet to learn Tailwind CSS quickly. Browse and search all Tailwind utility classes or CSS properties on one page.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003enerdcave.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA nice searchable cheatsheet for tailwindcss classes.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nerdcave.com/tailwind-cheat-sheet\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTailwind CSS Cheat Sheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCheat sheet to learn Tailwind CSS quickly. Browse and search all Tailwind utility classes or CSS properties on one page.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003enerdcave.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA nice searchable cheatsheet for tailwindcss classes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://nerdcave.com/tailwind-cheat-sheet",
      "date_published": "2023-08-21T15:03:41Z",
      "date_modified": "2023-08-21T15:03:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tailwindcss",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-97/",
      "url": "https://go.waylonwalker.com/thought-97/",
      "title": "💭 cURL Command Without Using Cache | Baeldung on Linux",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.baeldung.com/wp-content/uploads/sites/2/2021/09/Featured-Linux-5.png\" alt=\"cURL Command Without Using Cache | Baeldung on Linux — A quick and practical guide to using curl without cache.\" loading=\"lazy\"/ data-glightbox=\"description: cURL Command Without Using Cache | Baeldung on Linux — A quick and practical guide to using curl without cache.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecURL Command Without Using Cache | Baeldung on Linux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA quick and practical guide to using curl without cache.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBaeldung on Linux · baeldung.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBusting cache with curl.  I’m not sure how much gets cached by curl, but I have ran into several cases where I am looking for new content and I want to ensure the content is new and no chance of being cached.\u003c/p\u003e\n\u003cp\u003eThis article suggests 3 different techniques.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -H \u003cspan class=\"s1\"\u003e\u0026#39;Cache-Control: no-cache, no-store\u0026#39;\u003c/span\u003e http://www.example.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -H \u003cspan class=\"s1\"\u003e\u0026#39;Pragma: no-cache\u0026#39;\u003c/span\u003e http://www.example.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl http://www.example.com/?xyzzyspoon\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.baeldung.com/wp-content/uploads/sites/2/2021/09/Featured-Linux-5.png\" alt=\"cURL Command Without Using Cache | Baeldung on Linux — A quick and practical guide to using curl without cache.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ecURL Command Without Using Cache | Baeldung on Linux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA quick and practical guide to using curl without cache.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eBaeldung on Linux \u0026middot; baeldung.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBusting cache with curl.  I'm not sure how much gets cached by curl, but I have ran into several cases where I am looking for new content and I want to ensure the content is new and no chance of being cached.\n\nThis article suggests 3 different techniques.\n\n``` bash\ncurl -H 'Cache-Control: no-cache, no-store' http://www.example.com\ncurl -H 'Pragma: no-cache' http://www.example.com\ncurl http://www.example.com/?xyzzyspoon\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header",
      "date_published": "2023-08-21T13:39:41Z",
      "date_modified": "2023-08-21T13:39:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "curl",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-96/",
      "url": "https://go.waylonwalker.com/thought-96/",
      "title": "💭 SQLite FTS5 Extension",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://www.sqlite.org/fts5.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://www.sqlite.org/fts5.html\" alt=\"https://www.sqlite.org/fts5.html\"/ data-glightbox=\"description: https://www.sqlite.org/fts5.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003esqlite has 3 different tokenizers, \u003ccode\u003eporter, ascii, trigram\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThese can be used with sqlite-utils.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esqlite-utils enable-fts --tokenize porter database.db post title message tags\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd with the python api.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDatabase\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;database.db\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenable_fts\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e \u003cspan class=\"n\"\u003ecreate_triggers\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etokenize\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;trigram\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eposts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esearch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esearch\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://www.sqlite.org/fts5.html](/static/https://www.sqlite.org/fts5.html)\n\nsqlite has 3 different tokenizers, `porter, ascii, trigram`.  \n\nThese can be used with sqlite-utils.\n\n``` bash\nsqlite-utils enable-fts --tokenize porter database.db post title message tags\n```\n\nAnd with the python api.\n\n``` python\ndb = Database('database.db')\ndb[\"post\"].enable_fts(\n                [\"title\", \"message\", \"tags\"], create_triggers=True, tokenize=\"trigram\"\n            )\nposts = list(db[\"post\"].search(search))\n```\n\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.sqlite.org/fts5.html",
      "date_published": "2023-08-21T13:33:24Z",
      "date_modified": "2023-08-21T13:33:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-95/",
      "url": "https://go.waylonwalker.com/thought-95/",
      "title": "💭 sharkdp/bat: A cat clone with wings.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/sharkdp/bat\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/130464961/20727580-dd13-11e9-8f03-0789a00a3b64\" alt=\"GitHub - sharkdp/bat: A cat(1) clone with wings. — A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - sharkdp/bat: A cat(1) clone with wings. — A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - sharkdp/bat: A cat(1) clone with wings.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eBat is my favorite pager, its the one for me that seems to just work more than the rest. colors, syntax highlighting, line numbers search, it just feels the most natural.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/sharkdp/bat\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/130464961/20727580-dd13-11e9-8f03-0789a00a3b64\" alt=\"GitHub - sharkdp/bat: A cat(1) clone with wings. — A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - sharkdp/bat: A cat(1) clone with wings.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nBat is my favorite pager, its the one for me that seems to just work more than the rest. colors, syntax highlighting, line numbers search, it just feels the most natural.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/sharkdp/bat",
      "date_published": "2023-08-21T13:28:06Z",
      "date_modified": "2023-08-21T13:28:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mikeckennedy-server-hot-reload/",
      "url": "https://go.waylonwalker.com/mikeckennedy-server-hot-reload/",
      "title": "⭐ mikeckennedy server-hot-reload",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/mikeckennedy/server-hot-reload\" 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\"\u003eserver-hot-reload\u003c/a\u003e by \u003ca href=\"https://github.com/mikeckennedy\" 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\"\u003emikeckennedy\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eInclude in your web projects for dev-time auto reloading of web browser when any change is detected in content.\u003c/p\u003e\n",
      "content_text": "\nCheck out [server-hot-reload](https://github.com/mikeckennedy/server-hot-reload) by [mikeckennedy](https://github.com/mikeckennedy). It's a well-crafted project with great potential.\n\nInclude in your web projects for dev-time auto reloading of web browser when any change is detected in content.\n",
      "summary": "Check out server-hot-reload by mikeckennedy. It's a well-crafted project with great potential.",
      "date_published": "2023-08-21T00:39:50Z",
      "date_modified": "2023-08-21T00:39:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-94/",
      "url": "https://go.waylonwalker.com/thought-94/",
      "title": "💭 sqlite_utils Python library - sqlite-utils",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlite-utils.datasette.io/en/stable/python-api.html#full-text-search\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/sqlite-utils.datasette.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/sqlite-utils.datasette.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite_utils Python library - sqlite-utils\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlite-utils.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003esqlite-utils is primarily a cli tool for sqlite operations such as enabling full text search, and executing searches, but it also has a nice python api that is exposed and pretty straightforward to use.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003esqlite_utils\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eDatabase\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDatabase\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;database.db\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenable_fts\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;tags])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esearch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;water\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis returns a generator object that you can iterate over the row objects with.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlite-utils.datasette.io/en/stable/python-api.html#full-text-search\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite_utils Python library - sqlite-utils\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlite-utils.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nsqlite-utils is primarily a cli tool for sqlite operations such as enabling full text search, and executing searches, but it also has a nice python api that is exposed and pretty straightforward to use.\n\n``` python\nfrom sqlite_utils import Database\ndb = Database(\"database.db\")\ndb[\"post\"].enable_fts([\"title\", \"message\", \"tags])\ndb[\"post\"].search(\"water\")\n```\n\nThis returns a generator object that you can iterate over the row objects with.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlite-utils.datasette.io/en/stable/python-api.html#full-text-search",
      "date_published": "2023-08-20T14:32:39Z",
      "date_modified": "2023-08-20T14:32:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "sql",
        "sqlite",
        "fts",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-93/",
      "url": "https://go.waylonwalker.com/thought-93/",
      "title": "💭 How to Format All Files in a Directory with Prettier | by Dr. ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://levelup.gitconnected.com/how-to-format-all-files-in-a-directory-with-prettier-5f0ff5f4ffb2\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/levelup.gitconnected.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/levelup.gitconnected.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elevelup.gitconnected.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eUse prettier to format all files in a directory.  By default prettier does not write, it just echos out the format that it would do.  Give it the \u003ccode\u003e--write\u003c/code\u003e and it will write the changes to the files.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eprettier --write .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI just used this on my thoughts repo.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eprettier --write templates\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://levelup.gitconnected.com/how-to-format-all-files-in-a-directory-with-prettier-5f0ff5f4ffb2\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elevelup.gitconnected.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nUse prettier to format all files in a directory.  By default prettier does not write, it just echos out the format that it would do.  Give it the `--write` and it will write the changes to the files.\n\n``` bash\nprettier --write .\n```\n\nI just used this on my thoughts repo.\n\n``` bash\nprettier --write templates\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://levelup.gitconnected.com/how-to-format-all-files-in-a-directory-with-prettier-5f0ff5f4ffb2",
      "date_published": "2023-08-19T14:58:09Z",
      "date_modified": "2023-08-19T14:58:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "prettier",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-90/",
      "url": "https://go.waylonwalker.com/thought-90/",
      "title": "💭 simonw/datasette-render-markdown: Datasette plugin for renderi...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/simonw/datasette-render-markdown\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/d1f5a183edcf5df0346b5dbd4ca8d5eade8affe1a637d3d5cb81a849223cac01/simonw/datasette-render-markdown\" alt=\"GitHub - simonw/datasette-render-markdown: Datasette plugin for rendering Markdown — Datasette plugin for rendering Markdown. Contribute to simonw/datasette-render-markdown development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - simonw/datasette-render-markdown: Datasette plugin for rendering Markdown — Datasette plugin for rendering Markdown. Contribute to simonw/datasette-render-markdown development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - simonw/datasette-render-markdown: Datasette plugin for rendering Markdown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDatasette plugin for rendering Markdown. Contribute to simonw/datasette-render-markdown development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003edatasette really does everything doesn’t it!\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/simonw/datasette-render-markdown\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/d1f5a183edcf5df0346b5dbd4ca8d5eade8affe1a637d3d5cb81a849223cac01/simonw/datasette-render-markdown\" alt=\"GitHub - simonw/datasette-render-markdown: Datasette plugin for rendering Markdown — Datasette plugin for rendering Markdown. Contribute to simonw/datasette-render-markdown development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - simonw/datasette-render-markdown: Datasette plugin for rendering Markdown\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDatasette plugin for rendering Markdown. Contribute to simonw/datasette-render-markdown development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ndatasette really does everything doesn't it!\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/simonw/datasette-render-markdown",
      "date_published": "2023-08-16T00:48:07Z",
      "date_modified": "2023-08-16T00:48:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "database",
        "sqlite",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-89/",
      "url": "https://go.waylonwalker.com/thought-89/",
      "title": "💭 simonw/shot-scraper: A command-line utility for taking automat...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/simonw/shot-scraper\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/467679579/52765249-ede7-4e86-87b1-0a11c4406ec3\" alt=\"GitHub - simonw/shot-scraper: A command-line utility for taking automated screenshots of websites — A command-line utility for taking automated screenshots of websites - simonw/shot-scraper\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - simonw/shot-scraper: A command-line utility for taking automated screenshots of websites — A command-line utility for taking automated screenshots of websites - simonw/shot-scraper\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - simonw/shot-scraper: A command-line utility for taking automated screenshots of websites\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA command-line utility for taking automated screenshots of websites - simonw/shot-scraper\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e    \u0026gt; A command-line utility for taking automated screenshots of websites\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eDaaaang, this is such an elegantly simple way to get web screenshots with a cli.  I was literally up and running with two commands on my arch linux machine (which it warned was unsupported by playwright).\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Now install the browser it needs:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e \u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e \u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003edatasette\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eio\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e \u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003edatasette\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eio\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eh\u003c/span\u003e \u003cspan class=\"mi\"\u003e1280\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ew\u003c/span\u003e \u003cspan class=\"mi\"\u003e1920\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e \u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003edatasette\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eio\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eh\u003c/span\u003e \u003cspan class=\"mi\"\u003e480\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ew\u003c/span\u003e \u003cspan class=\"mi\"\u003e720\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escraper\u003c/span\u003e \u003cspan class=\"n\"\u003eshot\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eselector\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;#posts\u0026#39;\u003c/span\u003e \u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003ethoughts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mi\"\u003e89\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote \u003ccode\u003eshot-scraper https://datasette.io/ \u003c/code\u003e is a full length screenshot of the entire page.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eOh and its pretty dang fast, let alone the setup time, this crushes on startup time in my attempts to use a headless browser in the past.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/simonw/shot-scraper\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/467679579/52765249-ede7-4e86-87b1-0a11c4406ec3\" alt=\"GitHub - simonw/shot-scraper: A command-line utility for taking automated screenshots of websites — A command-line utility for taking automated screenshots of websites - simonw/shot-scraper\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - simonw/shot-scraper: A command-line utility for taking automated screenshots of websites\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA command-line utility for taking automated screenshots of websites - simonw/shot-scraper\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n        \u003e A command-line utility for taking automated screenshots of websites\n\n\nDaaaang, this is such an elegantly simple way to get web screenshots with a cli.  I was literally up and running with two commands on my arch linux machine (which it warned was unsupported by playwright).\n\n``` python\npip install shot-scraper\n# Now install the browser it needs:\nshot-scraper install\nshot-scraper waylonwalker.com\nshot-scraper https://datasette.io/ \nshot-scraper https://datasette.io/ -h 1280 -w 1920\nshot-scraper https://datasette.io/ -h 480 -w 720\nshot-scraper shot --selector '#posts' https://thoughts.waylonwalker.com/post/89\n```\n\n\u003e Note `shot-scraper https://datasette.io/ ` is a full length screenshot of the entire page.\n\nOh and its pretty dang fast, let alone the setup time, this crushes on startup time in my attempts to use a headless browser in the past.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/simonw/shot-scraper",
      "date_published": "2023-08-16T00:05:33Z",
      "date_modified": "2023-08-16T00:05:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "screenshot",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-88/",
      "url": "https://go.waylonwalker.com/thought-88/",
      "title": "💭 shot-scraper: automated screenshots for documentation, built o...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2022/Mar/10/shot-scraper/#a-complex-example\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.simonwillison.net/static/2022/annotated-screenshot.png\" alt=\"shot-scraper: automated screenshots for documentation, built on Playwright — shot-scraper is a new tool that I’ve built to help automate the process of keeping screenshots up-to-date in my documentation. It also doubles as a scraping tool—hence the name—which I …\" loading=\"lazy\"/ data-glightbox=\"description: shot-scraper: automated screenshots for documentation, built on Playwright — shot-scraper is a new tool that I’ve built to help automate the process of keeping screenshots up-to-date in my documentation. It also doubles as a scraping tool—hence the name—which I …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eshot-scraper: automated screenshots for documentation, built on Playwright\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eshot-scraper is a new tool that I’ve built to help automate the process of keeping screenshots up-to-date in my documentation. It also doubles as a scraping tool—hence the name—which I …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAn interesting way to build automatically annotaatd docs with arrows pointing to elements on a webpage.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2022/Mar/10/shot-scraper/#a-complex-example\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.simonwillison.net/static/2022/annotated-screenshot.png\" alt=\"shot-scraper: automated screenshots for documentation, built on Playwright — shot-scraper is a new tool that I’ve built to help automate the process of keeping screenshots up-to-date in my documentation. It also doubles as a scraping tool—hence the name—which I …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eshot-scraper: automated screenshots for documentation, built on Playwright\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eshot-scraper is a new tool that I’ve built to help automate the process of keeping screenshots up-to-date in my documentation. It also doubles as a scraping tool—hence the name—which I …\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAn interesting way to build automatically annotaatd docs with arrows pointing to elements on a webpage.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2022/Mar/10/shot-scraper/#a-complex-example",
      "date_published": "2023-08-15T23:55:17Z",
      "date_modified": "2023-08-15T23:55:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "docs",
        "playwright",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-81/",
      "url": "https://go.waylonwalker.com/thought-81/",
      "title": "💭 #learning #webdevelopment - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"wsEuPYFpDgk\" title=\"Learn Web Development by Watching a Pro\" playlabel=\"Play: Learn Web Development by Watching a Pro\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eI’d never given this much thought, but there are so many guides that are complete guides for beginner workflows, but once you get beyond beginner there is likely no manual for what you are trying to do in programming.  There is no guide that will tell you the best way to get your companies salesforce data, alongside of the ERP data and present it to the users who need to know in a way that compels them to make the right decisions.  You are going to have to build this out for yourself by piecing together knowledge about each subject.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"wsEuPYFpDgk\" title=\"Learn Web Development by Watching a Pro\" playlabel=\"Play: Learn Web Development by Watching a Pro\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nI'd never given this much thought, but there are so many guides that are complete guides for beginner workflows, but once you get beyond beginner there is likely no manual for what you are trying to do in programming.  There is no guide that will tell you the best way to get your companies salesforce data, alongside of the ERP data and present it to the users who need to know in a way that compels them to make the right decisions.  You are going to have to build this out for yourself by piecing together knowledge about each subject.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/wsEuPYFpDgk",
      "date_published": "2023-08-11T18:33:40Z",
      "date_modified": "2023-08-11T18:33:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "soft",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-80/",
      "url": "https://go.waylonwalker.com/thought-80/",
      "title": "💭 HTML Over The Wire | Hotwire",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hotwired.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHTML Over The Wire | Hotwire\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHotwire is an alternative approach to building modern web applications without using much JavaScript by sending HTML instead of JSON over the wire.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehotwired.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAn alternative approach to building modern web withhout heavy js and json, but instead \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 over the wire, keeping the logic in the backend of rails.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://hotwired.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHTML Over The Wire | Hotwire\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHotwire is an alternative approach to building modern web applications without using much JavaScript by sending HTML instead of JSON over the wire.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehotwired.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAn alternative approach to building modern web withhout heavy js and json, but instead html over the wire, keeping the logic in the backend of rails.\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://hotwired.dev/",
      "date_published": "2023-08-11T01:12:07Z",
      "date_modified": "2023-08-11T01:12:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-79/",
      "url": "https://go.waylonwalker.com/thought-79/",
      "title": "💭 How do I post form data using Curl?",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://reqbin.com/req/c-sma2qrvp/curl-post-form-example\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://reqbin.com/static/img/logo96.png\" alt=\"How do I post form data using Curl? — ReqBin is the most popular online API testing tool for REST, SOAP and HTTP APIs.\" loading=\"lazy\"/ data-glightbox=\"description: How do I post form data using Curl? — ReqBin is the most popular online API testing tool for REST, SOAP and HTTP APIs.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow do I post form data using Curl?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReqBin is the most popular online API testing tool for REST, SOAP and HTTP APIs.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReqBin · reqbin.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHow to pass form data with curl, give it the d.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -X POST https://reqbin.com/echo/post/form\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   -H \u003cspan class=\"s2\"\u003e\u0026#34;Content-Type: application/x-www-form-urlencoded\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   -d \u003cspan class=\"s2\"\u003e\u0026#34;param1=value1\u0026amp;param2=value2\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://reqbin.com/req/c-sma2qrvp/curl-post-form-example\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://reqbin.com/static/img/logo96.png\" alt=\"How do I post form data using Curl? — ReqBin is the most popular online API testing tool for REST, SOAP and HTTP APIs.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow do I post form data using Curl?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eReqBin is the most popular online API testing tool for REST, SOAP and HTTP APIs.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eReqBin \u0026middot; reqbin.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHow to pass form data with curl, give it the d.\n\n``` bash\ncurl -X POST https://reqbin.com/echo/post/form\n   -H \"Content-Type: application/x-www-form-urlencoded\" \n   -d \"param1=value1\u0026param2=value2\" \n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://reqbin.com/req/c-sma2qrvp/curl-post-form-example",
      "date_published": "2023-08-10T20:19:05Z",
      "date_modified": "2023-08-10T20:19:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nod-ai-shark-studio/",
      "url": "https://go.waylonwalker.com/nod-ai-shark-studio/",
      "title": "⭐ nod-ai SHARK-Studio",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/nod-ai/SHARK-Studio\" 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\"\u003eSHARK-Studio\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/nod-ai\" 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\"\u003enod-ai\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eSHARK Studio – Web UI for SHARK+IREE High Performance Machine Learning Distribution\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [SHARK-Studio](https://github.com/nod-ai/SHARK-Studio), an amazing project by [nod-ai](https://github.com/nod-ai). It's worth exploring!\n\nSHARK Studio -- Web UI for SHARK+IREE High Performance Machine Learning Distribution\n",
      "summary": "I'm really excited about SHARK-Studio, an amazing project by nod-ai. It's worth exploring!",
      "date_published": "2023-08-10T02:50:36Z",
      "date_modified": "2023-08-10T02:50:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nod-ai-amd-shark-studio/",
      "url": "https://go.waylonwalker.com/nod-ai-amd-shark-studio/",
      "title": "⭐ nod-ai AMD-SHARK-Studio",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/nod-ai/AMD-SHARK-Studio\" 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\"\u003eAMD-SHARK-Studio\u003c/a\u003e by \u003ca href=\"https://github.com/nod-ai\" 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\"\u003enod-ai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAMD-SHARK Studio – Web UI for SHARK+IREE High Performance Machine Learning Distribution\u003c/p\u003e\n",
      "content_text": "\nThe work on [AMD-SHARK-Studio](https://github.com/nod-ai/AMD-SHARK-Studio) by [nod-ai](https://github.com/nod-ai).\n\nAMD-SHARK Studio -- Web UI for SHARK+IREE High Performance Machine Learning Distribution\n",
      "summary": "The work on AMD-SHARK-Studio by nod-ai.",
      "date_published": "2023-08-10T02:50:36Z",
      "date_modified": "2023-08-10T02:50:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-78/",
      "url": "https://go.waylonwalker.com/thought-78/",
      "title": "💭 Lifecycle Hooks | Vue.js",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://vuejs.org/guide/essentials/lifecycle.html#lifecycle-diagram\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://vuejs.org/images/logo.png\" alt=\"Vue.js — Vue.js - The Progressive JavaScript Framework\" loading=\"lazy\"/ data-glightbox=\"description: Vue.js — Vue.js - The Progressive JavaScript Framework\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVue.js\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eVue.js - The Progressive JavaScript Framework\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evuejs.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA super handy reference to the vuejs lifecycle.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://vuejs.org/assets/lifecycle.16e4c08e.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://vuejs.org/assets/lifecycle.16e4c08e.png\" alt=\"vuejs lifecycle\" style=\"\nwidth: 100%;\n\"/ data-glightbox=\"description: vuejs lifecycle\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://vuejs.org/guide/essentials/lifecycle.html#lifecycle-diagram\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://vuejs.org/images/logo.png\" alt=\"Vue.js — Vue.js - The Progressive JavaScript Framework\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eVue.js\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eVue.js - The Progressive JavaScript Framework\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003evuejs.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA super handy reference to the vuejs lifecycle.\n\n\u003cimg src=\"https://vuejs.org/assets/lifecycle.16e4c08e.png\" alt=\"vuejs lifecycle\" style=\"\n    width: 100%;\n\"\u003e\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://vuejs.org/guide/essentials/lifecycle.html#lifecycle-diagram",
      "date_published": "2023-08-09T13:46:02Z",
      "date_modified": "2023-08-09T13:46:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "vuejs",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-77/",
      "url": "https://go.waylonwalker.com/thought-77/",
      "title": "💭 How to Use HTML to Open a Link in a New Tab",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.freecodecamp.org/news/how-to-use-html-to-open-link-in-new-tab/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://cdn-media-2.freecodecamp.org/w1280/5f9c98dd740569d1a4ca1c7d.jpg\" alt=\"How to Use HTML to Open a Link in a New Tab — Tabs are great, aren\u0026#39;t they? They allow the multitasker in all of us to juggle a bunch of online tasks at the same time. Tabs are so common now that, when you click on a link, it\u0026#39;s likely it\u0026#39;ll open in a new tab. If you\u0026#39;ve ever wondered how to\" loading=\"lazy\"/ data-glightbox=\"description: How to Use HTML to Open a Link in a New Tab — Tabs are great, aren\u0026#39;t they? They allow the multitasker in all of us to juggle a bunch of online tasks at the same time. Tabs are so common now that, when you click on a link, it\u0026#39;s likely it\u0026#39;ll open in a new tab. If you\u0026#39;ve ever wondered how to\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Use HTML to Open a Link in a New Tab\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTabs are great, aren\u0026#39;t they? They allow the multitasker in all of us to juggle a bunch of online tasks at the same time. Tabs are so common now that, when you click on a link, it\u0026#39;s likely it\u0026#39;ll ope...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efreeCodeCamp.org · freecodecamp.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMost of the time when creating links in \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 you want to maintain the default behavior, as this is what users are going to expect, but sometimes your site behaves such that it does not fit, and it does something unexpected anyways.  in this case you might want to make the default behavior to open the link in a new tab rather than relying on users to control click.\u003c/p\u003e\n\u003cp\u003eUse this with restraint as this can make your site feel janky and do things that do not feel natural to the web.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003eCheck out \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://www.freecodecamp.org/\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etarget\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_blank\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;noopener noreferrer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003efreeCodeCamp\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e.\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.freecodecamp.org/news/how-to-use-html-to-open-link-in-new-tab/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://cdn-media-2.freecodecamp.org/w1280/5f9c98dd740569d1a4ca1c7d.jpg\" alt=\"How to Use HTML to Open a Link in a New Tab — Tabs are great, aren\u0026#39;t they? They allow the multitasker in all of us to juggle a bunch of online tasks at the same time. Tabs are so common now that, when you click on a link, it\u0026#39;s likely it\u0026#39;ll open in a new tab. If you\u0026#39;ve ever wondered how to\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Use HTML to Open a Link in a New Tab\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTabs are great, aren\u0026#39;t they? They allow the multitasker in all of us to juggle a bunch of online tasks at the same time. Tabs are so common now that, when you click on a link, it\u0026#39;s likely it\u0026#39;ll ope...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efreeCodeCamp.org \u0026middot; freecodecamp.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMost of the time when creating links in html you want to maintain the default behavior, as this is what users are going to expect, but sometimes your site behaves such that it does not fit, and it does something unexpected anyways.  in this case you might want to make the default behavior to open the link in a new tab rather than relying on users to control click.\n\nUse this with restraint as this can make your site feel janky and do things that do not feel natural to the web.\n\n``` html\n\u003cp\u003eCheck out \u003ca href=\"https://www.freecodecamp.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreeCodeCamp\u003c/a\u003e.\u003c/p\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.freecodecamp.org/news/how-to-use-html-to-open-link-in-new-tab/",
      "date_published": "2023-08-09T13:44:01Z",
      "date_modified": "2023-08-09T13:44:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "html",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-76/",
      "url": "https://go.waylonwalker.com/thought-76/",
      "title": "💭 Create Models with a Many-to-Many Link - SQLModel",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/many-to-many/create-models-with-link/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/many-to-many/create-models-with-link.png\" alt=\"Create Models with a Many-to-Many Link - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"/ data-glightbox=\"description: Create Models with a Many-to-Many Link - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCreate Models with a Many-to-Many Link - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eCreating many to many relationships with sqlmodel requires a LinkTable Model.  The link model will keep track of the linked id’s between each of the models.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://sqlmodel.tiangolo.com/img/tutorial/many-to-many/many-to-many.svg\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://sqlmodel.tiangolo.com/img/tutorial/many-to-many/many-to-many.svg\" alt=\"many-to-many relationship model\" style=\"\nwidth: 100%;\n\"/ data-glightbox=\"description: many-to-many relationship model\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etyping\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003esqlmodel\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRelationship\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eSession\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecreate_engine\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eHeroTeamLink\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eteam_id\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eforeign_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;team.id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprimary_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehero_id\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eforeign_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hero.id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprimary_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eTeam\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprimary_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eindex\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheadquarters\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheroes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hero\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eRelationship\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eback_populates\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;teams\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elink_model\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eHeroTeamLink\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eHero\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSQLModel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprimary_key\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eindex\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esecret_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eindex\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eteams\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eList\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eTeam\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eRelationship\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eback_populates\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;heroes\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elink_model\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eHeroTeamLink\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/many-to-many/create-models-with-link/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/many-to-many/create-models-with-link.png\" alt=\"Create Models with a Many-to-Many Link - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eCreate Models with a Many-to-Many Link - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nCreating many to many relationships with sqlmodel requires a LinkTable Model.  The link model will keep track of the linked id's between each of the models.\n\n\u003cimg src=\"https://sqlmodel.tiangolo.com/img/tutorial/many-to-many/many-to-many.svg\" alt=\"many-to-many relationship model\" style=\"\n    width: 100%;\n\"\u003e\n\n``` python\nfrom typing import List, Optional\n\nfrom sqlmodel import Field, Relationship, Session, SQLModel, create_engine\n\n\nclass HeroTeamLink(SQLModel, table=True):\n    team_id: Optional[int] = Field(\n        default=None, foreign_key=\"team.id\", primary_key=True\n    )\n    hero_id: Optional[int] = Field(\n        default=None, foreign_key=\"hero.id\", primary_key=True\n    )\n\n\nclass Team(SQLModel, table=True):\n    id: Optional[int] = Field(default=None, primary_key=True)\n    name: str = Field(index=True)\n    headquarters: str\n\n    heroes: List[\"Hero\"] = Relationship(back_populates=\"teams\", link_model=HeroTeamLink)\n\n\nclass Hero(SQLModel, table=True):\n    id: Optional[int] = Field(default=None, primary_key=True)\n    name: str = Field(index=True)\n    secret_name: str\n    age: Optional[int] = Field(default=None, index=True)\n\n    teams: List[Team] = Relationship(back_populates=\"heroes\", link_model=HeroTeamLink)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlmodel.tiangolo.com/tutorial/many-to-many/create-models-with-link/",
      "date_published": "2023-08-09T13:37:15Z",
      "date_modified": "2023-08-09T13:37:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "api",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-75/",
      "url": "https://go.waylonwalker.com/thought-75/",
      "title": "💭 python - How to use a Pydantic model with Form data in FastAPI...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI went down the route of leveraging the \u003ccode\u003ejson-enc\u003c/code\u003e extention in \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e, but later realized that this completely breaks browsers/users who do not wish to use javascript.  While most of the web would feel quite broken with javascript disabled, I don’t want to contribute to that without good reason.\u003c/p\u003e\n\u003cp\u003eTaking a second look into this issue, rather than using \u003ccode\u003ejson-enc\u003c/code\u003e, and using as_form to get form data into a model keeps the nice DX fo everything being a pydantic model, but the site still works without js.  with js htmx kicks in, you get a spa like experience by loading partials onto the page, and without, you just get a full page reload.\u003c/p\u003e\n\u003ch2 id=\"the-implementation\"\u003ethe implementation \u003ca href=\"#the-implementation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ecopied from \u003ca href=\"https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003einspect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etyping\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eType\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epydantic.fields\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eModelField\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eas_form\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eType\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e]):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enew_parameters\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003efield_name\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emodel_field\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e__fields__\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emodel_field\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eModelField\u003c/span\u003e  \u003cspan class=\"c1\"\u003e# type: ignore\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003enew_parameters\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eParameter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"n\"\u003emodel_field\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ealias\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eParameter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePOSITIONAL_ONLY\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003emodel_field\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erequired\u003c/span\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emodel_field\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"n\"\u003eannotation\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003emodel_field\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eouter_type_\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eas_form_func\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esignature\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eas_form_func\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparameters\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003enew_parameters\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eas_form_func\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e__signature__\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esig\u003c/span\u003e  \u003cspan class=\"c1\"\u003e# type: ignore\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003esetattr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;as_form\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eas_form_func\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003ecls\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd the usage looks like\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@as_form\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eTest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eBaseModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eparam\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;2342\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ebool\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOptional\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003efloat\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@router.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;/me\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eresponse_model\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eTest\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eme\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eform\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eTest\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eas_form\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eform\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI went down the route of leveraging the `json-enc` extention in htmx, but later realized that this completely breaks browsers/users who do not wish to use javascript.  While most of the web would feel quite broken with javascript disabled, I don't want to contribute to that without good reason. \n\nTaking a second look into this issue, rather than using `json-enc`, and using as_form to get form data into a model keeps the nice DX fo everything being a pydantic model, but the site still works without js.  with js htmx kicks in, you get a spa like experience by loading partials onto the page, and without, you just get a full page reload.\n\n## the implementation\n\ncopied from https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi\n\n\n``` python\nimport inspect\nfrom typing import Type\n\nfrom fastapi import Form\nfrom pydantic import BaseModel\nfrom pydantic.fields import ModelField\n\ndef as_form(cls: Type[BaseModel]):\n    new_parameters = []\n\n    for field_name, model_field in cls.__fields__.items():\n        model_field: ModelField  # type: ignore\n\n        new_parameters.append(\n             inspect.Parameter(\n                 model_field.alias,\n                 inspect.Parameter.POSITIONAL_ONLY,\n                 default=Form(...) if model_field.required else Form(model_field.default),\n                 annotation=model_field.outer_type_,\n             )\n         )\n\n    async def as_form_func(**data):\n        return cls(**data)\n\n    sig = inspect.signature(as_form_func)\n    sig = sig.replace(parameters=new_parameters)\n    as_form_func.__signature__ = sig  # type: ignore\n    setattr(cls, 'as_form', as_form_func)\n    return cls\n```\n\nAnd the usage looks like\n\n\n``` python\n@as_form\nclass Test(BaseModel):\n    param: str\n    a: int = 1\n    b: str = '2342'\n    c: bool = False\n    d: Optional[float] = None\n\n\n@router.post('/me', response_model=Test)\nasync def me(request: Request, form: Test = Depends(Test.as_form)):\n    return form\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/60127234/how-to-use-a-pydantic-model-with-form-data-in-fastapi",
      "date_published": "2023-08-08T13:46:19Z",
      "date_modified": "2023-08-08T13:46:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "htmx",
        "pydantic",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-74/",
      "url": "https://go.waylonwalker.com/thought-74/",
      "title": "💭 chebykinn/sedmario: NES Super Mario Bros level 1 written in pu...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/chebykinn/sedmario\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/5850834ef06f09ed69d483dbcb2ffdf6dc3ab5628e7908a2c409315f0c9363c8/chebykinn/sedmario\" alt=\"GitHub - chebykinn/sedmario: NES Super Mario Bros level 1 written in pure sed! — NES Super Mario Bros level 1 written in pure sed! Contribute to chebykinn/sedmario development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - chebykinn/sedmario: NES Super Mario Bros level 1 written in pure sed! — NES Super Mario Bros level 1 written in pure sed! Contribute to chebykinn/sedmario development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - chebykinn/sedmario: NES Super Mario Bros level 1 written in pure sed!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNES Super Mario Bros level 1 written in pure sed! Contribute to chebykinn/sedmario development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e🤯 NES Super Mario Bros level 1 written in pure sed, this is madmess.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/chebykinn/sedmario\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/5850834ef06f09ed69d483dbcb2ffdf6dc3ab5628e7908a2c409315f0c9363c8/chebykinn/sedmario\" alt=\"GitHub - chebykinn/sedmario: NES Super Mario Bros level 1 written in pure sed! — NES Super Mario Bros level 1 written in pure sed! Contribute to chebykinn/sedmario development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - chebykinn/sedmario: NES Super Mario Bros level 1 written in pure sed!\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNES Super Mario Bros level 1 written in pure sed! Contribute to chebykinn/sedmario development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n🤯 NES Super Mario Bros level 1 written in pure sed, this is madmess.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/chebykinn/sedmario",
      "date_published": "2023-08-08T01:13:03Z",
      "date_modified": "2023-08-08T01:13:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-73/",
      "url": "https://go.waylonwalker.com/thought-73/",
      "title": "💭 Formatting on save · jose-elias-alvarez/null-ls.nvim Wiki",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save#code\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/cdf6ea5bf125d6c2d8a62ab767f72bde62df3b2e34c7db78cd505ac045ff2566/jose-elias-alvarez/null-ls.nvim\" alt=\"Formatting on save — Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - jose-elias-alvarez/null-ls.nvim\" loading=\"lazy\"/ data-glightbox=\"description: Formatting on save — Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - jose-elias-alvarez/null-ls.nvim\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFormatting on save\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUse Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - jose-elias-alvarez/null-ls.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eneovim stopped formatting on save for me awhile ago and I have just been dealing with it.  looks like there may have been an api change, idk.\u003c/p\u003e\n\u003cp\u003eI had to make this update.4\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e- vim.lsp.buf.format()\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+ vim.lsp.buf.format({async=false})\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save#code\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/cdf6ea5bf125d6c2d8a62ab767f72bde62df3b2e34c7db78cd505ac045ff2566/jose-elias-alvarez/null-ls.nvim\" alt=\"Formatting on save — Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - jose-elias-alvarez/null-ls.nvim\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFormatting on save\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eUse Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - jose-elias-alvarez/null-ls.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nneovim stopped formatting on save for me awhile ago and I have just been dealing with it.  looks like there may have been an api change, idk.\n\n\nI had to make this update.4\n\n``` diff\n- vim.lsp.buf.format()\n+ vim.lsp.buf.format({async=false})\n``` \n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save#code",
      "date_published": "2023-08-06T01:19:23Z",
      "date_modified": "2023-08-06T01:19:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "nvim",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-72/",
      "url": "https://go.waylonwalker.com/thought-72/",
      "title": "💭 Debugging | pywebview",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://pywebview.flowrl.com/guide/debugging.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://pywebview.flowrl.com/guide/debugging.html\" alt=\"https://pywebview.flowrl.com/guide/debugging.html\"/ data-glightbox=\"description: https://pywebview.flowrl.com/guide/debugging.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eHow to enable debug mode in pywebview.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ewebview\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewebview\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate_window\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Woah dude!\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://pywebview.flowrl.com/hello\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewebview\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estart\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://pywebview.flowrl.com/guide/debugging.html](/static/https://pywebview.flowrl.com/guide/debugging.html)\n\nHow to enable debug mode in pywebview.\n\n\n``` python\nimport webview\n\nwebview.create_window('Woah dude!', 'https://pywebview.flowrl.com/hello')\nwebview.start(debug=True)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pywebview.flowrl.com/guide/debugging.html",
      "date_published": "2023-08-05T18:04:04Z",
      "date_modified": "2023-08-05T18:04:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "webdev",
        "desktop",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-71/",
      "url": "https://go.waylonwalker.com/thought-71/",
      "title": "💭 `ValueError: Constraint must have a name` in alembic 1.10.0 · ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/sqlalchemy/alembic/issues/1195\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/bb02b91b671faac0db0047bb0b8d3886debbe893813cf6ef68ecddbd0932a469/sqlalchemy/alembic/issues/1195\" alt=\"`ValueError: Constraint must have a name` in alembic 1.10.0 · Issue #1195 · sqlalchemy/alembic — Describe the bug ValueError: Constraint must have a name in alembic 1.10.0. Expected behavior Migration succeeds. To Reproduce Please try to provide a Minimal, Complete, and Verifiable example, wit...\" loading=\"lazy\"/ data-glightbox=\"description: `ValueError: Constraint must have a name` in alembic 1.10.0 · Issue #1195 · sqlalchemy/alembic — Describe the bug ValueError: Constraint must have a name in alembic 1.10.0. Expected behavior Migration succeeds. To Reproduce Please try to provide a Minimal, Complete, and Verifiable example, wit...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e`ValueError: Constraint must have a name` in alembic 1.10.0 · Issue #1195 · sqlalchemy/alembic\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDescribe the bug ValueError: Constraint must have a name in alembic 1.10.0. Expected behavior Migration succeeds. To Reproduce Please try to provide a Minimal, Complete, and Verifiable example, wit...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAfter a nasty time with alembic upgrades, thoughts is about to get a new users table.  This may have came from incorrectly setting up alembic for sqlite from the start, but I was able to fix the issue with this GitHub issue.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ealembic\u003c/span\u003e \u003cspan class=\"n\"\u003esqlite\u003c/span\u003e \u003cspan class=\"ne\"\u003eValueError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eConstraint\u003c/span\u003e \u003cspan class=\"n\"\u003emust\u003c/span\u003e \u003cspan class=\"n\"\u003ehave\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe change I needed to make to get my migration to run.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        + batch_op.create_foreign_key(\u0026#39;fk_post_author_id_user\u0026#39;, \u0026#39;user\u0026#39;, [\u0026#39;author_id\u0026#39;], [\u0026#39;id\u0026#39;])\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/sqlalchemy/alembic/issues/1195\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/bb02b91b671faac0db0047bb0b8d3886debbe893813cf6ef68ecddbd0932a469/sqlalchemy/alembic/issues/1195\" alt=\"`ValueError: Constraint must have a name` in alembic 1.10.0 · Issue #1195 · sqlalchemy/alembic — Describe the bug ValueError: Constraint must have a name in alembic 1.10.0. Expected behavior Migration succeeds. To Reproduce Please try to provide a Minimal, Complete, and Verifiable example, wit...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e`ValueError: Constraint must have a name` in alembic 1.10.0 · Issue #1195 · sqlalchemy/alembic\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDescribe the bug ValueError: Constraint must have a name in alembic 1.10.0. Expected behavior Migration succeeds. To Reproduce Please try to provide a Minimal, Complete, and Verifiable example, wit...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAfter a nasty time with alembic upgrades, thoughts is about to get a new users table.  This may have came from incorrectly setting up alembic for sqlite from the start, but I was able to fix the issue with this GitHub issue.\n\n``` python\nalembic sqlite ValueError: Constraint must have a name\n```\n\nThe change I needed to make to get my migration to run.\n\n``` diff        - batch_op.create_foreign_key(None, 'user', ['author_id'], ['id'])\n\n        + batch_op.create_foreign_key('fk_post_author_id_user', 'user', ['author_id'], ['id'])\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/sqlalchemy/alembic/issues/1195",
      "date_published": "2023-08-05T01:25:07Z",
      "date_modified": "2023-08-05T01:25:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "database",
        "alembic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-70/",
      "url": "https://go.waylonwalker.com/thought-70/",
      "title": "💭 Use Alembic Check to check for possible upgrades",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eSince using alembic I have been just running out a new revision checking its content and deleting it if its empty, today I learned there is an \u003ccode\u003ealembic check\u003c/code\u003e command to check for operations that need to be created.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ alembic check\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eINFO  \u003cspan class=\"o\"\u003e[\u003c/span\u003ealembic.runtime.migration\u003cspan class=\"o\"\u003e]\u003c/span\u003e Context impl SQLiteImpl.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eINFO  \u003cspan class=\"o\"\u003e[\u003c/span\u003ealembic.runtime.migration\u003cspan class=\"o\"\u003e]\u003c/span\u003e Will assume non-transactional DDL.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNo new upgrade operations detected.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nSince using alembic I have been just running out a new revision checking its content and deleting it if its empty, today I learned there is an `alembic check` command to check for operations that need to be created.\n\n``` bash\n❯ alembic check\nINFO  [alembic.runtime.migration] Context impl SQLiteImpl.\nINFO  [alembic.runtime.migration] Will assume non-transactional DDL.\nNo new upgrade operations detected.\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2023-08-05T01:22:06Z",
      "date_modified": "2023-08-05T01:22:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "database",
        "alembic",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-69/",
      "url": "https://go.waylonwalker.com/thought-69/",
      "title": "💭 API — Jinja Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jinja.palletsprojects.com/en/3.0.x/api/\u0026lt;a href=\" tags=\"\" jinja2=\"\" \"=\"\" class=\"hashtag-tag  has-avatar has-avatar-before\" data-tag=\"jinja2\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/jinja.palletsprojects.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/jinja.palletsprojects.com.ico\"\u003e#jinja2\u003c/a\u003e.Environment.compile_templates\u0026#34; class=\u0026#34;embed-card-link\u0026#34; target=\u0026#34;_blank\u0026#34; rel=\u0026#34;noopener noreferrer\u0026#34;\u0026gt;\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAPI — Jinja Documentation (3.1.x)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejinja.palletsprojects.com\u003c/div\u003e\n    \u003c/div\u003e\n  \n\u003c/div\u003e\n\u003cp\u003e🤯 jinja comes with a loader to \u003ccode\u003epre-compile\u003c/code\u003e templates!  Defihnitely need to look at this for \u003ccode\u003emarkata\u003c/code\u003e, as \u003ccode\u003ejinja\u003c/code\u003e is till one of the biggest hot spots.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jinja.palletsprojects.com/en/3.0.x/api/\u003ca href=\"/tags/jinja2/\" class=\"hashtag-tag\" data-tag=\"jinja2\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#jinja2\u003c/a\u003e.Environment.compile_templates\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAPI — Jinja Documentation (3.1.x)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejinja.palletsprojects.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n🤯 jinja comes with a loader to `pre-compile` templates!  Defihnitely need to look at this for `markata`, as `jinja` is till one of the biggest hot spots.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.Environment.compile_templates",
      "date_published": "2023-08-04T23:54:05Z",
      "date_modified": "2023-08-04T23:54:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "jinja",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-68/",
      "url": "https://go.waylonwalker.com/thought-68/",
      "title": "💭 API — Jinja Documentation",
      "content_html": "\u003cfigure\u003e\n![https://jinja.palletsprojects.com/en/3.0.x/api/\u003ca href=\"/tags/jinja2/\" class=\"hashtag-tag\" data-tag=\"jinja2\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\"\u003e#jinja2\u003c/a\u003e.FileSystemLoader](/static/https://jinja.palletsprojects.com/en/3.0.x/api/\u003ca href=\"/tags/jinja2/\" class=\"hashtag-tag\" data-tag=\"jinja2\" data-count=\"1\" data-reading-time=\"1\" data-reading-time-text=\"1 minute\"\u003e#jinja2\u003c/a\u003e.FileSystemLoader)\n\u003c/figure\u003e\n\u003cp\u003eI’ve definitely been missing out on setting up a proper jinja loader on a few projects, I need to lean on this a bit more.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003ejinja2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eFileSystemLoader\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esearchpath\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eencoding\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;utf-8\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efollowlinks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e    Load templates from a directory in the file system.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e    \u0026#39;\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eThe path can be relative or absolute. Relative paths are relative to the current working directory.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eloader\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFileSystemLoader\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# A list of paths can be given. The directories will be searched in order, stopping at the first matching template.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eloader\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFileSystemLoader\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/override/templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/default/templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://jinja.palletsprojects.com/en/3.0.x/api/\u003ca href=\"/tags/jinja2/\" class=\"hashtag-tag\" data-tag=\"jinja2\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#jinja2\u003c/a\u003e.FileSystemLoader](/static/https://jinja.palletsprojects.com/en/3.0.x/api/\u003ca href=\"/tags/jinja2/\" class=\"hashtag-tag\" data-tag=\"jinja2\" data-count=1 data-reading-time=1 data-reading-time-text=\"1 minute\"\u003e#jinja2\u003c/a\u003e.FileSystemLoader)\n\nI've definitely been missing out on setting up a proper jinja loader on a few projects, I need to lean on this a bit more.\n\n``` python\nclass jinja2.FileSystemLoader(searchpath, encoding='utf-8', followlinks=False):\n    '''\n    Load templates from a directory in the file system.\n    '''\n```\n\u003e The path can be relative or absolute. Relative paths are relative to the current working directory.\n\n``` python\nloader = FileSystemLoader(\"templates\")\n# A list of paths can be given. The directories will be searched in order, stopping at the first matching template.\nloader = FileSystemLoader([\"/override/templates\", \"/default/templates\"])\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.FileSystemLoader",
      "date_published": "2023-08-04T23:35:09Z",
      "date_modified": "2023-08-04T23:35:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "jinja",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-67/",
      "url": "https://go.waylonwalker.com/thought-67/",
      "title": "💭 Tailwind CSS Crash Course - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"UBOj6rqRUME\" title=\"Tailwind CSS Crash Course\" playlabel=\"Play: Tailwind CSS Crash Course\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eNice intro into tailwind, I definitely started grasping some of the concepts after watching Brad.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"UBOj6rqRUME\" title=\"Tailwind CSS Crash Course\" playlabel=\"Play: Tailwind CSS Crash Course\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nNice intro into tailwind, I definitely started grasping some of the concepts after watching Brad.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=UBOj6rqRUME",
      "date_published": "2023-08-04T12:55:03Z",
      "date_modified": "2023-08-04T12:55:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-66/",
      "url": "https://go.waylonwalker.com/thought-66/",
      "title": "💭 GitHub - wagoodman/dive: A tool for exploring each layer in a ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/wagoodman/dive\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/71913091d3872f1855038b38d61fac1ff6136b7ef67d4460e34708c0661b9174/wagoodman/dive\" alt=\"GitHub - wagoodman/dive: A tool for exploring each layer in a docker image — A tool for exploring each layer in a docker image. Contribute to wagoodman/dive development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - wagoodman/dive: A tool for exploring each layer in a docker image — A tool for exploring each layer in a docker image. Contribute to wagoodman/dive development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - wagoodman/dive: A tool for exploring each layer in a docker image\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA tool for exploring each layer in a docker image. Contribute to wagoodman/dive development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eReally cool tui to inspect docker imaages that runs with docker.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/wagoodman/dive\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/71913091d3872f1855038b38d61fac1ff6136b7ef67d4460e34708c0661b9174/wagoodman/dive\" alt=\"GitHub - wagoodman/dive: A tool for exploring each layer in a docker image — A tool for exploring each layer in a docker image. Contribute to wagoodman/dive development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - wagoodman/dive: A tool for exploring each layer in a docker image\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA tool for exploring each layer in a docker image. Contribute to wagoodman/dive development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nReally cool tui to inspect docker imaages that runs with docker.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/wagoodman/dive",
      "date_published": "2023-08-02T12:14:01Z",
      "date_modified": "2023-08-02T12:14:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-65/",
      "url": "https://go.waylonwalker.com/thought-65/",
      "title": "💭 GZIP Compression Test | GiftOfSpeed",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.giftofspeed.com/gzip-test/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.giftofspeed.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.giftofspeed.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGzip/Brotli Compression Test | GiftOfSpeed\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCheck if Gzip or Brotli compression is working on your website.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egiftofspeed.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA nice tool to check compression on a public url.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.giftofspeed.com/gzip-test/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGzip/Brotli Compression Test | GiftOfSpeed\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eCheck if Gzip or Brotli compression is working on your website.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egiftofspeed.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA nice tool to check compression on a public url.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.giftofspeed.com/gzip-test/",
      "date_published": "2023-08-01T13:11:35Z",
      "date_modified": "2023-08-01T13:11:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-64/",
      "url": "https://go.waylonwalker.com/thought-64/",
      "title": "💭 Read a Range of Data - LIMIT and OFFSET - SQLModel",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/?h=#combine-limit-and-offset-with-where\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/limit-and-offset.png\" alt=\"Read a Range of Data - LIMIT and OFFSET - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"/ data-glightbox=\"description: Read a Range of Data - LIMIT and OFFSET - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRead a Range of Data - LIMIT and OFFSET - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eImplement paging in sqlmodel with where, limit, and offset.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eselect_heroes\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003eSession\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eengine\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estatement\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eHero\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eHero\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eage\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"mi\"\u003e32\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elimit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eresults\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estatement\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eheroes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eresults\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eheroes\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/?h=#combine-limit-and-offset-with-where\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/limit-and-offset.png\" alt=\"Read a Range of Data - LIMIT and OFFSET - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRead a Range of Data - LIMIT and OFFSET - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nImplement paging in sqlmodel with where, limit, and offset.\n\n``` python\ndef select_heroes():\n    with Session(engine) as session:\n        statement = select(Hero).where(Hero.age \u003e 32).limit(3)\n        results = session.exec(statement)\n        heroes = results.all()\n        print(heroes)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlmodel.tiangolo.com/tutorial/limit-and-offset/?h=#combine-limit-and-offset-with-where",
      "date_published": "2023-08-01T00:10:15Z",
      "date_modified": "2023-08-01T00:10:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-63/",
      "url": "https://go.waylonwalker.com/thought-63/",
      "title": "💭 DuckDB vs. MotherDuck — should you switch to the cloud version...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kestra.io/blogs/2023-07-28-duckdb-vs-motherduck\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://kestra.io/cdn-cgi/image/onerror=redirect,width=1201,height=676,format=webp/_astro/main.BpltYTV4.png\" alt=\"DuckDB vs. MotherDuck — should you switch to the cloud version? | Kestra — Why and when to use MotherDuck over local DuckDB\" loading=\"lazy\"/ data-glightbox=\"description: DuckDB vs. MotherDuck — should you switch to the cloud version? | Kestra — Why and when to use MotherDuck over local DuckDB\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDuckDB vs. MotherDuck — should you switch to the cloud version? | Kestra\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhy and when to use MotherDuck over local DuckDB\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekestra.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003educkdb is a new in process database that has been making its rounds in analytics for its high performance in those applications.\u003c/p\u003e\n\u003cp\u003eMother duck is  a centeralized server that brings manages storage, data sharing and an ide to duckdb.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://kestra.io/blogs/2023-07-28-duckdb-vs-motherduck\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://kestra.io/cdn-cgi/image/onerror=redirect,width=1201,height=676,format=webp/_astro/main.BpltYTV4.png\" alt=\"DuckDB vs. MotherDuck — should you switch to the cloud version? | Kestra — Why and when to use MotherDuck over local DuckDB\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDuckDB vs. MotherDuck — should you switch to the cloud version? | Kestra\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWhy and when to use MotherDuck over local DuckDB\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekestra.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nduckdb is a new in process database that has been making its rounds in analytics for its high performance in those applications.  \n\nMother duck is  a centeralized server that brings manages storage, data sharing and an ide to duckdb.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://kestra.io/blogs/2023-07-28-duckdb-vs-motherduck",
      "date_published": "2023-07-31T22:36:12Z",
      "date_modified": "2023-07-31T22:36:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "data",
        "database",
        "duckdb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-62/",
      "url": "https://go.waylonwalker.com/thought-62/",
      "title": "💭 Center things - Textual",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://textual.textualize.io/how-to/center-things/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png\" alt=\"Textual - Center things — Textual is a TUI framework for Python, inspired by modern web development.\" loading=\"lazy\"/ data-glightbox=\"description: Textual - Center things — Textual is a TUI framework for Python, inspired by modern web development.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTextual - Center things\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTextual is a TUI framework for Python, inspired by modern web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTextual Documentation · textual.textualize.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHow to center things in textual. Textual has a very unique way of styling text user interfaces for the terminal using css.  If you know css it feels natural.\u003c/p\u003e\n\u003cp\u003e@willmcgugan, has put together a great article on how to center things in textual\u003c/p\u003e\n\u003cp\u003ehere the final result\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.app\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eApp\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eComposeResult\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.widgets\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eStatic\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eQUOTE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Could not find you in Seattle and no terminal is in operation at your classified address.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eCenterApp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eApp\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;How to center things.\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eCSS\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    Screen {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        align: center middle;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    #hello {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        background: blue 50%;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        border: wide white;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        width: 40;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        height: 9;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        text-align: center;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        content-align: center middle;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ecompose\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eComposeResult\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eyield\u003c/span\u003e \u003cspan class=\"n\"\u003eStatic\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eQUOTE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hello\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eCenterApp\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://textual.textualize.io/how-to/center-things/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png\" alt=\"Textual - Center things — Textual is a TUI framework for Python, inspired by modern web development.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTextual - Center things\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTextual is a TUI framework for Python, inspired by modern web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTextual Documentation \u0026middot; textual.textualize.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHow to center things in textual. Textual has a very unique way of styling text user interfaces for the terminal using css.  If you know css it feels natural.\n\n@willmcgugan, has put together a great article on how to center things in textual\n\nhere the final result\n\n\n``` python\nfrom textual.app import App, ComposeResult\nfrom textual.widgets import Static\n\nQUOTE = \"Could not find you in Seattle and no terminal is in operation at your classified address.\"\n\n\nclass CenterApp(App):\n    \"\"\"How to center things.\"\"\"\n\n    CSS = \"\"\"\n    Screen {\n        align: center middle;\n    }\n\n    #hello {\n        background: blue 50%;\n        border: wide white;\n        width: 40;\n        height: 9;\n        text-align: center;\n        content-align: center middle;\n    }\n    \"\"\"\n\n    def compose(self) -\u003e ComposeResult:\n        yield Static(QUOTE, id=\"hello\")\n\n\nif __name__ == \"__main__\":\n    app = CenterApp()\n    app.run()\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://textual.textualize.io/how-to/center-things/",
      "date_published": "2023-07-30T16:31:55Z",
      "date_modified": "2023-07-30T16:31:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "textual",
        "tui",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-61/",
      "url": "https://go.waylonwalker.com/thought-61/",
      "title": "💭 s3-tree · PyPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/s3-tree/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eClient Challenge\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSuper useful way to show a tree view of  an s3 bucket’s structure!\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003es3\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etree\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003es3\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etree\u003c/span\u003e \u003cspan class=\"n\"\u003ebucketname\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/s3-tree/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eClient Challenge\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003epypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSuper useful way to show a tree view of  an s3 bucket's structure!\n\n``` python\npip install s3-tree\n```\n\n\n``` python\ns3-tree bucketname\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/s3-tree/",
      "date_published": "2023-07-30T14:37:06Z",
      "date_modified": "2023-07-30T14:37:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cloud",
        "data",
        "s3",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-60/",
      "url": "https://go.waylonwalker.com/thought-60/",
      "title": "💭 python - SQLAlchemy ORDER BY DESCENDING? - Stack Overflow",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/4186062/sqlalchemy-order-by-descending\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHow to sort results from a sqlalchemy based orm.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eorder_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emodel\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eEntry\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eamount\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edesc\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI needed this to enable paging on my thoughts api.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@post_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/posts/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_posts\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eSession\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_session\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehx_request\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHeader\u003c/span\u003e\u003cspan class=\"p\"\u003e()]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eaccept\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHeader\u003c/span\u003e\u003cspan class=\"p\"\u003e()]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etry_get_current_active_user\u003c/span\u003e\u003cspan class=\"p\"\u003e)],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epage_size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ePosts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;get all posts\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estatement\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epublished\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eorder_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edesc\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elimit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epage_size\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eoffset\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"n\"\u003epage\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003epage_size\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eposts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estatement\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eposts\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePosts\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e__root__\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eposts\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"nb\"\u003eisinstance\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRedirectResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eis_logged_in\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eis_logged_in\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ehx_request\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eposts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e__root__\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eHTMLResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;ul id=\u0026#34;posts\u0026#34;\u0026gt;\u0026lt;li\u0026gt;No posts\u0026lt;/li\u0026gt;\u0026lt;/ul\u0026gt;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ehx_request\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eposts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e__root__\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eHTMLResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003ehx_request\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eposts\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e__root__\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;no posts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ehx_request\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;posts.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;config\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;posts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eposts\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003emd\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;is_logged_in\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eis_logged_in\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;page\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estartswith\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;text/html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;base.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;config\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;posts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eposts\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003emd\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;is_logged_in\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eis_logged_in\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;page\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eposts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/4186062/sqlalchemy-order-by-descending\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHow to sort results from a sqlalchemy based orm.\n\n``` python\n.order_by(model.Entry.amount.desc())\n```\n\nI needed this to enable paging on my thoughts api.\n\n``` python\n@post_router.get(\"/posts/\")\nasync def get_posts(\n    *,\n    request: Request,\n    session: Session = Depends(get_session),\n    hx_request: Annotated[str | None, Header()] = None,\n    accept: Annotated[str | None, Header()] = None,\n    current_user: Annotated[User, Depends(try_get_current_active_user)],\n    page_size: int = 10,\n    page: int = 1,\n) -\u003e Posts:\n    \"get all posts\"\n    statement = (\n        select(Post)\n        .where(Post.published)\n        .order_by(Post.id.desc())\n        .limit(page_size)\n        .offset((page - 1) * page_size)\n    )\n    posts = session.exec(statement).all()\n    posts = Posts(__root__=posts)\n\n    if isinstance(current_user, RedirectResponse):\n        is_logged_in = False\n    else:\n        is_logged_in = True\n\n    if hx_request and page == 1 and len(posts.__root__) == 0:\n        return HTMLResponse('\u003cul id=\"posts\"\u003e\u003cli\u003eNo posts\u003c/li\u003e\u003c/ul\u003e')\n    if hx_request and len(posts.__root__) == 0:\n        return HTMLResponse(\"\")\n    if not hx_request and len(posts.__root__) == 0:\n        return [\"no posts\"]\n    if hx_request:\n        return templates.TemplateResponse(\n            \"posts.html\",\n            {\n                \"request\": request,\n                \"config\": config,\n                \"posts\": posts,\n                \"md\": md,\n                \"is_logged_in\": is_logged_in,\n                \"page\": page,\n            },\n        )\n\n    if accept.startswith(\"text/html\"):\n        return templates.TemplateResponse(\n            \"base.html\",\n            {\n                \"request\": request,\n                \"config\": config,\n                \"posts\": posts,\n                \"md\": md,\n                \"is_logged_in\": is_logged_in,\n                \"page\": page,\n            },\n        )\n\n    return posts\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/4186062/sqlalchemy-order-by-descending",
      "date_published": "2023-07-29T22:30:25Z",
      "date_modified": "2023-07-29T22:30:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "sql",
        "sqlalchemy",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-59/",
      "url": "https://go.waylonwalker.com/thought-59/",
      "title": "💭 kndndrj/nvim-dbee: Interactive database client for neovim",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/kndndrj/nvim-dbee\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/e2c26cae80198d29e3231bb8c9493f753b78ce809e710507d975745761bf46cb/kndndrj/nvim-dbee\" alt=\"GitHub - kndndrj/nvim-dbee: Interactive database client for neovim — Interactive database client for neovim. Contribute to kndndrj/nvim-dbee development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - kndndrj/nvim-dbee: Interactive database client for neovim — Interactive database client for neovim. Contribute to kndndrj/nvim-dbee development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - kndndrj/nvim-dbee: Interactive database client for neovim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInteractive database client for neovim. Contribute to kndndrj/nvim-dbee development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA neovim database client that I need to check out.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/kndndrj/nvim-dbee\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/e2c26cae80198d29e3231bb8c9493f753b78ce809e710507d975745761bf46cb/kndndrj/nvim-dbee\" alt=\"GitHub - kndndrj/nvim-dbee: Interactive database client for neovim — Interactive database client for neovim. Contribute to kndndrj/nvim-dbee development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - kndndrj/nvim-dbee: Interactive database client for neovim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eInteractive database client for neovim. Contribute to kndndrj/nvim-dbee development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA neovim database client that I need to check out.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/kndndrj/nvim-dbee",
      "date_published": "2023-07-29T01:08:20Z",
      "date_modified": "2023-07-29T01:08:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "nvim",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-58/",
      "url": "https://go.waylonwalker.com/thought-58/",
      "title": "💭 Relocating the Docker root directory - IBM Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.ibm.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.ibm.com.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRelocating the Docker root directory\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf the space in the file system where the Docker root directory is located is not adequate and cannot be increased, you must relocate the directory.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eibm.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA very straightforward guide to moving your docker data, such as container storage to a different location.  In my case I wanted it off of my boot drive.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRelocating the Docker root directory\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf the space in the file system where the Docker root directory is located is not adequate and cannot be increased, you must relocate the directory.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eibm.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA very straightforward guide to moving your docker data, such as container storage to a different location.  In my case I wanted it off of my boot drive.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory",
      "date_published": "2023-07-29T01:07:06Z",
      "date_modified": "2023-07-29T01:07:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "docker",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-57/",
      "url": "https://go.waylonwalker.com/thought-57/",
      "title": "💭 containers/aardvark-dns: Authoritative dns server for A/AAAA c...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/containers/aardvark-dns\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/899426996470d42249a5874554114422db69357e78196fb337d7b0085483c43a/containers/aardvark-dns\" alt=\"GitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf — Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf - containers/aardvark-dns\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf — Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf - containers/aardvark-dns\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAuthoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf - containers/aardvark-dns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI ran into some dns issues while running podman on arch, aparantly I had missed an optional dependency of aardvark-dns for container to container dns resolution.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -S aardvark-dns\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/containers/aardvark-dns\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/899426996470d42249a5874554114422db69357e78196fb337d7b0085483c43a/containers/aardvark-dns\" alt=\"GitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf — Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf - containers/aardvark-dns\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAuthoritative dns server for A/AAAA container records. Forwards other request to host\u0026#39;s /etc/resolv.conf - containers/aardvark-dns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI ran into some dns issues while running podman on arch, aparantly I had missed an optional dependency of aardvark-dns for container to container dns resolution.\n\n``` bash\nparu -S aardvark-dns\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/containers/aardvark-dns",
      "date_published": "2023-07-29T01:05:22Z",
      "date_modified": "2023-07-29T01:05:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "arch",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-56/",
      "url": "https://go.waylonwalker.com/thought-56/",
      "title": "💭 Podman - ArchWiki",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.archlinux.org/title/Podman\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/wiki.archlinux.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/wiki.archlinux.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePodman - ArchWiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI kept running into limits in the number of subuid and subgid’s I had on my system by default.  As always thank the arch wiki guide for having the most comprehensive yet consice guide to setup podman.\u003c/p\u003e\n\u003cp\u003eWhat I needed to do to fix the error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eusermod --add-subuids 100000-165535 --add-subgids 100000-165535 username\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.archlinux.org/title/Podman\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePodman - ArchWiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.archlinux.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI kept running into limits in the number of subuid and subgid's I had on my system by default.  As always thank the arch wiki guide for having the most comprehensive yet consice guide to setup podman.\n\nWhat I needed to do to fix the error.\n\n``` bash\nusermod --add-subuids 100000-165535 --add-subgids 100000-165535 username\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://wiki.archlinux.org/title/Podman",
      "date_published": "2023-07-29T01:03:23Z",
      "date_modified": "2023-07-29T01:03:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "podman",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-55/",
      "url": "https://go.waylonwalker.com/thought-55/",
      "title": "💭 TestDisk Step By Step - CGSecurity",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.cgsecurity.org/wiki/TestDisk_Step_By_Step\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.cgsecurity.org/testdisklogo-clear-100.png\" alt=\"TestDisk Step By Step\" loading=\"lazy\"/ data-glightbox=\"description: TestDisk Step By Step\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTestDisk Step By Step\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCGSecurity · cgsecurity.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode\u003etestdisk\u003c/code\u003e is an amazing command line utility (interactive tui) that just saved me a hard drive that was filled with data, but every machine that I plugged it into told me that it was completely unpartitioned.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.cgsecurity.org/wiki/TestDisk_Step_By_Step\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.cgsecurity.org/testdisklogo-clear-100.png\" alt=\"TestDisk Step By Step\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTestDisk Step By Step\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eCGSecurity \u0026middot; cgsecurity.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n`testdisk` is an amazing command line utility (interactive tui) that just saved me a hard drive that was filled with data, but every machine that I plugged it into told me that it was completely unpartitioned.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.cgsecurity.org/wiki/TestDisk_By_Step",
      "date_published": "2023-07-29T01:00:51Z",
      "date_modified": "2023-07-29T01:00:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-54/",
      "url": "https://go.waylonwalker.com/thought-54/",
      "title": "💭 Using Rich Inspect to interrogate Python objects - Textual",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png\" alt=\"Textual - Using Rich Inspect to interrogate Python objects — Textual is a TUI framework for Python, inspired by modern web development.\" loading=\"lazy\"/ data-glightbox=\"description: Textual - Using Rich Inspect to interrogate Python objects — Textual is a TUI framework for Python, inspired by modern web development.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTextual - Using Rich Inspect to interrogate Python objects\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTextual is a TUI framework for Python, inspired by modern web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTextual Documentation · textual.textualize.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI love rich inspect.  It’s one of my most often used features of rich.  It gives you a great human readable insight into python object instances.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003etext_file\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;foo.txt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;w\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etext_file\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI have a pyflyby entry for it so that I can just run it ang get automatic imports.  To not clash with the standard library inspect, which is quite useful on it’s own, I have aliased it to \u003ccode\u003erinspect\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003erinspect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png\" alt=\"Textual - Using Rich Inspect to interrogate Python objects — Textual is a TUI framework for Python, inspired by modern web development.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTextual - Using Rich Inspect to interrogate Python objects\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTextual is a TUI framework for Python, inspired by modern web development.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eTextual Documentation \u0026middot; textual.textualize.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI love rich inspect.  It's one of my most often used features of rich.  It gives you a great human readable insight into python object instances.\n\n``` python\n\u003e\u003e\u003e from rich import inspect\n\u003e\u003e\u003e text_file = open(\"foo.txt\", \"w\")\n\u003e\u003e\u003e inspect(text_file)\n```\n\nI have a pyflyby entry for it so that I can just run it ang get automatic imports.  To not clash with the standard library inspect, which is quite useful on it's own, I have aliased it to `rinspect`.\n\n``` python\nfrom rich import inspect as rinspect\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/",
      "date_published": "2023-07-29T00:58:00Z",
      "date_modified": "2023-07-29T00:58:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "rich",
        "terminal",
        "debugging",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-53/",
      "url": "https://go.waylonwalker.com/thought-53/",
      "title": "💭 Wesley Aptekar-Cassels | Reasons to avoid Javascript CDNs",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.wesleyac.com/posts/why-not-javascript-cdn\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/blog.wesleyac.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/blog.wesleyac.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReasons to avoid Javascript CDNs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWesley Aptekar-Cassels · blog.wesleyac.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd this is why we don’t run cdn in prod, respect your users who can’t control where the assets are stored.  There are so many \u003cstrong\u003efast\u003c/strong\u003e static hosting providers out there, if you are worried about performance reasons use one of those to \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 host\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://blog.wesleyac.com/posts/why-not-javascript-cdn\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eReasons to avoid Javascript CDNs\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eWesley Aptekar-Cassels \u0026middot; blog.wesleyac.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAnd this is why we don't run cdn in prod, respect your users who can't control where the assets are stored.  There are so many **fast** static hosting providers out there, if you are worried about performance reasons use one of those to self host.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://blog.wesleyac.com/posts/why-not-javascript-cdn",
      "date_published": "2023-07-29T00:31:14Z",
      "date_modified": "2023-07-29T00:31:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kndndrj-nvim-dbee/",
      "url": "https://go.waylonwalker.com/kndndrj-nvim-dbee/",
      "title": "⭐ kndndrj nvim-dbee",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/kndndrj/nvim-dbee\" 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\"\u003envim-dbee\u003c/a\u003e by \u003ca href=\"https://github.com/kndndrj\" 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\"\u003ekndndrj\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eInteractive database client for neovim\u003c/p\u003e\n",
      "content_text": "\nJust starred [nvim-dbee](https://github.com/kndndrj/nvim-dbee) by [kndndrj](https://github.com/kndndrj). It's an exciting project with a lot to offer.\n\nInteractive database client for neovim\n",
      "summary": "Just starred nvim-dbee by kndndrj. It's an exciting project with a lot to offer.",
      "date_published": "2023-07-28T20:39:24Z",
      "date_modified": "2023-07-28T20:39:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-9/",
      "url": "https://go.waylonwalker.com/thought-9/",
      "title": "💭 How to Manage 'Systemd' Services and Units Using 'Systemctl' i...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://www.tecmint.com/wp-content/uploads/2015/04/Manage-Linux-Services-Using-Systemctl.jpg\" alt=\"How to Manage \u0026#39;Systemd\u0026#39; Services and Units Using \u0026#39;Systemctl\u0026#39; in Linux — Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serves as a replacement of System V init daemon.\" loading=\"lazy\"/ data-glightbox=\"description: How to Manage \u0026#39;Systemd\u0026#39; Services and Units Using \u0026#39;Systemctl\u0026#39; in Linux — Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serves as a replacement of System V init daemon.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Manage \u0026#39;Systemd\u0026#39; Services and Units Using \u0026#39;Systemctl\u0026#39; in Linux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSystemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serve...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHow to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux · tecmint.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA fantastic overview of the systemd cli.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://www.tecmint.com/wp-content/uploads/2015/04/Manage-Linux-Services-Using-Systemctl.jpg\" alt=\"How to Manage \u0026#39;Systemd\u0026#39; Services and Units Using \u0026#39;Systemctl\u0026#39; in Linux — Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serves as a replacement of System V init daemon.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to Manage \u0026#39;Systemd\u0026#39; Services and Units Using \u0026#39;Systemctl\u0026#39; in Linux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSystemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serve...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eHow to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux \u0026middot; tecmint.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA fantastic overview of the systemd cli.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "systemd",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-8/",
      "url": "https://go.waylonwalker.com/thought-8/",
      "title": "💭 How to fix ZFS pool not importing at boot :: ./techtipsy — Her...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/ounapuu.ee.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/ounapuu.ee.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to fix ZFS pool not importing at boot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou have probably tried Stack Exchange and reddit at this point, so what do you have to lose?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e./techtipsy · ounapuu.ee\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHacky solution to get \u003ccode\u003ezpool import tank\u003c/code\u003e to work on boot right away.  This has been an issue that has plagued my system for months and no matter what dependencies I add in it never works, but adding a sleep as ExecStartPre did the trick.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHow to fix ZFS pool not importing at boot\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou have probably tried Stack Exchange and reddit at this point, so what do you have to lose?\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003e./techtipsy \u0026middot; ounapuu.ee\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHacky solution to get `zpool import tank` to work on boot right away.  This has been an issue that has plagued my system for months and no matter what dependencies I add in it never works, but adding a sleep as ExecStartPre did the trick.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "zfs",
        "systemd",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-7/",
      "url": "https://go.waylonwalker.com/thought-7/",
      "title": "💭 Flask Trailing Slashes 404",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/33241050/trailing-slash-triggers-404-in-flask-path-rule\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIn flask apps I often get a 404 for routes with a trailing slash.  This Stack Overflow post shows how to configure flask to allow trailing slashes on some or all routes.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/33241050/trailing-slash-triggers-404-in-flask-path-rule\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIn flask apps I often get a 404 for routes with a trailing slash.  This Stack Overflow post shows how to configure flask to allow trailing slashes on some or all routes.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/33241050/trailing-slash-triggers-404-in-flask-path-rule",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "web",
        "flask",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-6/",
      "url": "https://go.waylonwalker.com/thought-6/",
      "title": "💭 Deleting Specific Lines in a File with sed or yq",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://nickjanetakis.com/assets/blog/cards/deleting-specific-lines-in-a-file-with-sed-or-yq.jpg\" alt=\"Deleting Specific Lines in a File with sed or yq — Nick Janetakis — We\" loading=\"lazy\"/ data-glightbox=\"description: Deleting Specific Lines in a File with sed or yq — Nick Janetakis — We\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeleting Specific Lines in a File with sed or yq — Nick Janetakis\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNick Janetakis · nickjanetakis.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003esed can be a tricky beast, I often stumble when trying to pipe into it.  Next time I need to use sed, I should reference this article by Nick Janetakis.  He makes it looks much easier than my experience has been, and it appears to behave like a vim \u003ccode\u003e:%s/\u003c/code\u003e substitution does, or a \u003ccode\u003eg/\u003c/code\u003e g command.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://nickjanetakis.com/assets/blog/cards/deleting-specific-lines-in-a-file-with-sed-or-yq.jpg\" alt=\"Deleting Specific Lines in a File with sed or yq — Nick Janetakis — We\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDeleting Specific Lines in a File with sed or yq — Nick Janetakis\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWe\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eNick Janetakis \u0026middot; nickjanetakis.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nsed can be a tricky beast, I often stumble when trying to pipe into it.  Next time I need to use sed, I should reference this article by Nick Janetakis.  He makes it looks much easier than my experience has been, and it appears to behave like a vim `:%s/` substitution does, or a `g/` g command.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "bash",
        "cli",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-52/",
      "url": "https://go.waylonwalker.com/thought-52/",
      "title": "💭 \u003c/\u003e htmx ~ The json-enc Extension",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/extensions/json-enc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ejson-enc extension converts url encoded form values into json encoded data, this is very useful for \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 to have the same interface for \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e and curl type of interfaces.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/extensions/json-enc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\njson-enc extension converts url encoded form values into json encoded data, this is very useful for fastapi to have the same interface for htmx and curl type of interfaces.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/extensions/json-enc/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "htmx",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-51/",
      "url": "https://go.waylonwalker.com/thought-51/",
      "title": "💭 Header Parameters - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/header-params/#declare-header-parameters\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/header-params.png\" alt=\"Header Parameters - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Header Parameters - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHeader Parameters - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGetting request headers in \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 has a pretty nice stetup, it allows you to get headers values as function arguments,\u003c/p\u003e\n\u003cp\u003eI was able to use headers to detect if a request was made from \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e or not.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf the request was made from htmx, then we want a \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 format, otherwise I’m probably hitting the api programatically from something like \u003ccode\u003ecurl\u003c/code\u003e or \u003ccode\u003epython\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@post_router.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/post/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003epost_post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ePostCreate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecurrent_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etry_get_current_active_user\u003c/span\u003e\u003cspan class=\"p\"\u003e)],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eSession\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_session\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eis_hx_request\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHeader\u003c/span\u003e\u003cspan class=\"p\"\u003e()]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ePostRead\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;create a post\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;hx_request\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehx_request\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edb_post\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efrom_orm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edb_post\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecommit\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erefresh\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edb_post\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eis_hx_request\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003etemplates\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTemplateResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post_item.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;request\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;config\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;post\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003edb_post\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003edb_post\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/header-params/#declare-header-parameters\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/header-params.png\" alt=\"Header Parameters - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHeader Parameters - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGetting request headers in fastapi has a pretty nice stetup, it allows you to get headers values as function arguments, \n\nI was able to use headers to detect if a request was made from htmx or not.\n\n\u003e If the request was made from htmx, then we want a html format, otherwise I'm probably hitting the api programatically from something like `curl` or `python`\n\n``` python\n@post_router.post(\"/post/\")\nasync def post_post(\n    request: Request,\n    post: PostCreate,\n    current_user: Annotated[User, Depends(try_get_current_active_user)],\n    session: Session = Depends(get_session),\n    is_hx_request: Annotated[str | None, Header()] = None,\n) -\u003e PostRead:\n    \"create a post\"\n    print('hx_request', hx_request)\n    db_post = Post.from_orm(post)\n    session.add(db_post)\n    session.commit()\n    session.refresh(db_post)\n    if is_hx_request:\n        return templates.TemplateResponse(\"post_item.html\", {\"request\": request, \"config\": config, \"post\": db_post})\n    return db_post\n\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/header-params/#declare-header-parameters",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-50/",
      "url": "https://go.waylonwalker.com/thought-50/",
      "title": "💭 1j01/textual-paint: :art: MS Paint... in your terminal.",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/1j01/textual-paint\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://repository-images.githubusercontent.com/626145619/c71d0c14-c3e4-42ec-9ed5-512d8babc664\" alt=\"GitHub - 1j01/textual-paint: :art: MS Paint in your terminal. — :art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - 1j01/textual-paint: :art: MS Paint in your terminal. — :art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - 1j01/textual-paint: :art: MS Paint in your terminal.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e:art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/1j01\" 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\"\u003e1j01\u003c/a\u003e created a complete working clone of ms paint in the terminal using the textual framework.  It’s incredible.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/1j01/textual-paint\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/626145619/c71d0c14-c3e4-42ec-9ed5-512d8babc664\" alt=\"GitHub - 1j01/textual-paint: :art: MS Paint in your terminal. — :art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - 1j01/textual-paint: :art: MS Paint in your terminal.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e:art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n[1j01](https://github.com/1j01) created a complete working clone of ms paint in the terminal using the textual framework.  It's incredible.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/1j01/textual-paint",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "textual",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-5/",
      "url": "https://go.waylonwalker.com/thought-5/",
      "title": "💭 Dear Red Hat... featuring Jeff Geerling (Changelog \u0026 Friends #...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/7\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/friends/7/img\" alt=\"Dear Red Hat... featuring Jeff Geerling (Changelog \u0026amp; Friends #7) — Red Hat\u0026#39;s decision to lock down RHEL sources behind a subscription paywall was met with much ire and opened opportunity for Oracle to get a smack in and SUSE to announce a fork with $10 million behind it. \n\u0026lt;p\u0026gt;Few RHEL community members have been as publicly irate as Jeff Geerling, so we invited him on the show to discuss…\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\" embed-card-content glightbox\"=\"\"/ data-glightbox=\"description: Dear Red Hat... featuring Jeff Geerling (Changelog \u0026amp; Friends #7) — Red Hat\u0026#39;s decision to lock down RHEL sources behind a subscription paywall was met with much ire and opened opportunity for Oracle to get a smack in and SUSE to announce a fork with $10 million behind it. \n\u0026lt;p\u0026gt;Few RHEL community members have been as publicly irate as Jeff Geerling, so we invited him on the show to discuss…\u0026#34; loading=“lazy”\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\"\u003e\n\u003cdiv class=\"embed-card-title\"\u003eDear Red Hat… featuring Jeff Geerling (Changelog \u0026amp; Friends #7)\u003c/div\u003e\n\u003cdiv class=\"embed-card-description\"\u003eRed Hat\u0026#39;s decision to lock down RHEL sources behind a subscription paywall was met with much ire and opened opportunity for Oracle to get a smack in and SUSE to announce a fork with $10 million beh…\u003c/div\u003e\n\u003cdiv class=\"embed-card-meta\"\u003eChangelog · changelog.com\u003c/div\u003e\n\u003c/div\u003e\n\u003c/a\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eLoved this explanation about all the recent lock down with RHEL from Jeff Geerling.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://changelog.com/friends/7\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://snap.fly.dev/friends/7/img\" alt=\"Dear Red Hat... featuring Jeff Geerling (Changelog \u0026amp; Friends #7) — Red Hat\u0026#39;s decision to lock down RHEL sources behind a subscription paywall was met with much ire and opened opportunity for Oracle to get a smack in and SUSE to announce a fork with $10 million behind it. \r\n\r\nFew RHEL community members have been as publicly irate as Jeff Geerling, so we invited him on the show to discuss...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDear Red Hat... featuring Jeff Geerling (Changelog \u0026amp; Friends #7)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eRed Hat\u0026#39;s decision to lock down RHEL sources behind a subscription paywall was met with much ire and opened opportunity for Oracle to get a smack in and SUSE to announce a fork with $10 million beh...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eChangelog \u0026middot; changelog.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLoved this explanation about all the recent lock down with RHEL from Jeff Geerling.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://changelog.com/friends/7",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-49/",
      "url": "https://go.waylonwalker.com/thought-49/",
      "title": "💭 sqlite-utils now supports plugins",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://static.simonwillison.net/static/2023/sqlite-utils-shell-ml.jpg\" alt=\"sqlite-utils now supports plugins — sqlite-utils 3.34 is out with a major new feature: support for plugins. sqlite-utils is my combination Python library and command-line tool for manipulating SQLite databases. It recently celebrated its fifth …\" loading=\"lazy\"/ data-glightbox=\"description: sqlite-utils now supports plugins — sqlite-utils 3.34 is out with a major new feature: support for plugins. sqlite-utils is my combination Python library and command-line tool for manipulating SQLite databases. It recently celebrated its fifth …\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-utils now supports plugins\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003esqlite-utils 3.34 is out with a major new feature: support for plugins. sqlite-utils is my combination Python library and command-line tool for manipulating SQLite databases. It recently celebrated...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog · simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eAs the title states sqlite-utils now supports plugins.  I dug in just a bit and Simon implemented this completely with entrypoints, no framework or library at all.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://static.simonwillison.net/static/2023/sqlite-utils-shell-ml.jpg\" alt=\"sqlite-utils now supports plugins — sqlite-utils 3.34 is out with a major new feature: support for plugins. sqlite-utils is my combination Python library and command-line tool for manipulating SQLite databases. It recently celebrated its fifth …\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-utils now supports plugins\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003esqlite-utils 3.34 is out with a major new feature: support for plugins. sqlite-utils is my combination Python library and command-line tool for manipulating SQLite databases. It recently celebrated...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eSimon Willison’s Weblog \u0026middot; simonwillison.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nAs the title states sqlite-utils now supports plugins.  I dug in just a bit and Simon implemented this completely with entrypoints, no framework or library at all.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "sql",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-48/",
      "url": "https://go.waylonwalker.com/thought-48/",
      "title": "💭 Session vs Token Authentication in 100 Seconds - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"UBUNrFtufWo\" title=\"Session vs Token Authentication in 100 Seconds\" playlabel=\"Play: Session vs Token Authentication in 100 Seconds\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eGreat short explaination of session vs token authentication.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"UBUNrFtufWo\" title=\"Session vs Token Authentication in 100 Seconds\" playlabel=\"Play: Session vs Token Authentication in 100 Seconds\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nGreat short explaination of session vs token authentication.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=UBUNrFtufWo",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "auth",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-47/",
      "url": "https://go.waylonwalker.com/thought-47/",
      "title": "💭 Form Data - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/request-forms/#define-form-parameters\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/request-forms.png\" alt=\"Form Data - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Form Data - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eForm Data - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eGetting form data inside of \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 was not intuitive to me at first. Everything I had used in fastapi leaned on pydantic models.  Form data comes in differently and needs collected differently.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etyping\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/login/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003elogin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e()],\u003c/span\u003e \u003cspan class=\"n\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAnnotated\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e()]):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;username\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/request-forms/#define-form-parameters\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/request-forms.png\" alt=\"Form Data - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eForm Data - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nGetting form data inside of fastapi was not intuitive to me at first. Everything I had used in fastapi leaned on pydantic models.  Form data comes in differently and needs collected differently.\n\n``` python\nfrom typing import Annotated\n\nfrom fastapi import FastAPI, Form\n\napp = FastAPI()\n\n\n@app.post(\"/login/\")\nasync def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):\n    return {\"username\": username}\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/request-forms/#define-form-parameters",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fatapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-46/",
      "url": "https://go.waylonwalker.com/thought-46/",
      "title": "💭 pywebview",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://pywebview.flowrl.com/guide/usage.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://pywebview.flowrl.com/guide/usage.html\" alt=\"https://pywebview.flowrl.com/guide/usage.html\"/ data-glightbox=\"description: https://pywebview.flowrl.com/guide/usage.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI am creating this post from a desktop app that I \u003cem\u003ecreated\u003c/em\u003e in 3 lines.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ewebview\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewebview\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate_window\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Woah dude!\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://thoughts.waylonwalker.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewebview\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estart\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://pywebview.flowrl.com/guide/usage.html](/static/https://pywebview.flowrl.com/guide/usage.html)\n\nI am creating this post from a desktop app that I _created_ in 3 lines.\n\n``` python\nimport webview\n\nwebview.create_window('Woah dude!', 'https://thoughts.waylonwalker.com')\nwebview.start()\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pywebview.flowrl.com/guide/usage.html",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "pywebview",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-45/",
      "url": "https://go.waylonwalker.com/thought-45/",
      "title": "💭 Column INSERT/UPDATE Defaults — SQLAlchemy 1.4 Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.sqlalchemy.org/en/14/core/defaults.html#server-invoked-ddl-explicit-default-expressions\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.sqlalchemy.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.sqlalchemy.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eColumn INSERT/UPDATE Defaults\n —\n    SQLAlchemy 1.4 Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.sqlalchemy.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003esqlalchemy server_defaults end up as defaults in the database when new values are inserted.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003et\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eTable\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;test\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emetadata_obj\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eColumn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;abc\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eString\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eserver_default\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;abc\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eColumn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;created_at\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDateTime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eserver_default\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esysdate\u003c/span\u003e\u003cspan class=\"p\"\u003e()),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eColumn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;index_value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eInteger\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eserver_default\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003etext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eCREATE\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eTABLE\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003etest\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"n\"\u003eabc\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nb\"\u003evarchar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;abc\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"n\"\u003ecreated_at\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003esysdate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"n\"\u003eindex_value\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nb\"\u003einteger\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.sqlalchemy.org/en/14/core/defaults.html#server-invoked-ddl-explicit-default-expressions\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eColumn INSERT/UPDATE Defaults\n —\n    SQLAlchemy 1.4 Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.sqlalchemy.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nsqlalchemy server_defaults end up as defaults in the database when new values are inserted.\n\n``` python\nt = Table(\n    \"test\",\n    metadata_obj,\n    Column(\"abc\", String(20), server_default=\"abc\"),\n    Column(\"created_at\", DateTime, server_default=func.sysdate()),\n    Column(\"index_value\", Integer, server_default=text(\"0\")),\n)\n\n```\n\n``` sql\nCREATE TABLE test (\n    abc varchar(20) default 'abc',\n    created_at datetime default sysdate,\n    index_value integer default 0\n)\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.sqlalchemy.org/en/14/core/defaults.html#server-invoked-ddl-explicit-default-expressions",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "sql",
        "sqlalchemy",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-44/",
      "url": "https://go.waylonwalker.com/thought-44/",
      "title": "💭 Template Designer Documentation — Jinja Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jinja.palletsprojects.com/en/3.1.x/templates/#include\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/jinja.palletsprojects.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/jinja.palletsprojects.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTemplate Designer Documentation — Jinja Documentation (3.1.x)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejinja.palletsprojects.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA feature of jinja that I just discovered is including sub templates. Here is an example from the docs.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% include \u0026#39;header.html\u0026#39; %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eBody goes here.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% include \u0026#39;footer.html\u0026#39; %}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd inside of my thoughts project I used it to render posts.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eul\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;posts\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% for post in posts.__root__ %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% include \u0026#39;post_item.html\u0026#39; %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    {% endfor %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eul\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003enote that post_item.\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 automatically inherits the post variable.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://jinja.palletsprojects.com/en/3.1.x/templates/#include\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTemplate Designer Documentation — Jinja Documentation (3.1.x)\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ejinja.palletsprojects.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA feature of jinja that I just discovered is including sub templates. Here is an example from the docs.\n\n\n``` html\n{% include 'header.html' %}\nBody goes here.\n{% include 'footer.html' %}\n```\n\nAnd inside of my thoughts project I used it to render posts.\n\n``` html\n\u003cul id='posts'\u003e\n    {% for post in posts.__root__ %}\n    {% include 'post_item.html' %}\n    {% endfor %}\n\u003c/ul\u003e\n```\n\n\u003e note that post_item.html automatically inherits the post variable.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://jinja.palletsprojects.com/en/3.1.x/templates/#include",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "webdev",
        "jinja2",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-43/",
      "url": "https://go.waylonwalker.com/thought-43/",
      "title": "💭 Templates - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/advanced/templates/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/advanced/templates.png\" alt=\"Templates - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Templates - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTemplates - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA guide to add Jinja2Templates to \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/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/advanced/templates/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/advanced/templates.png\" alt=\"Templates - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eTemplates - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA guide to add Jinja2Templates to fastapi.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/advanced/templates/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-42/",
      "url": "https://go.waylonwalker.com/thought-42/",
      "title": "💭 \u003c/\u003e htmx ~ Documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/docs/#swapping\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA complete reference of all of the \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e swapping methods.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/docs/#swapping\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e\u0026lt;/\u0026gt; htmx ~ Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ehtmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA complete reference of all of the htmx swapping methods.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/docs/#swapping",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-40/",
      "url": "https://go.waylonwalker.com/thought-40/",
      "title": "💭 python 3.x - FastAPI redirection for trailing slash returns no...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/63511413/fastapi-redirection-for-trailing-slash-returns-non-ssl-link\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI am trying to use \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e on a new \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 site for my thoughts, and have been hitting this error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eMixed\u003c/span\u003e \u003cspan class=\"nx\"\u003eContent\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nx\"\u003eThe\u003c/span\u003e \u003cspan class=\"nx\"\u003epage\u003c/span\u003e \u003cspan class=\"nx\"\u003eat\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://front.mydomain.com/#/clients/1\u0026#39;\u003c/span\u003e \u003cspan class=\"nx\"\u003ewas\u003c/span\u003e \u003cspan class=\"nx\"\u003eloaded\u003c/span\u003e \u003cspan class=\"nx\"\u003eover\u003c/span\u003e \u003cspan class=\"nx\"\u003eHTTPS\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003ebut\u003c/span\u003e \u003cspan class=\"nx\"\u003erequested\u003c/span\u003e \u003cspan class=\"nx\"\u003ean\u003c/span\u003e \u003cspan class=\"nx\"\u003einsecure\u003c/span\u003e \u003cspan class=\"nx\"\u003eresource\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;http://back.mydomain/jobs/?_end=25\u0026amp;_order=DESC\u0026amp;_sort=id\u0026amp;_start=0\u0026amp;client_id=1\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e \u003cspan class=\"nx\"\u003eThis\u003c/span\u003e \u003cspan class=\"nx\"\u003erequest\u003c/span\u003e \u003cspan class=\"nx\"\u003ehas\u003c/span\u003e \u003cspan class=\"nx\"\u003ebeen\u003c/span\u003e \u003cspan class=\"nx\"\u003eblocked\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"nx\"\u003ethe\u003c/span\u003e \u003cspan class=\"nx\"\u003econtent\u003c/span\u003e \u003cspan class=\"nx\"\u003emust\u003c/span\u003e \u003cspan class=\"nx\"\u003ebe\u003c/span\u003e \u003cspan class=\"nx\"\u003eserved\u003c/span\u003e \u003cspan class=\"nx\"\u003eover\u003c/span\u003e \u003cspan class=\"nx\"\u003eHTTPS\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-is-happening\"\u003eWhat is happening \u003ca href=\"#what-is-happening\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have an htmx component that gets the current users name, but if they are not logged in the backend redirects to a login form.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-get\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;/users/me\u0026#39;\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-trigger\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;load\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            get me\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBut for some reason when the front end gets this redirect, it tries to do it through http, and flags it as insecure.\u003c/p\u003e\n\u003ch2 id=\"the-solution\"\u003eThe solution \u003ca href=\"#the-solution\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo solve this issue, the post directs to set the \u003ccode\u003e--forwarded-allow-ips\u003c/code\u003e to ‘*’\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euvicorn thoughts.api.app:app --port \u003cspan class=\"m\"\u003e5000\u003c/span\u003e --reload --log-level info --host 0.0.0.0 --workers \u003cspan class=\"m\"\u003e1\u003c/span\u003e --forwarded-allow-ips \u003cspan class=\"s1\"\u003e\u0026#39;*\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://stackoverflow.com/questions/63511413/fastapi-redirection-for-trailing-slash-returns-non-ssl-link\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estackoverflow.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI am trying to use htmx on a new fastapi site for my thoughts, and have been hitting this error. \n\n``` js\nMixed Content: The page at 'https://front.mydomain.com/#/clients/1' was loaded over HTTPS, but requested an insecure resource 'http://back.mydomain/jobs/?_end=25\u0026_order=DESC\u0026_sort=id\u0026_start=0\u0026client_id=1'. This request has been blocked; the content must be served over HTTPS.\n```\n\n## What is happening\n\nI have an htmx component that gets the current users name, but if they are not logged in the backend redirects to a login form.\n\n``` html\n        \u003cdiv hx-get='/users/me' hx-trigger='load'\u003e\n            get me\n        \u003c/div\u003e\n```\n\nBut for some reason when the front end gets this redirect, it tries to do it through http, and flags it as insecure.\n\n## The solution\n\nTo solve this issue, the post directs to set the `--forwarded-allow-ips` to '*'\n\n``` bash\nuvicorn thoughts.api.app:app --port 5000 --reload --log-level info --host 0.0.0.0 --workers 1 --forwarded-allow-ips '*'\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://stackoverflow.com/questions/63511413/fastapi-redirection-for-trailing-slash-returns-non-ssl-link",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-4/",
      "url": "https://go.waylonwalker.com/thought-4/",
      "title": "💭 How to pull from images from docker.io with podman",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/isomorphisms/3114ab86960656a729a6b4653001aae2\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gist.github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gist.github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003egistfile1.txt\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003etext\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOn void linux.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnder `/etc/containers/` there is a file called `registries.conf`. It is complemented by `man 5 containers-registries.conf`.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChange (for me lines 11-12) which say\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[registries.search]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eregistries = []\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eto\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e[registries.search]\nregistries = [\u0026#39;docker.io\u0026#39;]\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n(drawn from https://www.projectatomic.io/blog/2018/05/podman-tls/)\n\u003chr/\u003e\n\u003cp\u003eWithout the above you won’t be able to use basic \u003ccode\u003epodman\u003c/code\u003e functions. You might get errors like:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eError: unable to pull fedora:28: image name provided is a short name and no search registries are defined in the registries config file.\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eError: unable to pull stripe/stripe-cli: image name provided is a short name and no search registries are defined in the registries config file.\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr/\u003e\n\u003cp\u003eVarious documentation (redhat blog entries, \u003ccode\u003eman podman\u003c/code\u003e pages) say that dockerhub is a default, but without this step it’s clearly not.\u003c/p\u003e\n\u003c/code\u003e\u003cp\u003e\u003ccode\u003eGood luck. Feel free to use the comment box below if you have a github account.\n\u003c/code\u003e\u003c/p\u003e\u003c/pre\u003e\u003cp\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBy default podman will not pull images from docker.io and will need setup.  This guide worked for me.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-github\" data-needs-code-css=\"true\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003cdiv data-needs-code-css=\"true\"\u003e\u003cdiv class=\"embed-gist\"\u003e\n  \u003cdiv class=\"embed-gist-header\"\u003e\n    \u003ca href=\"https://gist.github.com/isomorphisms/3114ab86960656a729a6b4653001aae2\" target=\"_blank\" rel=\"noopener noreferrer\"\u003egistfile1.txt\u003c/a\u003e\n    \u003cspan class=\"embed-gist-language\"\u003etext\u003c/span\u003e\n  \u003c/div\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOn void linux.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnder `/etc/containers/` there is a file called `registries.conf`. It is complemented by `man 5 containers-registries.conf`.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChange (for me lines 11-12) which say\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[registries.search]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eregistries = []\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eto\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e[registries.search]\nregistries = ['docker.io']\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n(drawn from https://www.projectatomic.io/blog/2018/05/podman-tls/)\n\n\n\n\n---------------\n\n\nWithout the above you won't be able to use basic `podman` functions. You might get errors like:\n\n- `Error: unable to pull fedora:28: image name provided is a short name and no search registries are defined in the registries config file.`\n- `Error: unable to pull stripe/stripe-cli: image name provided is a short name and no search registries are defined in the registries config file.`\n\n\n\n\n--------\n\n\nVarious documentation (redhat blog entries, `man podman` pages) say that dockerhub is a default, but without this step it's clearly not.\n\n\nGood luck. Feel free to use the comment box below if you have a github account.\n\u003c/code\u003e\u003c/pre\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nBy default podman will not pull images from docker.io and will need setup.  This guide worked for me.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://gist.github.com/isomorphisms/3114ab86960656a729a6b4653001aae2",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "podman",
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-39/",
      "url": "https://go.waylonwalker.com/thought-39/",
      "title": "💭 \u003c/\u003e htmx ~ The client-side-templates Extension",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/extensions/client-side-templates/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eUsing templates with \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e requires the client-side-templates extension, and the template engine to be loaded in a \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e tag.\u003c/p\u003e\n\u003cp\u003eexample htmx using templates.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u0026lt;!DOCTYPE html\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003echarset\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;viewport\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;width=device-width\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://unpkg.com/htmx.org\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://unpkg.com/htmx.org/dist/ext/client-side-templates.js\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://unpkg.com/mustache@latest\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-ext\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;client-side-templates\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-get\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://jsonplaceholder.typicode.com/todos/1\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003ehx-swap\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;innerHTML\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003ehx-target\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#content\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"na\"\u003emustache-template\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;foo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      Click Me\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003eStart\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e \u003cspan class=\"na\"\u003eid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;foo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e {% raw %}{{userID}}{% endraw %} and {% raw %}{{id}}{% endraw %} and {% raw %}{{title}}{% endraw %} and {% raw %}{{completed}}{% endraw %}\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://htmx.org/extensions/client-side-templates/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ehtmx.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nUsing templates with htmx requires the client-side-templates extension, and the template engine to be loaded in a `\u003cscript\u003e` tag.\n\nexample htmx using templates.\n\n``` html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cmeta charset=\"utf-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width\"\u003e\n  \u003cscript src=\"https://unpkg.com/htmx.org\"\u003e\u003c/script\u003e\n  \u003cscript src=\"https://unpkg.com/htmx.org/dist/ext/client-side-templates.js\"\u003e\u003c/script\u003e\n  \u003cscript src=\"https://unpkg.com/mustache@latest\"\u003e\u003c/script\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n  \u003cdiv hx-ext=\"client-side-templates\"\u003e\n    \u003cbutton hx-get=\"https://jsonplaceholder.typicode.com/todos/1\"\n            hx-swap=\"innerHTML\"\n            hx-target=\"#content\"\n            mustache-template=\"foo\"\u003e\n      Click Me\n    \u003c/button\u003e\n\n    \u003cp id=\"content\"\u003eStart\u003c/p\u003e\n\n    \u003ctemplate id=\"foo\"\u003e\n      \u003cp\u003e {% raw %}{{userID}}{% endraw %} and {% raw %}{{id}}{% endraw %} and {% raw %}{{title}}{% endraw %} and {% raw %}{{completed}}{% endraw %}\u003c/p\u003e\n    \u003c/template\u003e\n  \u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://htmx.org/extensions/client-side-templates/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-38/",
      "url": "https://go.waylonwalker.com/thought-38/",
      "title": "💭 Static Files - FastAPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/static-files/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/static-files.png\" alt=\"Static Files - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"/ data-glightbox=\"description: Static Files - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStatic Files - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eMounting static files in \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/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.staticfiles\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eStaticFiles\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;static\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com/tutorial/static-files/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://fastapi.tiangolo.com/assets/images/social/tutorial/static-files.png\" alt=\"Static Files - FastAPI — FastAPI framework, high performance, easy to learn, fast to code, ready for production\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStatic Files - FastAPI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFastAPI framework, high performance, easy to learn, fast to code, ready for production\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003efastapi.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nMounting static files in fastapi.\n\n``` python\nfrom fastapi import FastAPI\nfrom fastapi.staticfiles import StaticFiles\n\napp = FastAPI()\n\napp.mount(\"/static\", StaticFiles(directory=\"static\"), name=\"static\")\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://fastapi.tiangolo.com/tutorial/static-files/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-37/",
      "url": "https://go.waylonwalker.com/thought-37/",
      "title": "💭 HTMX looks pretty neat #coding #javascript - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"IqE7juQBr6A\" title=\"\u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003eHTMX\u003c/a\u003e looks pretty neat #coding \u0026lt;a href=\" tags=\"\" javascript=\"\" \"=\"\" class=\"hashtag-tag\" data-tag=\"javascript\" data-count=\"4\" data-reading-time=\"6\" data-reading-time-text=\"6 minutes\"\u003e#javascript\u0026#34; playlabel=\u0026#34;Play: HTMX looks pretty neat #coding \u003ca href=\"/tags/javascript/\" class=\"hashtag-tag\" data-tag=\"javascript\" data-count=\"4\" data-reading-time=\"6\" data-reading-time-text=\"6 minutes\"\u003e#javascript\u003c/a\u003e\u0026#34;\u0026gt;\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eLove the poling example with hx-trigger=‘every 1s’.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"IqE7juQBr6A\" title=\"HTMX looks pretty neat #coding \u003ca href=\"/tags/javascript/\" class=\"hashtag-tag\" data-tag=\"javascript\" data-count=4 data-reading-time=6 data-reading-time-text=\"6 minutes\"\u003e#javascript\u003c/a\u003e\" playlabel=\"Play: HTMX looks pretty neat #coding \u003ca href=\"/tags/javascript/\" class=\"hashtag-tag\" data-tag=\"javascript\" data-count=4 data-reading-time=6 data-reading-time-text=\"6 minutes\"\u003e#javascript\u003c/a\u003e\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nLove the poling example with hx-trigger='every 1s'.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/shorts/IqE7juQBr6A",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "htmx",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-36/",
      "url": "https://go.waylonwalker.com/thought-36/",
      "title": "💭 First-class session support in FastAPI · Issue #754 · tiangolo...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tiangolo/fastapi/issues/754\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/5190baf4079f115873906d0710f7ee90869032b3ff4751df480a4ca41ff00084/fastapi/fastapi/issues/754\" alt=\"First-class session support in FastAPI · Issue #754 · fastapi/fastapi — Is your feature request related to a problem All of the security schemas currently supported by FastAPI rely on some sort of \u0026#34;client-server synergy\u0026#34; , where, for instance, the client is expected to...\" loading=\"lazy\"/ data-glightbox=\"description: First-class session support in FastAPI · Issue #754 · fastapi/fastapi — Is your feature request related to a problem All of the security schemas currently supported by FastAPI rely on some sort of \u0026#34;client-server synergy\u0026#34; , where, for instance, the client is expected to...\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFirst-class session support in FastAPI · Issue #754 · fastapi/fastapi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIs your feature request related to a problem All of the security schemas currently supported by FastAPI rely on some sort of \u0026#34;client-server synergy\u0026#34; , where, for instance, the client is expected to...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHere is a snippet provided by @tiangolo to store the users jwt inside of a session cookie in fatapi.  This was written in feb 12, 2020 and admits that this is not a well documented part of \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/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt’s already in place. More or less like the rest of the security tools. And it’s compatible with the rest of the parts, integrated with OpenAPI (as possible), but probably most importantly, with dependencies.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt’s just not properly documented yet. 😞\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eBut still, it works 🚀 e.g.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efastapi.security\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eAPIKeyCookie\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003estarlette.responses\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHTMLResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003estarlette\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ejose\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ejwt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFastAPI\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecookie_sec\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eAPIKeyCookie\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;session\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esecret_key\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;someactualsecret\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;dmontagu\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;secret1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;tiangolo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;secret2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_current_user\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecookie_sec\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epayload\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ejwt\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edecode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esecret_key\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003euser\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;sub\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003euser\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eException\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_403_FORBIDDEN\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Invalid authentication\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/login\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003elogin_page\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eHTMLResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026lt;form action=\u0026#34;/login\u0026#34; method=\u0026#34;post\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        Username: \u0026lt;input type=\u0026#34;text\u0026#34; name=\u0026#34;username\u0026#34; required\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026lt;br\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        Password: \u0026lt;input type=\u0026#34;password\u0026#34; name=\u0026#34;password\u0026#34; required\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026lt;input type=\u0026#34;submit\u0026#34; value=\u0026#34;Login\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026lt;/form\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/login\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003elogin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eForm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eusername\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_403_FORBIDDEN\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Invalid user or password\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edb_password\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003epassword\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003edb_password\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHTTP_403_FORBIDDEN\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Invalid user or password\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etoken\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ejwt\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;sub\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003esecret_key\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eresponse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset_cookie\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;session\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etoken\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ok\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@app.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/private\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eread_private\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_current_user\u003c/span\u003e\u003cspan class=\"p\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;username\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;private\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;get some private data\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tiangolo/fastapi/issues/754\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/5190baf4079f115873906d0710f7ee90869032b3ff4751df480a4ca41ff00084/fastapi/fastapi/issues/754\" alt=\"First-class session support in FastAPI · Issue #754 · fastapi/fastapi — Is your feature request related to a problem All of the security schemas currently supported by FastAPI rely on some sort of \u0026#34;client-server synergy\u0026#34; , where, for instance, the client is expected to...\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFirst-class session support in FastAPI · Issue #754 · fastapi/fastapi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIs your feature request related to a problem All of the security schemas currently supported by FastAPI rely on some sort of \u0026#34;client-server synergy\u0026#34; , where, for instance, the client is expected to...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHere is a snippet provided by @tiangolo to store the users jwt inside of a session cookie in fatapi.  This was written in feb 12, 2020 and admits that this is not a well documented part of fastapi.\n\n\u003e It's already in place. More or less like the rest of the security tools. And it's compatible with the rest of the parts, integrated with OpenAPI (as possible), but probably most importantly, with dependencies.\n\n\u003e It's just not properly documented yet. 😞\n\n\u003e But still, it works 🚀 e.g.\n\n``` python\nfrom fastapi import FastAPI, Form, HTTPException, Depends\nfrom fastapi.security import APIKeyCookie\nfrom starlette.responses import Response, HTMLResponse\nfrom starlette import status\nfrom jose import jwt\n\n\napp = FastAPI()\n\ncookie_sec = APIKeyCookie(name=\"session\")\n\nsecret_key = \"someactualsecret\"\n\nusers = {\"dmontagu\": {\"password\": \"secret1\"}, \"tiangolo\": {\"password\": \"secret2\"}}\n\n\ndef get_current_user(session: str = Depends(cookie_sec)):\n    try:\n        payload = jwt.decode(session, secret_key)\n        user = users[payload[\"sub\"]]\n        return user\n    except Exception:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN, detail=\"Invalid authentication\"\n        )\n\n\n@app.get(\"/login\")\ndef login_page():\n    return HTMLResponse(\n        \"\"\"\n        \u003cform action=\"/login\" method=\"post\"\u003e\n        Username: \u003cinput type=\"text\" name=\"username\" required\u003e\n        \u003cbr\u003e\n        Password: \u003cinput type=\"password\" name=\"password\" required\u003e\n        \u003cinput type=\"submit\" value=\"Login\"\u003e\n        \u003c/form\u003e\n        \"\"\"\n    )\n\n\n@app.post(\"/login\")\ndef login(response: Response, username: str = Form(...), password: str = Form(...)):\n    if username not in users:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN, detail=\"Invalid user or password\"\n        )\n    db_password = users[username][\"password\"]\n    if not password == db_password:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN, detail=\"Invalid user or password\"\n        )\n    token = jwt.encode({\"sub\": username}, secret_key)\n    response.set_cookie(\"session\", token)\n    return {\"ok\": True}\n\n\n@app.get(\"/private\")\ndef read_private(username: str = Depends(get_current_user)):\n    return {\"username\": username, \"private\": \"get some private data\"}\n```\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/tiangolo/fastapi/issues/754",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "security",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-35/",
      "url": "https://go.waylonwalker.com/thought-35/",
      "title": "💭 Harlequin SQL IDE - DuckDB",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://duckdb.org/docs/guides/sql_editors/harlequin\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/duckdb.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/duckdb.org.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003educkdb.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eHarlequin is a pretty sweet example of what textual can be used to create.   Its a terminal based sql ide for DuckDB.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://duckdb.org/docs/guides/sql_editors/harlequin\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003educkdb.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nHarlequin is a pretty sweet example of what textual can be used to create.   Its a terminal based sql ide for DuckDB.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://duckdb.org/docs/guides/sql_editors/harlequin",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "duckdb",
        "textual",
        "harlequin",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-34/",
      "url": "https://go.waylonwalker.com/thought-34/",
      "title": "💭 Python API - DuckDB",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"/static/https://duckdb.org/docs/api/python/overview.html\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"/static/https://duckdb.org/docs/api/python/overview.html\" alt=\"https://duckdb.org/docs/api/python/overview.html\"/ data-glightbox=\"description: https://duckdb.org/docs/api/python/overview.html\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eTo persist data in duckdb you need to first make a connection to a duck db database.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econ\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003educkdb\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econnect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;file.db\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen work off of the connection \u003ccode\u003econ\u003c/code\u003e rather than \u003ccode\u003educkdb\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econ\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esql\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;CREATE TABLE test(i INTEGER)\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econ\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esql\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;INSERT INTO test VALUES (42)\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# query the table\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econ\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etable\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;test\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eshow\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# explicitly close the connection\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econ\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eclose\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n![https://duckdb.org/docs/api/python/overview.html](/static/https://duckdb.org/docs/api/python/overview.html)\n\nTo persist data in duckdb you need to first make a connection to a duck db database.\n\n``` python\ncon = duckdb.connect('file.db')\n```\n\nThen work off of the connection `con` rather than `duckdb`.\n\n\n``` python\ncon.sql('CREATE TABLE test(i INTEGER)')\ncon.sql('INSERT INTO test VALUES (42)')\n# query the table\ncon.table('test').show()\n# explicitly close the connection\ncon.close()\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://duckdb.org/docs/api/python/overview.html",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "duckdb",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-33/",
      "url": "https://go.waylonwalker.com/thought-33/",
      "title": "💭 SQL on Pandas - DuckDB",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://duckdb.org/docs/guides/python/sql_on_pandas\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/duckdb.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/duckdb.org.png\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003educkdb.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003educkdb can just query any pandas dataframe that is in memory.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI tried running it against a list of objects and got this error.  Great error message that gives me supported types right in the message.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eMake\u003c/span\u003e \u003cspan class=\"n\"\u003esure\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;posts\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eeither\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003epandas\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDataFrame\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003educkdb\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDuckDBPyRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epyarrow\u003c/span\u003e \u003cspan class=\"n\"\u003eTable\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDataset\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eRecordBatchReader\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eScanner\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003eNumPy\u003c/span\u003e \u003cspan class=\"n\"\u003endarrays\u003c/span\u003e \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003esupported\u003c/span\u003e \u003cspan class=\"nb\"\u003eformat\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://duckdb.org/docs/guides/python/sql_on_pandas\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003educkdb.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nduckdb can just query any pandas dataframe that is in memory.\n\n\u003e I tried running it against a list of objects and got this error.  Great error message that gives me supported types right in the message.\n\n``` python\nMake sure that \"posts\" is either a pandas.DataFrame, duckdb.DuckDBPyRelation, pyarrow Table, Dataset, RecordBatchReader, Scanner, or NumPy ndarrays with supported format\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://duckdb.org/docs/guides/python/sql_pandas",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "data",
        "duckdb",
        "pandas",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-32/",
      "url": "https://go.waylonwalker.com/thought-32/",
      "title": "💭 pytest-subtests · PyPI",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/pytest-subtests/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"pytest-subtests — unittest subTest() support and subtests fixture\" loading=\"lazy\"/ data-glightbox=\"description: pytest-subtests — unittest subTest() support and subtests fixture\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epytest-subtests\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eunittest subTest() support and subtests fixture\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI · pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003epytest-subtests is a package to register multiple subtests within a similar test function.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://pypi.org/project/pytest-subtests/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://pypi.org/static/images/twitter.abaf4b19.webp\" alt=\"pytest-subtests — unittest subTest() support and subtests fixture\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003epytest-subtests\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eunittest subTest() support and subtests fixture\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ePyPI \u0026middot; pypi.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\npytest-subtests is a package to register multiple subtests within a similar test function.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://pypi.org/project/pytest-subtests/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "pytest",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-31/",
      "url": "https://go.waylonwalker.com/thought-31/",
      "title": "💭 Dark Form",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-codepen\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003ciframe class=\"embed-codepen\" src=\"https://codepen.io/Godex/embed/DLgQbg?default-tab=result\" loading=\"lazy\" allowfullscreen=\"\"\u003e\u003c/iframe\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eA nice codepen reference for dark forms.   I am using it for my thoughts chrome extension.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-codepen\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003ciframe class=\"embed-codepen\" src=\"https://codepen.io/Godex/embed/DLgQbg?default-tab=result\" loading=\"lazy\" allowfullscreen\u003e\u003c/iframe\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nA nice codepen reference for dark forms.   I am using it for my thoughts chrome extension.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://codepen.io/Godex/pen/DLgQbg",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-3/",
      "url": "https://go.waylonwalker.com/thought-3/",
      "title": "💭 python script is not found",
      "content_html": "\u003c!-- embed not found: None --\u003e\n\u003cp\u003e![[None]]\u003c/p\u003e\n\u003cp\u003eWhen setting up a new machine, vm, docker image you might be installing command line tools from places like pip.  They will often put executables in your \u003ccode\u003e~/.local/bin\u003c/code\u003e directory, but by default your shell is not looking in that directory for commands.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  WARNING: The script dotenv is installed in \u003cspan class=\"s1\"\u003e\u0026#39;/home/falcon/.local/bin\u0026#39;\u003c/span\u003e which is not on PATH.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Consider adding this directory to PATH or, \u003cspan class=\"k\"\u003eif\u003c/span\u003e you prefer to suppress this warning, use --no-warn-script-location.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo solve this you need to add that directory to your $PATH.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e:~/.local/bin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo make this change permanant add this line to your shell’s init script, which is likely something like \u003ccode\u003e~/.bashrc\u003c/code\u003e or \u003ccode\u003e~/.zshrc\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003c!-- embed not found: None --\u003e\n![[None]]\n\nWhen setting up a new machine, vm, docker image you might be installing command line tools from places like pip.  They will often put executables in your `~/.local/bin` directory, but by default your shell is not looking in that directory for commands.\n\n``` bash\n  WARNING: The script dotenv is installed in '/home/falcon/.local/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n```\n\nTo solve this you need to add that directory to your $PATH.\n\n\n``` bash\nexport PATH=$PATH:~/.local/bin\n```\n\nTo make this change permanant add this line to your shell's init script, which is likely something like `~/.bashrc` or `~/.zshrc`.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!None",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-29/",
      "url": "https://go.waylonwalker.com/thought-29/",
      "title": "💭 doyensec/wsrepl: WebSocket REPL for pentesters",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/doyensec/wsrepl\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://opengraph.githubassets.com/6522c5887cf26cbadc2e4d87213a87382800716b02eac7d86bcc5f8c87860206/doyensec/wsrepl\" alt=\"GitHub - doyensec/wsrepl: WebSocket REPL for pentesters — WebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.\" loading=\"lazy\"/ data-glightbox=\"description: GitHub - doyensec/wsrepl: WebSocket REPL for pentesters — WebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - doyensec/wsrepl: WebSocket REPL for pentesters\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub · github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eVery inspiring textual project to check out how they set up the ui.  Their intro video has a pretty epic dev experience.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/doyensec/wsrepl\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/6522c5887cf26cbadc2e4d87213a87382800716b02eac7d86bcc5f8c87860206/doyensec/wsrepl\" alt=\"GitHub - doyensec/wsrepl: WebSocket REPL for pentesters — WebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - doyensec/wsrepl: WebSocket REPL for pentesters\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nVery inspiring textual project to check out how they set up the ui.  Their intro video has a pretty epic dev experience.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://github.com/doyensec/wsrepl",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "websockets",
        "textual",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-28/",
      "url": "https://go.waylonwalker.com/thought-28/",
      "title": "💭 Doyensec on Twitter: \"Announcing wsrepl, the WebSocket testing...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/Doyensec/status/1681320727465672706\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003ewsrepl is an epic websocket repl built in python on the textual framework.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/Doyensec/status/1681320727465672706\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nwsrepl is an epic websocket repl built in python on the textual framework.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/Doyensec/status/1681320727465672706",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "websockets",
        "textual",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-27/",
      "url": "https://go.waylonwalker.com/thought-27/",
      "title": "💭 Filter Data - WHERE - SQLModel",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/where/#filter-rows-using-where-with-sqlmodel\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/where.png\" alt=\"Filter Data - WHERE - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"/ data-glightbox=\"description: Filter Data - WHERE - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFilter Data - WHERE - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eWhen fetching pydantic models from the database with sqlmodel, and you cannot select your item by id, you probably need to use a where clause.  This is the sqlmodel way of doing it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHere is a snippet of how I am using sqlmodel select and where to find a post by link in my thoughts database.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@post_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/link/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_post_by_link\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eSession\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_session\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ePostRead\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;get one post by link\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elink\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurllib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eunquote\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;link: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"o\"\u003e==\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efirst\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Post not found for link: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlmodel.tiangolo.com/tutorial/where/#filter-rows-using-where-with-sqlmodel\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sqlmodel.tiangolo.com/assets/images/social/tutorial/where.png\" alt=\"Filter Data - WHERE - SQLModel — SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFilter Data - WHERE - SQLModel\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eSQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlmodel.tiangolo.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nWhen fetching pydantic models from the database with sqlmodel, and you cannot select your item by id, you probably need to use a where clause.  This is the sqlmodel way of doing it.\n\n\u003e Here is a snippet of how I am using sqlmodel select and where to find a post by link in my thoughts database.\n\n``` python\n@post_router.get(\"/link/\")\nasync def get_post_by_link(\n    *,\n    session: Session = Depends(get_session),\n    link: str,\n) -\u003e PostRead:\n    \"get one post by link\"\n    link = urllib.parse.unquote(link)\n    print(f'link: {link}')\n    post = session.exec(select(Post).where(Post.link==link)).first()\n    if not post:\n        raise HTTPException(status_code=404, detail=f\"Post not found for link: {link}\")\n\n    return post\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlmodel.tiangolo.com/tutorial/where/#filter-rows-using-where-with-sqlmodel",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "fastapi",
        "sqlmodel",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-26/",
      "url": "https://go.waylonwalker.com/thought-26/",
      "title": "💭 URL Decoding query strings or form parameters in Python | URLD...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.urldecoder.io/python/\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.urldecoder.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.urldecoder.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eURL Decoding query strings or form parameters in Python | URLDecoder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eURL Decode online. URLDecoder is a simple and easy to use online tool for decoding URL components. Get started by typing or pasting a URL encoded string in the input text area, the tool will automa...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eurldecoder.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIn order to turn url encoded links back into links that I would find in the database of my thoughts project I need to urldecode them when they hit the api.  When anything hits the api it must urlencode the links in order for them to be sent correctly as data and not get parsed as part of the url.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHere is a snippet of how I am using urlib.parse.unquote to un-encode encoded urls so that I can fetch posts from the database.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@post_router.get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/link/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_post_by_link\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eSession\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eDepends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eget_session\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ePostRead\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;get one post by link\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elink\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurllib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparse\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eunquote\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;link: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esession\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhere\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"o\"\u003e==\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efirst\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"n\"\u003eHTTPException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edetail\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Post not found for link: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.urldecoder.io/python/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eURL Decoding query strings or form parameters in Python | URLDecoder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eURL Decode online. URLDecoder is a simple and easy to use online tool for decoding URL components. Get started by typing or pasting a URL encoded string in the input text area, the tool will automa...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eurldecoder.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIn order to turn url encoded links back into links that I would find in the database of my thoughts project I need to urldecode them when they hit the api.  When anything hits the api it must urlencode the links in order for them to be sent correctly as data and not get parsed as part of the url.\n\n\n\u003e Here is a snippet of how I am using urlib.parse.unquote to un-encode encoded urls so that I can fetch posts from the database.\n\n``` python\n@post_router.get(\"/link/\")\nasync def get_post_by_link(\n    *,\n    session: Session = Depends(get_session),\n    link: str,\n) -\u003e PostRead:\n    \"get one post by link\"\n    link = urllib.parse.unquote(link)\n    print(f'link: {link}')\n    post = session.exec(select(Post).where(Post.link==link)).first()\n    if not post:\n        raise HTTPException(status_code=404, detail=f\"Post not found for link: {link}\")\n\n    return post\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.urldecoder.io/python/",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "urlib",
        "fastapi",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-25/",
      "url": "https://go.waylonwalker.com/thought-25/",
      "title": "💭 encodeURIComponent() - JavaScript | MDN",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg class=\"glightbox\" src=\"https://developer.mozilla.org/mdn-social-image.46ac2375.png\" alt=\"encodeURIComponent() - JavaScript | MDN — The encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two surrogate characters). Compared to encodeURI(), this function encodes more characters, including those that are part of the URI syntax.\" loading=\"lazy\"/ data-glightbox=\"description: encodeURIComponent() - JavaScript | MDN — The encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two surrogate characters). Compared to encodeURI(), this function encodes more characters, including those that are part of the URI syntax.\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eencodeURIComponent() - JavaScript | MDN\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMDN Web Docs · developer.mozilla.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eIn order to send data that includes special characters such as \u003ccode\u003e/\u003c/code\u003e in a url you need to url encode it.  You have probably seen these many times in urls with things like %20 for spaces.\u003c/p\u003e\n\u003cp\u003eI’m working on a chrome extension to make quick blog posts, like thoughts or a persistent bookmark tool with comments.  The backend is written in \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 and when I check to see if I have a post for a page I need to url encode it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -X \u003cspan class=\"s1\"\u003e\u0026#39;GET\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  \u003cspan class=\"s1\"\u003e\u0026#39;https://thoughts.waylonwalker.com/link/?link=https%3A%2F%2Fhtmx.org%2Fextensions%2Fclient-side-templates%2F\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  -H \u003cspan class=\"s1\"\u003e\u0026#39;accept: application/json\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003ecurl example generated from the fastapi swagger docs.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eHere is how I used javascript’s \u003ccode\u003eencodeURIComponent\u003c/code\u003e to turn my chrome extension into a notification when I already have a post for the current page.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e// Event listener for tab changes\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e\u003cspan class=\"nx\"\u003echrome\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003etabs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eonActivated\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eaddListener\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kd\"\u003efunction\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eactiveInfo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e// Get the active tab information\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e  \u003cspan class=\"nx\"\u003echrome\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003etabs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eactiveInfo\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003etabId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003etab\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nx\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003etab\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003egetData\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sb\"\u003e`https://thoughts.waylonwalker.com/link/?link=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nb\"\u003eencodeURIComponent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"nx\"\u003ethen\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003econsole\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003elog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;link data: \u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehasOwnProperty\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;detail\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003echrome\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ebrowserAction\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003esetBadgeText\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e \u003cspan class=\"nx\"\u003etext\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003elocalStorageKey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"sb\"\u003e`formData-\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nx\"\u003eurl\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003echrome\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ebrowserAction\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003esetBadgeText\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e \u003cspan class=\"nx\"\u003etext\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003echrome\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ebrowserAction\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003esetBadgeBackgroundColor\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e \u003cspan class=\"nx\"\u003ecolor\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;#80A3D5\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003elocalStorage\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003esetItem\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003elocalStorageKey\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003eJSON\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003estringify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e));\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://developer.mozilla.org/mdn-social-image.46ac2375.png\" alt=\"encodeURIComponent() - JavaScript | MDN — The encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two surrogate characters). Compared to encodeURI(), this function encodes more characters, including those that are part of the URI syntax.\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eencodeURIComponent() - JavaScript | MDN\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eMDN Web Docs \u0026middot; developer.mozilla.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nIn order to send data that includes special characters such as `/` in a url you need to url encode it.  You have probably seen these many times in urls with things like %20 for spaces.\n\nI'm working on a chrome extension to make quick blog posts, like thoughts or a persistent bookmark tool with comments.  The backend is written in fastapi and when I check to see if I have a post for a page I need to url encode it.\n\n``` bash\ncurl -X 'GET' \\\n  'https://thoughts.waylonwalker.com/link/?link=https%3A%2F%2Fhtmx.org%2Fextensions%2Fclient-side-templates%2F' \\\n  -H 'accept: application/json'\n```\n\n\u003e curl example generated from the fastapi swagger docs.\n\nHere is how I used javascript's `encodeURIComponent` to turn my chrome extension into a notification when I already have a post for the current page.\n\n``` js\n// Event listener for tab changes\nchrome.tabs.onActivated.addListener(function (activeInfo) {\n  // Get the active tab information\n  chrome.tabs.get(activeInfo.tabId, function (tab) {\n    const url = tab.url || \"\";\n\n    getData(`https://thoughts.waylonwalker.com/link/?link=${encodeURIComponent(url)}`).then((data) =\u003e {\n        console.log('link data: ', data);\n      if (data.hasOwnProperty('detail')) {\n        chrome.browserAction.setBadgeText({ text: \"\" });\n      } else {\n        localStorageKey = `formData-${url}`;\n        chrome.browserAction.setBadgeText({ text: \"1\" });\n        chrome.browserAction.setBadgeBackgroundColor({ color: \"#80A3D5\" });\n        localStorage.setItem(localStorageKey, JSON.stringify(data));\n      }\n    });\n  });\n});\n```\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "javascript",
        "webdev",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-2/",
      "url": "https://go.waylonwalker.com/thought-2/",
      "title": "💭 LazyVim Installation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.lazyvim.org/installation\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.lazyvim.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.lazyvim.org.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e🛠️ Installation | LazyVim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou can find a starter template for LazyVim here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elazyvim.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eLately in 2023 I have been leaning on lazyvim for my new setups where I am not necessarily ready to drop my full config.  It’s been pretty solid, and comes with a very nice setup out of the box, the docs are pretty fantastic as well.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://www.lazyvim.org/installation\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e🛠️ Installation | LazyVim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYou can find a starter template for LazyVim here\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elazyvim.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nLately in 2023 I have been leaning on lazyvim for my new setups where I am not necessarily ready to drop my full config.  It's been pretty solid, and comes with a very nice setup out of the box, the docs are pretty fantastic as well.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.lazyvim.org/installation",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "linux",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-16/",
      "url": "https://go.waylonwalker.com/thought-16/",
      "title": "💭 Python Sucks And I LOVE It | Prime Reacts - YouTube",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"8D7FZoQ-z20\" title=\"Python Sucks And I LOVE It | Prime Reacts\" playlabel=\"Play: Python Sucks And I LOVE It | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003ePrime reviews an article with some hot takes about python being slow and quirky, but good enough for a lot of things.  Especially data applications that have libraries written in C.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external embed-card-provider-youtube\"\u003e\n  \u003cdiv class=\"embed-card-rich\"\u003e\n\u003clite-youtube videoid=\"8D7FZoQ-z20\" title=\"Python Sucks And I LOVE It | Prime Reacts\" playlabel=\"Play: Python Sucks And I LOVE It | Prime Reacts\"\u003e\u003c/lite-youtube\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\nPrime reviews an article with some hot takes about python being slow and quirky, but good enough for a lot of things.  Especially data applications that have libraries written in C.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://www.youtube.com/watch?v=8D7FZoQ-z20\u0026t=97",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-15/",
      "url": "https://go.waylonwalker.com/thought-15/",
      "title": "💭 Changelog on Twitter: \"🗣️ @kelseyhightower on his demos: That ...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/changelog/status/1681306857951084544\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eSuch an inspiring clip from Kelsey Heightower.  Make good shit that inspires people rather than fake ppts of how things \u003cem\u003ecould\u003c/em\u003e be.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/changelog/status/1681306857951084544\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nSuch an inspiring clip from Kelsey Heightower.  Make good shit that inspires people rather than fake ppts of how things _could_ be.\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/changelog/status/1681306857951084544",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "soft",
        "presentation",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-14/",
      "url": "https://go.waylonwalker.com/thought-14/",
      "title": "💭 Chris Coyier on Twitter: \"I was unaware of `text-wrap: pretty;...",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/chriscoyier/status/1681407724993798144\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) · twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eNext time I’m working with large headers on small screens I need to try this.  I always truggle to get them to look good for most text and overflow ridiculously long words correctly or at all.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003etext-wrap\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nt\"\u003epretty\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003etext-wrap\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nt\"\u003ebalance\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://twitter.com/chriscoyier/status/1681407724993798144\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eExternal Link\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eX (formerly Twitter) \u0026middot; twitter.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\nNext time I'm working with large headers on small screens I need to try this.  I always truggle to get them to look good for most text and overflow ridiculously long words correctly or at all.\n\n\n``` css\ntext-wrap: pretty;\ntext-wrap: balance\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://twitter.com/chriscoyier/status/1681407724993798144",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "css",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-13/",
      "url": "https://go.waylonwalker.com/thought-13/",
      "title": "💭 Full-text search - Datasette documentation",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.datasette.io/en/latest/full_text_search.html#enabling-full-text-search-for-a-sqlite-table\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.datasette.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.datasette.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFull-text search - Datasette documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eEnable full-text search in sqlite using sqlite-utils.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ sqlite-utils enable-fts mydatabase.db items name description\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.datasette.io/en/latest/full_text_search.html#enabling-full-text-search-for-a-sqlite-table\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eFull-text search - Datasette documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nEnable full-text search in sqlite using sqlite-utils.\n\n``` bash\n$ sqlite-utils enable-fts mydatabase.db items name description\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://docs.datasette.io/en/latest/full_search.html#enabling-full-text-search-for-a-sqlite-table",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-12/",
      "url": "https://go.waylonwalker.com/thought-12/",
      "title": "💭 sqlite-utils command-line tool - sqlite-utils",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlite-utils.datasette.io/en/stable/cli.html#querying-data-directly-using-an-in-memory-database\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/sqlite-utils.datasette.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/sqlite-utils.datasette.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-utils command-line tool - sqlite-utils\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlite-utils.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eI want to like jq, but I think Simon is selling me on sqlite, maybe its just me but this looks readable, hackable, editable, memorizable.  Everytime I try jq, and its 5 minutes fussing with it just to get the most basic thing to work.  I know enough sql out of the gate to make this work off the top of my head\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl  https://thoughts.waylonwalker.com/posts/ \u003cspan class=\"p\"\u003e|\u003c/span\u003e sqlite-utils memory - \u003cspan class=\"s1\"\u003e\u0026#39;select title, message from stdin where stdin.tags like \u0026#34;%python%\u0026#34;\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e jq\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlite-utils.datasette.io/en/stable/cli.html#querying-data-directly-using-an-in-memory-database\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-utils command-line tool - sqlite-utils\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlite-utils.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nI want to like jq, but I think Simon is selling me on sqlite, maybe its just me but this looks readable, hackable, editable, memorizable.  Everytime I try jq, and its 5 minutes fussing with it just to get the most basic thing to work.  I know enough sql out of the gate to make this work off the top of my head\n\n\n``` bash\ncurl  https://thoughts.waylonwalker.com/posts/ | sqlite-utils memory - 'select title, message from stdin where stdin.tags like \"%python%\"' | jq\n```\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlite-utils.datasette.io/en/stable/cli.html#querying-data-directly-using-an-in-memory-database",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "sql",
        "json",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-11/",
      "url": "https://go.waylonwalker.com/thought-11/",
      "title": "💭 sqlite-utils command-line tool - sqlite-utils",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlite-utils.datasette.io/en/stable/cli.html#inserting-json-data\" class=\"embed-card-link  has-avatar has-avatar-before\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/sqlite-utils.datasette.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/sqlite-utils.datasette.io.ico\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-utils command-line tool - sqlite-utils\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlite-utils.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003einsert a json array directly into into sqlite with sqlite-utils.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;{\u0026#34;name\u0026#34;: \u0026#34;Cleo\u0026#34;, \u0026#34;age\u0026#34;: 4}\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sqlite-utils insert dogs.db dogs -\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sqlite-utils.datasette.io/en/stable/cli.html#inserting-json-data\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003esqlite-utils command-line tool - sqlite-utils\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003esqlite-utils.datasette.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\ninsert a json array directly into into sqlite with sqlite-utils.\n\n``` bash\necho '{\"name\": \"Cleo\", \"age\": 4}' | sqlite-utils insert dogs.db dogs -\n```\n\n\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://sqlite-utils.datasette.io/en/stable/cli.html#inserting-json-data",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "sqlite",
        "data",
        "database",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thought-10/",
      "url": "https://go.waylonwalker.com/thought-10/",
      "title": "💭 jq Cheat Sheet",
      "content_html": "\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://lzone.de/cheat-sheet/jq\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLZone\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLZone - Cheat Sheets for Sysadmin / DevOps / System Architecture\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elzone.de\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cp\u003eA nice cheat sheet for jq. jq looks so nice, but it so quickly gets overwhelming on how to select what you want.  I was able to make a jq contains query.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl  https://thoughts.waylonwalker.com/posts/ \u003cspan class=\"p\"\u003e|\u003c/span\u003e jq \u003cspan class=\"s1\"\u003e\u0026#39;.[] | select(.title | contains(\u0026#34;python\u0026#34;))\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp\u003eThis post is a \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...\"\u003ethought\u003c/a\u003e. It’s a short note that I make\nabout someone else’s content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=\"2\" data-reading-time=\"3\" data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://lzone.de/cheat-sheet/jq\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLZone\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLZone - Cheat Sheets for Sysadmin / DevOps / System Architecture\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elzone.de\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\nA nice cheat sheet for jq. jq looks so nice, but it so quickly gets overwhelming on how to select what you want.  I was able to make a jq contains query.\n\n``` bash\ncurl  https://thoughts.waylonwalker.com/posts/ | jq '.[] | select(.title | contains(\"python\"))'\n```\n\n!!! note\n\n    This post is a \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\"\u003ethought\u003c/a\u003e. It's a short note that I make\n    about someone else's content online \u003ca href=\"/tags/thoughts/\" class=\"hashtag-tag\" data-tag=\"thoughts\" data-count=2 data-reading-time=3 data-reading-time-text=\"3 minutes\"\u003e#thoughts\u003c/a\u003e\n",
      "summary": "!https://lzone.de/cheat-sheet/jq",
      "date_published": "2023-07-28T14:59:37Z",
      "date_modified": "2023-07-28T14:59:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "jq",
        "ijq",
        "json",
        "thought"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/simonw-sqlite-migrate/",
      "url": "https://go.waylonwalker.com/simonw-sqlite-migrate/",
      "title": "⭐ simonw sqlite-migrate",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/simonw/sqlite-migrate\" 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\"\u003esqlite-migrate\u003c/a\u003e by \u003ca href=\"https://github.com/simonw\" 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\"\u003esimonw\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA simple database migration system for SQLite, based on sqlite-utils\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [sqlite-migrate](https://github.com/simonw/sqlite-migrate) by [simonw](https://github.com/simonw).\n\nA simple database migration system for SQLite, based on sqlite-utils\n",
      "summary": "Looking for inspiration? sqlite-migrate by simonw.",
      "date_published": "2023-07-25T14:31:30Z",
      "date_modified": "2023-07-25T14:31:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/1j01-textual-paint/",
      "url": "https://go.waylonwalker.com/1j01-textual-paint/",
      "title": "⭐ 1j01 textual-paint",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/1j01/textual-paint\" 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\"\u003etextual-paint\u003c/a\u003e by \u003ca href=\"https://github.com/1j01\" 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\"\u003e1j01\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🎨 MS Paint in your terminal.\u003c/p\u003e\n",
      "content_text": "\nThe work on [textual-paint](https://github.com/1j01/textual-paint) by [1j01](https://github.com/1j01).\n\n:art: MS Paint in your terminal.\n",
      "summary": "The work on textual-paint by 1j01.",
      "date_published": "2023-07-25T14:24:19Z",
      "date_modified": "2023-07-25T14:24:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/doyensec-wsrepl/",
      "url": "https://go.waylonwalker.com/doyensec-wsrepl/",
      "title": "⭐ doyensec wsrepl",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/doyensec/wsrepl\" 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\"\u003ewsrepl\u003c/a\u003e by \u003ca href=\"https://github.com/doyensec\" 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\"\u003edoyensec\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eWebSocket REPL for pentesters\u003c/p\u003e\n",
      "content_text": "\nCheck out [wsrepl](https://github.com/doyensec/wsrepl) by [doyensec](https://github.com/doyensec). It's a well-crafted project with great potential.\n\nWebSocket REPL for pentesters\n",
      "summary": "Check out wsrepl by doyensec. It's a well-crafted project with great potential.",
      "date_published": "2023-07-20T15:17:04Z",
      "date_modified": "2023-07-20T15:17:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/huggingface-llm-nvim/",
      "url": "https://go.waylonwalker.com/huggingface-llm-nvim/",
      "title": "⭐ huggingface llm.nvim",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/huggingface/llm.nvim\" 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\"\u003ellm.nvim\u003c/a\u003e, created by \u003ca href=\"https://github.com/huggingface\" 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\"\u003ehuggingface\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eLLM powered development for Neovim\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [llm.nvim](https://github.com/huggingface/llm.nvim), created by [huggingface](https://github.com/huggingface).\n\nLLM powered development for Neovim\n",
      "summary": "If you're into interesting projects, don't miss out on llm.nvim, created by huggingface.",
      "date_published": "2023-07-11T12:26:53Z",
      "date_modified": "2023-07-11T12:26:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/maces-fastapi-htmx/",
      "url": "https://go.waylonwalker.com/maces-fastapi-htmx/",
      "title": "⭐ maces fastapi-htmx",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/maces\" 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\"\u003emaces’s\u003c/a\u003e project \u003ca href=\"https://github.com/maces/fastapi-htmx\" 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\"\u003efastapi-htmx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eExtension for \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 to make \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003eHTMX\u003c/a\u003e easier to use.\u003c/p\u003e\n",
      "content_text": "\nI like [maces's](https://github.com/maces) project [fastapi-htmx](https://github.com/maces/fastapi-htmx).\n\nExtension for FastAPI to make HTMX easier to use.\n",
      "summary": "I like maces's project fastapi-htmx.",
      "date_published": "2023-07-03T14:56:51Z",
      "date_modified": "2023-07-03T14:56:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ericsnowcurrently-interpreters/",
      "url": "https://go.waylonwalker.com/ericsnowcurrently-interpreters/",
      "title": "⭐ ericsnowcurrently interpreters",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ericsnowcurrently/interpreters\" 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\"\u003einterpreters\u003c/a\u003e by \u003ca href=\"https://github.com/ericsnowcurrently\" 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\"\u003eericsnowcurrently\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ea placeholder\u003c/p\u003e\n",
      "content_text": "\nThe work on [interpreters](https://github.com/ericsnowcurrently/interpreters) by [ericsnowcurrently](https://github.com/ericsnowcurrently).\n\na placeholder\n",
      "summary": "The work on interpreters by ericsnowcurrently.",
      "date_published": "2023-06-27T16:07:38Z",
      "date_modified": "2023-06-27T16:07:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/coollabsio-coolify/",
      "url": "https://go.waylonwalker.com/coollabsio-coolify/",
      "title": "⭐ coollabsio coolify",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/coollabsio/coolify\" 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\"\u003ecoolify\u003c/a\u003e by \u003ca href=\"https://github.com/coollabsio\" 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\"\u003ecoollabsio\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eAn open-source \u0026amp; self-hostable Heroku / Netlify / Vercel alternative.\u003c/p\u003e\n",
      "content_text": "\nCheck out [coolify](https://github.com/coollabsio/coolify) by [coollabsio](https://github.com/coollabsio). It's a well-crafted project with great potential.\n\nAn open-source \u0026 self-hostable Heroku / Netlify / Vercel alternative.\n",
      "summary": "Check out coolify by coollabsio. It's a well-crafted project with great potential.",
      "date_published": "2023-06-24T12:39:53Z",
      "date_modified": "2023-06-24T12:39:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-scandir-ignores-hidden-directories/",
      "url": "https://go.waylonwalker.com/python-scandir-ignores-hidden-directories/",
      "title": "Python scandir ignores hidden directories",
      "content_html": "\u003cp\u003eThe next version of markata will be around a full second faster at building\nit’s docs, that’s a 30% bump in performance at the current state. This\nperformance will come when virtual environments are stored in the same\ndirectory as the source code.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000300.1657735302.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000300.1657735302.webp\" alt=\"“One lone jedi stands in Glowing chains of interconnected network of technological cubes, in the middle of a futuristic cyberpunk dubai city, in the art style of dan mumford and marc simonetti, atmospheric lighting, intricate, volumetric lighting, beautiful, sharp focus, ultra detailed” -s50 -W800 -H350 -C7.5 -Ak_lms -S1657735302\"/ data-glightbox=\"description: “One lone jedi stands in Glowing chains of interconnected network of technological cubes, in the middle of a futuristic cyberpunk dubai city, in the art style of dan mumford and marc simonetti, atmospheric lighting, intricate, volumetric lighting, beautiful, sharp focus, ultra detailed” -s50 -W800 -H350 -C7.5 -Ak_lms -S1657735302\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"what-happened\"\u003eWhat happened?? \u003ca href=\"#what-happened\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI was looking through my profiler for some unexpected performance hits, and\nnoticed that the \u003ccode\u003edocs\u003c/code\u003e plugin was taking nearly a full second (sometimes\nmore), just to run glob.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|-\u003c/span\u003e \u003cspan class=\"mf\"\u003e1.068\u003c/span\u003e \u003cspan class=\"n\"\u003eglob\u003c/span\u003e  \u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eplugins\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edocs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e40\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|-\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.838\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003elistcomp\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e  \u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eplugins\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edocs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e82\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.817\u003c/span\u003e \u003cspan class=\"n\"\u003ePathSpec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ematch_file\u003c/span\u003e  \u003cspan class=\"n\"\u003epathspec\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003epathspec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e165\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"o\"\u003e|\u003c/span\u003e        \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e14\u003c/span\u003e \u003cspan class=\"n\"\u003eframes\u003c/span\u003e \u003cspan class=\"n\"\u003ehidden\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e  \u003cspan class=\"n\"\u003epathspec\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ebuilt\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003ein\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"python-scandir-ignores-hidden-directories\"\u003ePython scandir ignores hidden directories \u003ca href=\"#python-scandir-ignores-hidden-directories\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI started looking for different solutions and what I found was that I was\nhitting pathspec with way more files than I needed to.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/*.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 6444\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/*.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erecursive\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 110\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAfter digging into the docs I found that \u003ccode\u003eglob.glob\u003c/code\u003e uses \u003ccode\u003eos.scandir\u003c/code\u003e which\nignores ‘.’ and ‘..’ directories while Path.glob does not.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://docs.python.org/3/library/os.html#os.scandir\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.python.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.python.org.ico\"\u003ehttps://docs.python.org/3/library/os.html#os.scandir\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"results\"\u003eresults? \u003ca href=\"#results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow glob.py from the docs plugin does not even show up in the profiler.\u003c/p\u003e\n\u003cp\u003eI opened up ipython and saw the following results. For some reason as I hit\ndocs.glob it was only hitting 488 ms from ipython, but it was still a massive\nimprovement over the original.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"n\"\u003etimeit\u003c/span\u003e \u003cspan class=\"n\"\u003edocs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 488 ms ± 3.05 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"n\"\u003etimeit\u003c/span\u003e \u003cspan class=\"n\"\u003edocs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 9.37 ms ± 90.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThe next version of markata will be around a full second faster at building\nit's docs, that's a 30% bump in performance at the current state. This\nperformance will come when virtual environments are stored in the same\ndirectory as the source code.\n\n![\"One lone jedi stands in Glowing chains of interconnected network of technological cubes, in the middle of a futuristic cyberpunk dubai city, in the art style of dan mumford and marc simonetti, atmospheric lighting, intricate, volumetric lighting, beautiful, sharp focus, ultra detailed\" -s50 -W800 -H350 -C7.5 -Ak_lms -S1657735302](https://stable-diffusion.waylonwalker.com/000300.1657735302.webp)\n\n## What happened??\n\nI was looking through my profiler for some unexpected performance hits, and\nnoticed that the `docs` plugin was taking nearly a full second (sometimes\nmore), just to run glob.\n\n```python\n    |  |- 1.068 glob  markata/plugins/docs.py:40\n    |  |  |- 0.838 \u003clistcomp\u003e  markata/plugins/docs.py:82\n    |  |  |  `- 0.817 PathSpec.match_file  pathspec/pathspec.py:165\n    |  |  |        [14 frames hidden]  pathspec, \u003cbuilt-in\u003e, \u003cstring\u003e\n```\n\n## Python scandir ignores hidden directories\n\nI started looking for different solutions and what I found was that I was\nhitting pathspec with way more files than I needed to.\n\n```python\nlen(list(Path().glob(\"**/*.py\")))\n# 6444\nlen([Path(f) for f in glob.glob(\"**/*.py\", recursive=True)])\n# 110\n```\n\nAfter digging into the docs I found that `glob.glob` uses `os.scandir` which\nignores '.' and '..' directories while Path.glob does not.\n\n[https://docs.python.org/3/library/os.html#os.scandir](https://docs.python.org/3/library/os.html#os.scandir){.hoverlink}\n\n## results?\n\nNow glob.py from the docs plugin does not even show up in the profiler.\n\nI opened up ipython and saw the following results. For some reason as I hit\ndocs.glob it was only hitting 488 ms from ipython, but it was still a massive\nimprovement over the original.\n\n```python\n%timeit docs.glob(m)\n# 488 ms ± 3.05 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n\n%timeit docs.glob(m)\n# 9.37 ms ± 90.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n```\n",
      "summary": "The next version of markata will be around a full second faster at building it's docs, that's a 30% bump in performance at the current state. This...",
      "date_published": "2023-06-17T20:19:59Z",
      "date_modified": "2023-06-17T20:19:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mitsuhiko-minijinja/",
      "url": "https://go.waylonwalker.com/mitsuhiko-minijinja/",
      "title": "⭐ mitsuhiko minijinja",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/mitsuhiko/minijinja\" 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\"\u003eminijinja\u003c/a\u003e from \u003ca href=\"https://github.com/mitsuhiko\" 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\"\u003emitsuhiko\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMiniJinja is a powerful but minimal dependency template engine for Rust compatible with Jinja/Jinja2\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [minijinja](https://github.com/mitsuhiko/minijinja) from [mitsuhiko](https://github.com/mitsuhiko).\n\nMiniJinja is a powerful but minimal dependency template engine for Rust compatible with Jinja/Jinja2\n",
      "summary": "I'm impressed by minijinja from mitsuhiko.",
      "date_published": "2023-06-16T14:19:21Z",
      "date_modified": "2023-06-16T14:19:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/antonosika-gpt-engineer/",
      "url": "https://go.waylonwalker.com/antonosika-gpt-engineer/",
      "title": "⭐ AntonOsika gpt-engineer",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/AntonOsika/gpt-engineer\" 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\"\u003egpt-engineer\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/AntonOsika\" 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\"\u003eAntonOsika\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003ePlatform to experiment with the AI Software Engineer. Terminal based. NOTE: Very different from \u003ca href=\"https://gptengineer.app\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gptengineer.app.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gptengineer.app.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://gptengineer.app\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [gpt-engineer](https://github.com/AntonOsika/gpt-engineer), an amazing project by [AntonOsika](https://github.com/AntonOsika). It's worth exploring!\n\nPlatform to experiment with the AI Software Engineer. Terminal based. NOTE: Very different from https://gptengineer.app\n",
      "summary": "I'm really excited about gpt-engineer, an amazing project by AntonOsika. It's worth exploring!",
      "date_published": "2023-06-15T02:24:17Z",
      "date_modified": "2023-06-15T02:24:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/s0md3v-roop/",
      "url": "https://go.waylonwalker.com/s0md3v-roop/",
      "title": "⭐ s0md3v roop",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/s0md3v\" 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\"\u003es0md3v’s\u003c/a\u003e project \u003ca href=\"https://github.com/s0md3v/roop\" 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\"\u003eroop\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eone-click face swap\u003c/p\u003e\n",
      "content_text": "\nI like [s0md3v's](https://github.com/s0md3v) project [roop](https://github.com/s0md3v/roop).\n\none-click face swap\n",
      "summary": "I like s0md3v's project roop.",
      "date_published": "2023-05-30T22:14:09Z",
      "date_modified": "2023-05-30T22:14:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tidwall-jj/",
      "url": "https://go.waylonwalker.com/tidwall-jj/",
      "title": "⭐ tidwall jj",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tidwall\" 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\"\u003etidwall\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/tidwall/jj\" 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\"\u003ejj\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eJSON Stream Editor (command line utility)\u003c/p\u003e\n",
      "content_text": "\n[tidwall](https://github.com/tidwall) has done a fantastic job with [jj](https://github.com/tidwall/jj). Highly recommend taking a look.\n\nJSON Stream Editor (command line utility)\n",
      "summary": "tidwall has done a fantastic job with jj. Highly recommend taking a look.",
      "date_published": "2023-05-30T22:11:25Z",
      "date_modified": "2023-05-30T22:11:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darrenburns-elia/",
      "url": "https://go.waylonwalker.com/darrenburns-elia/",
      "title": "⭐ darrenburns elia",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/darrenburns/elia\" 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\"\u003eelia\u003c/a\u003e by \u003ca href=\"https://github.com/darrenburns\" 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\"\u003edarrenburns\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA snappy, keyboard-centric terminal user interface for interacting with large language models. Chat with ChatGPT, Claude, Llama 3, Phi 3, Mistral, Gemma and more.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [elia](https://github.com/darrenburns/elia) by [darrenburns](https://github.com/darrenburns), and it's truly impressive.\n\nA snappy, keyboard-centric terminal user interface for interacting with large language models. Chat with ChatGPT, Claude, Llama 3, Phi 3, Mistral, Gemma and more.\n",
      "summary": "I recently discovered elia by darrenburns, and it's truly impressive.",
      "date_published": "2023-05-30T19:08:14Z",
      "date_modified": "2023-05-30T19:08:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/getting-started-with-pydantic/",
      "url": "https://go.waylonwalker.com/getting-started-with-pydantic/",
      "title": "Getting Started with Pydantic",
      "content_html": "\u003cpre\u003e\u003ccode class=\"language-{.python\"\u003eglobal Field\nglobal BaseModel\nfrom pydantic import BaseModel\nfrom pydantic import Field\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePydantic is a Python library for serializing data into models that can be\nvalidated with a deep set of built in valitators or your own custom validators,\nand deserialize back to JSON or dictionary.\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo install pydantic you will first need python and pip. Once you have pip\ninstalled you can install pydantic with pip.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install pydantic\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eAlways install in a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"creating-a-pydantic-model\"\u003eCreating a Pydantic model \u003ca href=\"#creating-a-pydantic-model\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo get started with pydantic you will first need to create a Pydantic model.\nThis is a python class that inherits from \u003ccode\u003epydantic.BaseModel\u003c/code\u003e.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.python\"\u003efrom pydantic import BaseModel\nfrom pydantic import Field\nfrom typing import Optional\n\nclass Person(BaseModel):\n    name: str = Field(...)\n    age: int\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"parsing-an-object\"\u003eparsing an object \u003ca href=\"#parsing-an-object\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.python\"\u003eperson = Person(name=\u0026#34;John Doe\u0026#34;, age=30)\nprint(person)\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.console\"\u003ename=\u0026#39;John Doe\u0026#39; age=30\n\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"data-serialization\"\u003edata serialization \u003ca href=\"#data-serialization\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePydantic has some very robust serialization methods that will automatically\ncoherse your data into the type specified by the type-hint in the model if it can.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.python\"\u003eperson = Person(name=12, age=\u0026#34;30\u0026#34;)\nprint(f\u0026#39;name: {person.name}, type: {type(person.name)}\u0026#39;)\nprint(f\u0026#39;age: {person.age}, type: {type(person.age)}\u0026#39;)\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.console\"\u003e1 validation error for Person\nname\n  Input should be a valid string [type=string_type, input_value=12, input_type=int]\n    For further information visit https://errors.pydantic.dev/2.3/v/string_type\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.python\"\u003eperson = Person(name=\u0026#34;John Doe\u0026#34;, age=\u0026#39;thirty\u0026#39;)\nprint(f\u0026#39;name: {person.name}, type: {type(person.name)}\u0026#39;)\nprint(f\u0026#39;age: {person.age}, type: {type(person.age)}\u0026#39;)\n\u003c/code\u003e\u003c/pre\u003e\n\u003cpre\u003e\u003ccode class=\"language-{.console\"\u003e1 validation error for Person\nage\n  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value=\u0026#39;thirty\u0026#39;, input_type=str]\n    For further information visit https://errors.pydantic.dev/2.3/v/int_parsing\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"loading-from-json\"\u003eloading from json \u003ca href=\"#loading-from-json\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch2 id=\"serializing-to-json\"\u003eserializing to json \u003ca href=\"#serializing-to-json\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch2 id=\"validation\"\u003evalidation \u003ca href=\"#validation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n",
      "content_text": "\n```{.python .darkmark}\nglobal Field\nglobal BaseModel\nfrom pydantic import BaseModel\nfrom pydantic import Field\n```\n\nPydantic is a Python library for serializing data into models that can be\nvalidated with a deep set of built in valitators or your own custom validators,\nand deserialize back to JSON or dictionary.\n\n## Installation\n\nTo install pydantic you will first need python and pip. Once you have pip\ninstalled you can install pydantic with pip.\n\n```bash\npip install pydantic\n```\n\n\u003e Always install in a virtual environment\n\n## Creating a Pydantic model\n\nTo get started with pydantic you will first need to create a Pydantic model.\nThis is a python class that inherits from `pydantic.BaseModel`.\n\n```{.python .darkmark}\nfrom pydantic import BaseModel\nfrom pydantic import Field\nfrom typing import Optional\n\nclass Person(BaseModel):\n    name: str = Field(...)\n    age: int\n```\n\n## parsing an object\n\n```{.python .darkmark}\nperson = Person(name=\"John Doe\", age=30)\nprint(person)\n```\n``` {.console .darkmark_output}\nname='John Doe' age=30\n\n```\n\n\n## data serialization\n\nPydantic has some very robust serialization methods that will automatically\ncoherse your data into the type specified by the type-hint in the model if it can.\n\n```{.python .darkmark}\nperson = Person(name=12, age=\"30\")\nprint(f'name: {person.name}, type: {type(person.name)}')\nprint(f'age: {person.age}, type: {type(person.age)}')\n```\n``` {.console .darkmark_output}\n1 validation error for Person\nname\n  Input should be a valid string [type=string_type, input_value=12, input_type=int]\n    For further information visit https://errors.pydantic.dev/2.3/v/string_type\n```\n\n\n```{.python .darkmark}\nperson = Person(name=\"John Doe\", age='thirty')\nprint(f'name: {person.name}, type: {type(person.name)}')\nprint(f'age: {person.age}, type: {type(person.age)}')\n```\n``` {.console .darkmark_output}\n1 validation error for Person\nage\n  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='thirty', input_type=str]\n    For further information visit https://errors.pydantic.dev/2.3/v/int_parsing\n```\n\n\n## loading from json\n\n## serializing to json\n\n## validation\n",
      "summary": "Pydantic is a Python library for serializing data into models that can be validated with a deep set of built in valitators or your own custom validators, and...",
      "date_published": "2023-05-30T13:35:27Z",
      "date_modified": "2023-05-30T13:35:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "pydantic"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/calcom-cal-com/",
      "url": "https://go.waylonwalker.com/calcom-cal-com/",
      "title": "⭐ calcom cal.com",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/calcom/cal.com\" 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\"\u003ecal.com\u003c/a\u003e by \u003ca href=\"https://github.com/calcom\" 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\"\u003ecalcom\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eScheduling infrastructure for absolutely everyone.\u003c/p\u003e\n",
      "content_text": "\nThe work on [cal.com](https://github.com/calcom/cal.com) by [calcom](https://github.com/calcom).\n\nScheduling infrastructure for absolutely everyone.\n",
      "summary": "The work on cal.com by calcom.",
      "date_published": "2023-05-28T15:45:42Z",
      "date_modified": "2023-05-28T15:45:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/setting-up-paru/",
      "url": "https://go.waylonwalker.com/setting-up-paru/",
      "title": "setting up paru | installing from the AUR for the first time",
      "content_html": "\u003cp\u003e\u003ca href=\"/paru/\" class=\"glossary-term\" title=\"paru is a package manager for archlinux that installs packages from the \u003ca href=\"/aur/\" class=\"glossary-term\" title=\"Arch User Repository, a collection of community maintained packages for archlinux.\"\u003eAUR\u003c/a\u003e.\"\u003eparu\u003c/a\u003e is an aur helper that allows you to use a package manager to install\npackages from the aur.\u003c/p\u003e\n\u003ch2 id=\"whats-the-aur\"\u003eWhat’s the Aur \u003ca href=\"#whats-the-aur\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe Aur is a set of community managed packages that can be installed on arch based distros.\u003c/p\u003e\n\u003ch2 id=\"why-a-helper\"\u003eWhy a helper? \u003ca href=\"#why-a-helper\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eparu just makes it easy, no clone and run makepkg. You can do everything paru\ncan do using the built in pacman installer.\u003c/p\u003e\n\u003ch2 id=\"manual-install-from-the-aur\"\u003eManual Install from the Aur \u003ca href=\"#manual-install-from-the-aur\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need to manually instal pacman from the aur in order to get started.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S --needed base-devel\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://aur.archlinux.org/paru.git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e paru\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emakepkg -si\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"installing-packages-with-paru\"\u003eInstalling packages with paru \u003ca href=\"#installing-packages-with-paru\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce setup you are ready to install packages from the AUR just like the core repos.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e# you can update your system using paru\nparu -Syu\n\n# you can install packages from the AUR\nparu -S tailscale\nparu -S prismlauncher\n\n# even core repo packages can be installed\nparu -S docker\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"paru-in-docker\"\u003eParu in Docker \u003ca href=\"#paru-in-docker\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a snippet from my devtainer\n\u003ca href=\"https://github.com/WaylonWalker/devtainer/blob/main/Dockerfile\" 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\"\u003edockerfile\u003c/a\u003e.\nWhere I use paru to install packages from the AUR inside of a dockerfile.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFROM archlinux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRUN \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[multilib]\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; /etc/pacman.conf \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Include = /etc/pacman.d/mirrorlist\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; /etc/pacman.conf \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    pacman --noconfirm -Syyu \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    pacman --noconfirm -S base-devel git \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    groupadd --gid \u003cspan class=\"m\"\u003e1000\u003c/span\u003e devtainer \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    useradd --uid \u003cspan class=\"m\"\u003e1000\u003c/span\u003e --gid \u003cspan class=\"m\"\u003e1000\u003c/span\u003e -m -r -s /bin/bash devtainer \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    passwd -d devtainer \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;devtainer ALL=(ALL) ALL\u0026#39;\u003c/span\u003e \u0026gt; /etc/sudoers.d/devtainer \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    mkdir -p /home/devtainer/.gnupg \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;standard-resolver\u0026#39;\u003c/span\u003e \u0026gt; /home/devtainer/.gnupg/dirmngr.conf \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    chown -R devtainer:devtainer /home/devtainer \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    mkdir /build \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    chown -R devtainer:devtainer /build \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /build \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    sudo -u devtainer git clone --depth \u003cspan class=\"m\"\u003e1\u003c/span\u003e https://aur.archlinux.org/paru.git \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e paru \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    sudo -u devtainer makepkg --noconfirm -si \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    sed -i \u003cspan class=\"s1\"\u003e\u0026#39;s/#RemoveMake/RemoveMake/g\u0026#39;\u003c/span\u003e /etc/paru.conf \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    pacman -Qtdq \u003cspan class=\"p\"\u003e|\u003c/span\u003e xargs -r pacman --noconfirm -Rcns \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    rm -rf /home/devtainer/.cache \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    rm -rf /build\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUSER devtainer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRUN sudo -u devtainer paru --noconfirm --skipreview --useask -S \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    bat \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    cargo \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    direnv \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    dua-cli \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    dust \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    fd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"final-thoughts\"\u003eFinal Thoughts \u003ca href=\"#final-thoughts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere are other options out there, paru seemed to be the most supported at the\ntime I started using arch and there has been no other reason for me to change\nit. It’s treated me well for nearly a year now.\u003c/p\u003e\n",
      "content_text": "\nparu is an aur helper that allows you to use a package manager to install\npackages from the aur.\n\n## What's the Aur\n\nThe Aur is a set of community managed packages that can be installed on arch based distros.\n\n## Why a helper?\n\nparu just makes it easy, no clone and run makepkg. You can do everything paru\ncan do using the built in pacman installer.\n\n## Manual Install from the Aur\n\nYou will need to manually instal pacman from the aur in order to get started.\n\n```bash\nsudo pacman -S --needed base-devel\ngit clone https://aur.archlinux.org/paru.git\ncd paru\nmakepkg -si\n```\n\n## Installing packages with paru\n\nOnce setup you are ready to install packages from the AUR just like the core repos.\n\n```\n# you can update your system using paru\nparu -Syu\n\n# you can install packages from the AUR\nparu -S tailscale\nparu -S prismlauncher\n\n# even core repo packages can be installed\nparu -S docker\n```\n\n## Paru in Docker\n\nHere is a snippet from my devtainer\n[dockerfile](https://github.com/WaylonWalker/devtainer/blob/main/Dockerfile).\nWhere I use paru to install packages from the AUR inside of a dockerfile.\n\n```bash\nFROM archlinux\n\nRUN echo '[multilib]' \u003e\u003e /etc/pacman.conf \u0026\u0026 \\\n    echo 'Include = /etc/pacman.d/mirrorlist' \u003e\u003e /etc/pacman.conf \u0026\u0026 \\\n    pacman --noconfirm -Syyu \u0026\u0026 \\\n    pacman --noconfirm -S base-devel git \u0026\u0026 \\\n    groupadd --gid 1000 devtainer \u0026\u0026 \\\n    useradd --uid 1000 --gid 1000 -m -r -s /bin/bash devtainer \u0026\u0026 \\\n    passwd -d devtainer \u0026\u0026 \\\n    echo 'devtainer ALL=(ALL) ALL' \u003e /etc/sudoers.d/devtainer \u0026\u0026 \\\n    mkdir -p /home/devtainer/.gnupg \u0026\u0026 \\\n    echo 'standard-resolver' \u003e /home/devtainer/.gnupg/dirmngr.conf \u0026\u0026 \\\n    chown -R devtainer:devtainer /home/devtainer \u0026\u0026 \\\n    mkdir /build \u0026\u0026 \\\n    chown -R devtainer:devtainer /build \u0026\u0026 \\\n    cd /build \u0026\u0026 \\\n    sudo -u devtainer git clone --depth 1 https://aur.archlinux.org/paru.git \u0026\u0026 \\\n    cd paru \u0026\u0026 \\\n    sudo -u devtainer makepkg --noconfirm -si \u0026\u0026 \\\n    sed -i 's/#RemoveMake/RemoveMake/g' /etc/paru.conf \u0026\u0026 \\\n    pacman -Qtdq | xargs -r pacman --noconfirm -Rcns \u0026\u0026 \\\n    rm -rf /home/devtainer/.cache \u0026\u0026 \\\n    rm -rf /build\n\nUSER devtainer\nRUN sudo -u devtainer paru --noconfirm --skipreview --useask -S \\\n    bat \\\n    cargo \\\n    direnv \\\n    dua-cli \\\n    dust \\\n    fd\n\n```\n\n## Final Thoughts\n\nThere are other options out there, paru seemed to be the most supported at the\ntime I started using arch and there has been no other reason for me to change\nit. It's treated me well for nearly a year now.\n",
      "summary": "paru is an aur helper that allows you to use a package manager to install packages from the aur.",
      "date_published": "2023-05-27T20:22:42Z",
      "date_modified": "2023-05-27T20:22:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/m4xshen-hardtime-nvim/",
      "url": "https://go.waylonwalker.com/m4xshen-hardtime-nvim/",
      "title": "⭐ m4xshen hardtime.nvim",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/m4xshen/hardtime.nvim\" 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\"\u003ehardtime.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/m4xshen\" 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\"\u003em4xshen\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEstablish good command workflow and quit bad habit\u003c/p\u003e\n",
      "content_text": "\nThe work on [hardtime.nvim](https://github.com/m4xshen/hardtime.nvim) by [m4xshen](https://github.com/m4xshen).\n\nEstablish good command workflow and quit bad habit\n",
      "summary": "The work on hardtime.nvim by m4xshen.",
      "date_published": "2023-05-23T16:45:30Z",
      "date_modified": "2023-05-23T16:45:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-trogon/",
      "url": "https://go.waylonwalker.com/textualize-trogon/",
      "title": "⭐ Textualize trogon",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/Textualize/trogon\" 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\"\u003etrogon\u003c/a\u003e from \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEasily turn your Click CLI into a powerful terminal application\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [trogon](https://github.com/Textualize/trogon) from [Textualize](https://github.com/Textualize).\n\nEasily turn your Click CLI into a powerful terminal application\n",
      "summary": "I'm impressed by trogon from Textualize.",
      "date_published": "2023-05-21T18:55:35Z",
      "date_modified": "2023-05-21T18:55:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/acksld-swenv-nvim/",
      "url": "https://go.waylonwalker.com/acksld-swenv-nvim/",
      "title": "⭐ AckslD swenv.nvim",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/AckslD/swenv.nvim\" 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\"\u003eswenv.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/AckslD\" 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\"\u003eAckslD\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTiny plugin to quickly switch python virtual environments from within neovim without restarting.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [swenv.nvim](https://github.com/AckslD/swenv.nvim) from [AckslD](https://github.com/AckslD).\n\nTiny plugin to quickly switch python virtual environments from within neovim without restarting.\n",
      "summary": "I'm impressed by swenv.nvim from AckslD.",
      "date_published": "2023-05-15T15:45:30Z",
      "date_modified": "2023-05-15T15:45:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mtshiba-pylyzer/",
      "url": "https://go.waylonwalker.com/mtshiba-pylyzer/",
      "title": "⭐ mtshiba pylyzer",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/mtshiba/pylyzer\" 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\"\u003epylyzer\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/mtshiba\" 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\"\u003emtshiba\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA fast, feature-rich static code analyzer \u0026amp; language server for Python\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [pylyzer](https://github.com/mtshiba/pylyzer), an amazing project by [mtshiba](https://github.com/mtshiba). It's worth exploring!\n\nA fast, feature-rich static code analyzer \u0026 language server for Python\n",
      "summary": "I'm really excited about pylyzer, an amazing project by mtshiba. It's worth exploring!",
      "date_published": "2023-05-10T15:33:40Z",
      "date_modified": "2023-05-10T15:33:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sinaptik-ai-pandas-ai/",
      "url": "https://go.waylonwalker.com/sinaptik-ai-pandas-ai/",
      "title": "⭐ sinaptik-ai pandas-ai",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/sinaptik-ai/pandas-ai\" 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\"\u003epandas-ai\u003c/a\u003e from \u003ca href=\"https://github.com/sinaptik-ai\" 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\"\u003esinaptik-ai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pandas-ai](https://github.com/sinaptik-ai/pandas-ai) from [sinaptik-ai](https://github.com/sinaptik-ai).\n\nChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.\n",
      "summary": "I'm impressed by pandas-ai from sinaptik-ai.",
      "date_published": "2023-05-01T11:27:47Z",
      "date_modified": "2023-05-01T11:27:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-frogmouth/",
      "url": "https://go.waylonwalker.com/textualize-frogmouth/",
      "title": "⭐ Textualize frogmouth",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Textualize/frogmouth\" 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\"\u003efrogmouth\u003c/a\u003e, created by \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Markdown browser for your terminal\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [frogmouth](https://github.com/Textualize/frogmouth), created by [Textualize](https://github.com/Textualize).\n\nA Markdown browser for your terminal\n",
      "summary": "If you're into interesting projects, don't miss out on frogmouth, created by Textualize.",
      "date_published": "2023-04-30T14:13:07Z",
      "date_modified": "2023-04-30T14:13:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dfee-forge/",
      "url": "https://go.waylonwalker.com/dfee-forge/",
      "title": "⭐ dfee forge",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/dfee/forge\" 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\"\u003eforge\u003c/a\u003e by \u003ca href=\"https://github.com/dfee\" 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\"\u003edfee\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eforge (python signatures) for fun and profit\u003c/p\u003e\n",
      "content_text": "\nCheck out [forge](https://github.com/dfee/forge) by [dfee](https://github.com/dfee). It's a well-crafted project with great potential.\n\nforge (python signatures) for fun and profit\n",
      "summary": "Check out forge by dfee. It's a well-crafted project with great potential.",
      "date_published": "2023-04-27T17:43:29Z",
      "date_modified": "2023-04-27T17:43:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/slackadays-clipboard/",
      "url": "https://go.waylonwalker.com/slackadays-clipboard/",
      "title": "⭐ Slackadays Clipboard",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/Slackadays\" 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\"\u003eSlackadays’s\u003c/a\u003e project \u003ca href=\"https://github.com/Slackadays/Clipboard\" 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\"\u003eClipboard\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e😎🏖️🐬 Your new, 𝙧𝙞𝙙𝙤𝙣𝙠𝙪𝙡𝙞𝙘𝙞𝙤𝙪𝙨𝙡𝙮 smart clipboard manager\u003c/p\u003e\n",
      "content_text": "\nI like [Slackadays's](https://github.com/Slackadays) project [Clipboard](https://github.com/Slackadays/Clipboard).\n\n😎🏖️🐬 Your new, 𝙧𝙞𝙙𝙤𝙣𝙠𝙪𝙡𝙞𝙘𝙞𝙤𝙪𝙨𝙡𝙮 smart clipboard manager\n",
      "summary": "I like Slackadays's project Clipboard.",
      "date_published": "2023-04-18T11:22:08Z",
      "date_modified": "2023-04-18T11:22:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/madox2-vim-ai/",
      "url": "https://go.waylonwalker.com/madox2-vim-ai/",
      "title": "⭐ madox2 vim-ai",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/madox2\" 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\"\u003emadox2’s\u003c/a\u003e project \u003ca href=\"https://github.com/madox2/vim-ai\" 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\"\u003evim-ai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAI-powered code assistant for Vim. OpenAI and ChatGPT plugin for Vim and Neovim.\u003c/p\u003e\n",
      "content_text": "\nI like [madox2's](https://github.com/madox2) project [vim-ai](https://github.com/madox2/vim-ai).\n\nAI-powered code assistant for Vim. OpenAI and ChatGPT plugin for Vim and Neovim.\n",
      "summary": "I like madox2's project vim-ai.",
      "date_published": "2023-04-12T03:05:22Z",
      "date_modified": "2023-04-12T03:05:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tabbyml-tabby/",
      "url": "https://go.waylonwalker.com/tabbyml-tabby/",
      "title": "⭐ TabbyML tabby",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/TabbyML/tabby\" 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\"\u003etabby\u003c/a\u003e by \u003ca href=\"https://github.com/TabbyML\" 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\"\u003eTabbyML\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003e\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 AI coding assistant\u003c/p\u003e\n",
      "content_text": "\n[tabby](https://github.com/TabbyML/tabby) by [TabbyML](https://github.com/TabbyML) is a game-changer in its space. Excited to see how it evolves.\n\nSelf-hosted AI coding assistant\n",
      "summary": "tabby by TabbyML is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2023-04-11T12:32:30Z",
      "date_modified": "2023-04-11T12:32:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/biobootloader-wolverine/",
      "url": "https://go.waylonwalker.com/biobootloader-wolverine/",
      "title": "⭐ biobootloader wolverine",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/biobootloader/wolverine\" 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\"\u003ewolverine\u003c/a\u003e, created by \u003ca href=\"https://github.com/biobootloader\" 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\"\u003ebiobootloader\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [wolverine](https://github.com/biobootloader/wolverine), created by [biobootloader](https://github.com/biobootloader).\n\nNo description available.\n",
      "summary": "If you're into interesting projects, don't miss out on wolverine, created by biobootloader.",
      "date_published": "2023-04-10T21:05:08Z",
      "date_modified": "2023-04-10T21:05:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/chroma-core-chroma/",
      "url": "https://go.waylonwalker.com/chroma-core-chroma/",
      "title": "⭐ chroma-core chroma",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/chroma-core/chroma\" 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\"\u003echroma\u003c/a\u003e from \u003ca href=\"https://github.com/chroma-core\" 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\"\u003echroma-core\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ethe AI-native open-source embedding database\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [chroma](https://github.com/chroma-core/chroma) from [chroma-core](https://github.com/chroma-core).\n\nthe AI-native open-source embedding database\n",
      "summary": "I'm impressed by chroma from chroma-core.",
      "date_published": "2023-04-09T19:13:09Z",
      "date_modified": "2023-04-09T19:13:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/langchain-ai-langchain/",
      "url": "https://go.waylonwalker.com/langchain-ai-langchain/",
      "title": "⭐ langchain-ai langchain",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/langchain-ai/langchain\" 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\"\u003elangchain\u003c/a\u003e by \u003ca href=\"https://github.com/langchain-ai\" 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\"\u003elangchain-ai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🦜🔗 Build context-aware reasoning applications\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [langchain](https://github.com/langchain-ai/langchain) by [langchain-ai](https://github.com/langchain-ai).\n\n🦜🔗 Build context-aware reasoning applications\n",
      "summary": "Looking for inspiration? langchain by langchain-ai.",
      "date_published": "2023-04-09T19:12:59Z",
      "date_modified": "2023-04-09T19:12:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lm-sys-fastchat/",
      "url": "https://go.waylonwalker.com/lm-sys-fastchat/",
      "title": "⭐ lm-sys FastChat",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/lm-sys\" 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\"\u003elm-sys\u003c/a\u003e and their project \u003ca href=\"https://github.com/lm-sys/FastChat\" 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\"\u003eFastChat\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.\u003c/p\u003e\n",
      "content_text": "\nCheck out [lm-sys](https://github.com/lm-sys) and their project [FastChat](https://github.com/lm-sys/FastChat).\n\nAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.\n",
      "summary": "Check out lm-sys and their project FastChat.",
      "date_published": "2023-04-04T12:31:56Z",
      "date_modified": "2023-04-04T12:31:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/trash-panda-v91-beta-hatch-aws/",
      "url": "https://go.waylonwalker.com/trash-panda-v91-beta-hatch-aws/",
      "title": "⭐ trash-panda-v91-beta hatch-aws",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/trash-panda-v91-beta/hatch-aws\" 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\"\u003ehatch-aws\u003c/a\u003e from \u003ca href=\"https://github.com/trash-panda-v91-beta\" 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\"\u003etrash-panda-v91-beta\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eHatch plugin for building AWS Lambda functions with SAM\u003c/p\u003e\n",
      "content_text": "\nI came across [hatch-aws](https://github.com/trash-panda-v91-beta/hatch-aws) from [trash-panda-v91-beta](https://github.com/trash-panda-v91-beta), and it's packed with great features and ideas.\n\nHatch plugin for building AWS Lambda functions with SAM\n",
      "summary": "I came across hatch-aws from trash-panda-v91-beta, and it's packed with great features and ideas.",
      "date_published": "2023-03-21T01:33:44Z",
      "date_modified": "2023-03-21T01:33:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/aka-raccoon-hatch-aws/",
      "url": "https://go.waylonwalker.com/aka-raccoon-hatch-aws/",
      "title": "⭐ aka-raccoon hatch-aws",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/aka-raccoon/hatch-aws\" 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\"\u003ehatch-aws\u003c/a\u003e from \u003ca href=\"https://github.com/aka-raccoon\" 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\"\u003eaka-raccoon\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eHatch plugin for building AWS Lambda functions with SAM\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [hatch-aws](https://github.com/aka-raccoon/hatch-aws) from [aka-raccoon](https://github.com/aka-raccoon).\n\nHatch plugin for building AWS Lambda functions with SAM\n",
      "summary": "I'm impressed by hatch-aws from aka-raccoon.",
      "date_published": "2023-03-21T01:33:44Z",
      "date_modified": "2023-03-21T01:33:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jupyterlab-hatch-jupyter-builder/",
      "url": "https://go.waylonwalker.com/jupyterlab-hatch-jupyter-builder/",
      "title": "⭐ jupyterlab hatch-jupyter-builder",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/jupyterlab/hatch-jupyter-builder\" 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\"\u003ehatch-jupyter-builder\u003c/a\u003e by \u003ca href=\"https://github.com/jupyterlab\" 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\"\u003ejupyterlab\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA hatch plugin to help build Jupyter packages\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [hatch-jupyter-builder](https://github.com/jupyterlab/hatch-jupyter-builder) by [jupyterlab](https://github.com/jupyterlab).\n\nA hatch plugin to help build Jupyter packages\n",
      "summary": "Looking for inspiration? hatch-jupyter-builder by jupyterlab.",
      "date_published": "2023-03-21T01:33:41Z",
      "date_modified": "2023-03-21T01:33:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tweag-topiary/",
      "url": "https://go.waylonwalker.com/tweag-topiary/",
      "title": "⭐ tweag topiary",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/tweag/topiary\" 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\"\u003etopiary\u003c/a\u003e by \u003ca href=\"https://github.com/tweag\" 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\"\u003etweag\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [topiary](https://github.com/tweag/topiary) by [tweag](https://github.com/tweag). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out topiary by tweag. It's a well-crafted project with great potential.",
      "date_published": "2023-03-13T13:20:36Z",
      "date_modified": "2023-03-13T13:20:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/topiary-topiary/",
      "url": "https://go.waylonwalker.com/topiary-topiary/",
      "title": "⭐ topiary topiary",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/topiary/topiary\" 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\"\u003etopiary\u003c/a\u003e by \u003ca href=\"https://github.com/topiary\" 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\"\u003etopiary\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [topiary](https://github.com/topiary/topiary) by [topiary](https://github.com/topiary). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out topiary by topiary. It's a well-crafted project with great potential.",
      "date_published": "2023-03-13T13:20:36Z",
      "date_modified": "2023-03-13T13:20:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/acksld-nvim-femaco-lua/",
      "url": "https://go.waylonwalker.com/acksld-nvim-femaco-lua/",
      "title": "⭐ AckslD nvim-FeMaco.lua",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/AckslD/nvim-FeMaco.lua\" 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\"\u003envim-FeMaco.lua\u003c/a\u003e by \u003ca href=\"https://github.com/AckslD\" 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\"\u003eAckslD\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eCatalyze your Fenced Markdown Code-block editing!\u003c/p\u003e\n",
      "content_text": "\n[nvim-FeMaco.lua](https://github.com/AckslD/nvim-FeMaco.lua) by [AckslD](https://github.com/AckslD) is a game-changer in its space. Excited to see how it evolves.\n\nCatalyze your Fenced Markdown Code-block editing!\n",
      "summary": "nvim-FeMaco.lua by AckslD is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2023-03-08T17:00:11Z",
      "date_modified": "2023-03-08T17:00:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ggml-org-whisper-cpp/",
      "url": "https://go.waylonwalker.com/ggml-org-whisper-cpp/",
      "title": "⭐ ggml-org whisper.cpp",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ggml-org/whisper.cpp\" 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\"\u003ewhisper.cpp\u003c/a\u003e by \u003ca href=\"https://github.com/ggml-org\" 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\"\u003eggml-org\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003ePort of OpenAI’s Whisper model in C/C++\u003c/p\u003e\n",
      "content_text": "\nCheck out [whisper.cpp](https://github.com/ggml-org/whisper.cpp) by [ggml-org](https://github.com/ggml-org). It's a well-crafted project with great potential.\n\nPort of OpenAI's Whisper model in C/C++\n",
      "summary": "Check out whisper.cpp by ggml-org. It's a well-crafted project with great potential.",
      "date_published": "2023-03-07T21:38:57Z",
      "date_modified": "2023-03-07T21:38:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ggerganov-whisper-cpp/",
      "url": "https://go.waylonwalker.com/ggerganov-whisper-cpp/",
      "title": "⭐ ggerganov whisper.cpp",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/ggerganov/whisper.cpp\" 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\"\u003ewhisper.cpp\u003c/a\u003e from \u003ca href=\"https://github.com/ggerganov\" 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\"\u003eggerganov\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePort of OpenAI’s Whisper model in C/C++\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [whisper.cpp](https://github.com/ggerganov/whisper.cpp) from [ggerganov](https://github.com/ggerganov).\n\nPort of OpenAI's Whisper model in C/C++\n",
      "summary": "I'm impressed by whisper.cpp from ggerganov.",
      "date_published": "2023-03-07T21:38:57Z",
      "date_modified": "2023-03-07T21:38:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fabulously-optimized-fabulously-optimized/",
      "url": "https://go.waylonwalker.com/fabulously-optimized-fabulously-optimized/",
      "title": "⭐ Fabulously-Optimized fabulously-optimized",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Fabulously-Optimized/fabulously-optimized\" 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\"\u003efabulously-optimized\u003c/a\u003e by \u003ca href=\"https://github.com/Fabulously-Optimized\" 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\"\u003eFabulously-Optimized\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA simple Minecraft modpack focusing on performance and graphics enhancements.\u003c/p\u003e\n",
      "content_text": "\nCheck out [fabulously-optimized](https://github.com/Fabulously-Optimized/fabulously-optimized) by [Fabulously-Optimized](https://github.com/Fabulously-Optimized). It's a well-crafted project with great potential.\n\nA simple Minecraft modpack focusing on performance and graphics enhancements.\n",
      "summary": "Check out fabulously-optimized by Fabulously-Optimized. It's a well-crafted project with great potential.",
      "date_published": "2023-03-07T14:27:13Z",
      "date_modified": "2023-03-07T14:27:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/flashyreese-reeses-sodium-options/",
      "url": "https://go.waylonwalker.com/flashyreese-reeses-sodium-options/",
      "title": "⭐ FlashyReese reeses-sodium-options",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/FlashyReese/reeses-sodium-options\" 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\"\u003ereeses-sodium-options\u003c/a\u003e by \u003ca href=\"https://github.com/FlashyReese\" 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\"\u003eFlashyReese\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eReplaces Sodium’s Options Screen\u003c/p\u003e\n",
      "content_text": "\n[reeses-sodium-options](https://github.com/FlashyReese/reeses-sodium-options) by [FlashyReese](https://github.com/FlashyReese) is a game-changer in its space. Excited to see how it evolves.\n\nReplaces Sodium's Options Screen\n",
      "summary": "reeses-sodium-options by FlashyReese is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2023-03-07T02:46:47Z",
      "date_modified": "2023-03-07T02:46:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tom-doerr-chatgpt_commit_message_hook/",
      "url": "https://go.waylonwalker.com/tom-doerr-chatgpt_commit_message_hook/",
      "title": "⭐ tom-doerr chatgpt_commit_message_hook",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/tom-doerr/chatgpt_commit_message_hook\" 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\"\u003echatgpt_commit_message_hook\u003c/a\u003e by \u003ca href=\"https://github.com/tom-doerr\" 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\"\u003etom-doerr\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEnhance your \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e workflow using AI-generated commit messages from ChatGPT. Seamless integration for a well-documented commit log.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [chatgpt_commit_message_hook](https://github.com/tom-doerr/chatgpt_commit_message_hook) by [tom-doerr](https://github.com/tom-doerr).\n\nEnhance your git workflow using AI-generated commit messages from ChatGPT. Seamless integration for a well-documented commit log.\n",
      "summary": "Looking for inspiration? chatgpt_message_hook by tom-doerr.",
      "date_published": "2023-03-03T23:13:48Z",
      "date_modified": "2023-03-03T23:13:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lazyvim-lazyvim/",
      "url": "https://go.waylonwalker.com/lazyvim-lazyvim/",
      "title": "⭐ LazyVim LazyVim",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/LazyVim/LazyVim\" 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\"\u003eLazyVim\u003c/a\u003e by \u003ca href=\"https://github.com/LazyVim\" 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\"\u003eLazyVim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNeovim config for the lazy\u003c/p\u003e\n",
      "content_text": "\nThe work on [LazyVim](https://github.com/LazyVim/LazyVim) by [LazyVim](https://github.com/LazyVim).\n\nNeovim config for the lazy\n",
      "summary": "The work on LazyVim by LazyVim.",
      "date_published": "2023-02-28T14:50:24Z",
      "date_modified": "2023-02-28T14:50:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/oxen-ai-oxen-release/",
      "url": "https://go.waylonwalker.com/oxen-ai-oxen-release/",
      "title": "⭐ Oxen-AI oxen-release",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Oxen-AI/oxen-release\" 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\"\u003eoxen-release\u003c/a\u003e, created by \u003ca href=\"https://github.com/Oxen-AI\" 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\"\u003eOxen-AI\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eLightning fast data version control system for structured and unstructured machine learning datasets. We aim to make versioning datasets as easy as versioning code.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [oxen-release](https://github.com/Oxen-AI/oxen-release), created by [Oxen-AI](https://github.com/Oxen-AI).\n\nLightning fast data version control system for structured and unstructured machine learning datasets. We aim to make versioning datasets as easy as versioning code.\n",
      "summary": "If you're into interesting projects, don't miss out on oxen-release, created by Oxen-AI.",
      "date_published": "2023-02-21T15:04:54Z",
      "date_modified": "2023-02-21T15:04:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/oxen-ai-oxen/",
      "url": "https://go.waylonwalker.com/oxen-ai-oxen/",
      "title": "⭐ Oxen-AI Oxen",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Oxen-AI/Oxen\" 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\"\u003eOxen\u003c/a\u003e by \u003ca href=\"https://github.com/Oxen-AI\" 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\"\u003eOxen-AI\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eLightning fast data version control system for structured and unstructured machine learning datasets. We aim to make versioning datasets as easy as versioning code.\u003c/p\u003e\n",
      "content_text": "\n[Oxen](https://github.com/Oxen-AI/Oxen) by [Oxen-AI](https://github.com/Oxen-AI) is a game-changer in its space. Excited to see how it evolves.\n\nLightning fast data version control system for structured and unstructured machine learning datasets. We aim to make versioning datasets as easy as versioning code.\n",
      "summary": "Oxen by Oxen-AI is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2023-02-21T15:04:54Z",
      "date_modified": "2023-02-21T15:04:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kanaries-pygwalker/",
      "url": "https://go.waylonwalker.com/kanaries-pygwalker/",
      "title": "⭐ Kanaries pygwalker",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Kanaries\" 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\"\u003eKanaries\u003c/a\u003e and their project \u003ca href=\"https://github.com/Kanaries/pygwalker\" 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\"\u003epygwalker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePyGWalker: Turn your pandas dataframe into an interactive UI for visual analysis\u003c/p\u003e\n",
      "content_text": "\nCheck out [Kanaries](https://github.com/Kanaries) and their project [pygwalker](https://github.com/Kanaries/pygwalker).\n\nPyGWalker: Turn your pandas dataframe into an interactive UI for visual analysis\n",
      "summary": "Check out Kanaries and their project pygwalker.",
      "date_published": "2023-02-21T15:03:05Z",
      "date_modified": "2023-02-21T15:03:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kanaries-graphic-walker/",
      "url": "https://go.waylonwalker.com/kanaries-graphic-walker/",
      "title": "⭐ Kanaries graphic-walker",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Kanaries\" 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\"\u003eKanaries\u003c/a\u003e and their project \u003ca href=\"https://github.com/Kanaries/graphic-walker\" 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\"\u003egraphic-walker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn open source alternative to Tableau. Embeddable visual analytic\u003c/p\u003e\n",
      "content_text": "\nCheck out [Kanaries](https://github.com/Kanaries) and their project [graphic-walker](https://github.com/Kanaries/graphic-walker).\n\nAn open source alternative to Tableau. Embeddable visual analytic\n",
      "summary": "Check out Kanaries and their project graphic-walker.",
      "date_published": "2023-02-21T15:03:03Z",
      "date_modified": "2023-02-21T15:03:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ellwise-kedro-light/",
      "url": "https://go.waylonwalker.com/ellwise-kedro-light/",
      "title": "⭐ ellwise kedro-light",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ellwise/kedro-light\" 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\"\u003ekedro-light\u003c/a\u003e by \u003ca href=\"https://github.com/ellwise\" 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\"\u003eellwise\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nThe work on [kedro-light](https://github.com/ellwise/kedro-light) by [ellwise](https://github.com/ellwise).\n\nNo description available.\n",
      "summary": "The work on kedro-light by ellwise.",
      "date_published": "2023-02-20T16:10:09Z",
      "date_modified": "2023-02-20T16:10:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wemake-services-flake8-eradicate/",
      "url": "https://go.waylonwalker.com/wemake-services-flake8-eradicate/",
      "title": "⭐ wemake-services flake8-eradicate",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/wemake-services/flake8-eradicate\" 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\"\u003eflake8-eradicate\u003c/a\u003e by \u003ca href=\"https://github.com/wemake-services\" 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\"\u003ewemake-services\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eFlake8 plugin to find commented out or dead code\u003c/p\u003e\n",
      "content_text": "\n[flake8-eradicate](https://github.com/wemake-services/flake8-eradicate) by [wemake-services](https://github.com/wemake-services) is a game-changer in its space. Excited to see how it evolves.\n\nFlake8 plugin to find commented out or dead code\n",
      "summary": "flake8-eradicate by wemake-services is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2023-02-15T20:02:53Z",
      "date_modified": "2023-02-15T20:02:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tamton-aquib-flirt-nvim/",
      "url": "https://go.waylonwalker.com/tamton-aquib-flirt-nvim/",
      "title": "⭐ tamton-aquib flirt.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tamton-aquib\" 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\"\u003etamton-aquib\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/tamton-aquib/flirt.nvim\" 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\"\u003eflirt.nvim\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA neovim plugin to work with floating windows.\u003c/p\u003e\n",
      "content_text": "\n[tamton-aquib](https://github.com/tamton-aquib) has done a fantastic job with [flirt.nvim](https://github.com/tamton-aquib/flirt.nvim). Highly recommend taking a look.\n\nA neovim plugin to work with floating windows.\n",
      "summary": "tamton-aquib has done a fantastic job with flirt.nvim. Highly recommend taking a look.",
      "date_published": "2023-02-13T17:33:07Z",
      "date_modified": "2023-02-13T17:33:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mrparoxysms-my-blog/",
      "url": "https://go.waylonwalker.com/mrparoxysms-my-blog/",
      "title": "⭐ mrparoxysms my-blog",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/mrparoxysms\" 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\"\u003emrparoxysms’s\u003c/a\u003e project \u003ca href=\"https://github.com/mrparoxysms/my-blog\" 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\"\u003emy-blog\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI like [mrparoxysms's](https://github.com/mrparoxysms) project [my-blog](https://github.com/mrparoxysms/my-blog).\n\nNo description available.\n",
      "summary": "I like mrparoxysms's project my-blog.",
      "date_published": "2023-02-12T22:26:06Z",
      "date_modified": "2023-02-12T22:26:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/uutils-coreutils/",
      "url": "https://go.waylonwalker.com/uutils-coreutils/",
      "title": "⭐ uutils coreutils",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/uutils/coreutils\" 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\"\u003ecoreutils\u003c/a\u003e by \u003ca href=\"https://github.com/uutils\" 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\"\u003euutils\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eCross-platform Rust rewrite of the GNU coreutils\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [coreutils](https://github.com/uutils/coreutils) by [uutils](https://github.com/uutils), and it's truly impressive.\n\nCross-platform Rust rewrite of the GNU coreutils\n",
      "summary": "I recently discovered coreutils by uutils, and it's truly impressive.",
      "date_published": "2023-02-12T16:37:12Z",
      "date_modified": "2023-02-12T16:37:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pytest-dev-pytest/",
      "url": "https://go.waylonwalker.com/pytest-dev-pytest/",
      "title": "⭐ pytest-dev pytest",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/pytest-dev/pytest\" 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\"\u003epytest\u003c/a\u003e by \u003ca href=\"https://github.com/pytest-dev\" 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\"\u003epytest-dev\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe pytest framework makes it easy to write small tests, yet scales to support complex functional testing\u003c/p\u003e\n",
      "content_text": "\nThe work on [pytest](https://github.com/pytest-dev/pytest) by [pytest-dev](https://github.com/pytest-dev).\n\nThe pytest framework makes it easy to write small tests, yet scales to support complex functional testing\n",
      "summary": "The work on pytest by pytest-dev.",
      "date_published": "2023-02-11T15:02:48Z",
      "date_modified": "2023-02-11T15:02:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gnikdroy-projections-nvim/",
      "url": "https://go.waylonwalker.com/gnikdroy-projections-nvim/",
      "title": "⭐ GnikDroy projections.nvim",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/GnikDroy/projections.nvim\" 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\"\u003eprojections.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/GnikDroy\" 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\"\u003eGnikDroy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA map to your filesystem\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [projections.nvim](https://github.com/GnikDroy/projections.nvim) by [GnikDroy](https://github.com/GnikDroy).\n\nA map to your filesystem\n",
      "summary": "Looking for inspiration? projections.nvim by GnikDroy.",
      "date_published": "2023-02-11T03:21:15Z",
      "date_modified": "2023-02-11T03:21:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/reflex-dev-reflex/",
      "url": "https://go.waylonwalker.com/reflex-dev-reflex/",
      "title": "⭐ reflex-dev reflex",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/reflex-dev/reflex\" 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\"\u003ereflex\u003c/a\u003e from \u003ca href=\"https://github.com/reflex-dev\" 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\"\u003ereflex-dev\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003e🕸️ Web apps in pure Python 🐍\u003c/p\u003e\n",
      "content_text": "\nI came across [reflex](https://github.com/reflex-dev/reflex) from [reflex-dev](https://github.com/reflex-dev), and it's packed with great features and ideas.\n\n🕸️ Web apps in pure Python 🐍\n",
      "summary": "I came across reflex from reflex-dev, and it's packed with great features and ideas.",
      "date_published": "2023-02-09T14:07:47Z",
      "date_modified": "2023-02-09T14:07:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypa-bandersnatch/",
      "url": "https://go.waylonwalker.com/pypa-bandersnatch/",
      "title": "⭐ pypa bandersnatch",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pypa\" 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\"\u003epypa\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pypa/bandersnatch\" 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\"\u003ebandersnatch\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA PyPI mirror client according to PEP 381 \u003ca href=\"http://www.python.org/dev/peps/pep-0381/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.python.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.python.org.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttp://www.python.org/dev/peps/pep-0381/\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\n[pypa](https://github.com/pypa) has done a fantastic job with [bandersnatch](https://github.com/pypa/bandersnatch). Highly recommend taking a look.\n\nA PyPI mirror client according to PEP 381 http://www.python.org/dev/peps/pep-0381/\n",
      "summary": "pypa has done a fantastic job with bandersnatch. Highly recommend taking a look.",
      "date_published": "2023-02-07T14:49:46Z",
      "date_modified": "2023-02-07T14:49:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypa-hatch/",
      "url": "https://go.waylonwalker.com/pypa-hatch/",
      "title": "⭐ pypa hatch",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/pypa/hatch\" 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\"\u003ehatch\u003c/a\u003e, created by \u003ca href=\"https://github.com/pypa\" 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\"\u003epypa\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eModern, extensible Python project management\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [hatch](https://github.com/pypa/hatch), created by [pypa](https://github.com/pypa).\n\nModern, extensible Python project management\n",
      "summary": "If you're into interesting projects, don't miss out on hatch, created by pypa.",
      "date_published": "2023-02-07T14:47:39Z",
      "date_modified": "2023-02-07T14:47:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/facebookincubator-bowler/",
      "url": "https://go.waylonwalker.com/facebookincubator-bowler/",
      "title": "⭐ facebookincubator Bowler",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/facebookincubator/Bowler\" 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\"\u003eBowler\u003c/a\u003e by \u003ca href=\"https://github.com/facebookincubator\" 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\"\u003efacebookincubator\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eSafe code refactoring for modern Python.\u003c/p\u003e\n",
      "content_text": "\nCheck out [Bowler](https://github.com/facebookincubator/Bowler) by [facebookincubator](https://github.com/facebookincubator). It's a well-crafted project with great potential.\n\nSafe code refactoring for modern Python.\n",
      "summary": "Check out Bowler by facebookincubator. It's a well-crafted project with great potential.",
      "date_published": "2023-02-06T15:57:12Z",
      "date_modified": "2023-02-06T15:57:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-lockhart/",
      "url": "https://go.waylonwalker.com/waylonwalker-lockhart/",
      "title": "⭐ WaylonWalker lockhart",
      "content_html": "\u003cp\u003eCheck out \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 and their project \u003ca href=\"https://github.com/WaylonWalker/lockhart\" 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\"\u003elockhart\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eLockhart is an AI-powered Python library that generates elegant and efficient code, much like the charming and deceiving wizard Gilderoy Lockhart. It allows developers to effortlessly create impressive code and deceive others with their skills, just as Gilderoy Lockhart deceives others with his charm and wizardry.\u003c/p\u003e\n",
      "content_text": "\nCheck out [WaylonWalker](https://github.com/WaylonWalker) and their project [lockhart](https://github.com/WaylonWalker/lockhart).\n\nLockhart is an AI-powered Python library that generates elegant and efficient code, much like the charming and deceiving wizard Gilderoy Lockhart. It allows developers to effortlessly create impressive code and deceive others with their skills, just as Gilderoy Lockhart deceives others with his charm and wizardry.\n",
      "summary": "Check out WaylonWalker and their project lockhart.",
      "date_published": "2023-02-05T18:38:31Z",
      "date_modified": "2023-02-05T18:38:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gmpetrov-openai-chatgpt/",
      "url": "https://go.waylonwalker.com/gmpetrov-openai-chatgpt/",
      "title": "⭐ gmpetrov openai-chatgpt",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/gmpetrov/openai-chatgpt\" 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\"\u003eopenai-chatgpt\u003c/a\u003e by \u003ca href=\"https://github.com/gmpetrov\" 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\"\u003egmpetrov\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003e🤖 Use ChatGPT from the terminal\u003c/p\u003e\n",
      "content_text": "\nCheck out [openai-chatgpt](https://github.com/gmpetrov/openai-chatgpt) by [gmpetrov](https://github.com/gmpetrov). It's a well-crafted project with great potential.\n\n🤖 Use ChatGPT from the terminal\n",
      "summary": "Check out openai-chatgpt by gmpetrov. It's a well-crafted project with great potential.",
      "date_published": "2023-02-05T01:30:57Z",
      "date_modified": "2023-02-05T01:30:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/astral-sh-ruff/",
      "url": "https://go.waylonwalker.com/astral-sh-ruff/",
      "title": "⭐ astral-sh ruff",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/astral-sh/ruff\" 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\"\u003eruff\u003c/a\u003e by \u003ca href=\"https://github.com/astral-sh\" 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\"\u003eastral-sh\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn extremely fast Python linter and code formatter, written in Rust.\u003c/p\u003e\n",
      "content_text": "\nThe work on [ruff](https://github.com/astral-sh/ruff) by [astral-sh](https://github.com/astral-sh).\n\nAn extremely fast Python linter and code formatter, written in Rust.\n",
      "summary": "The work on ruff by astral-sh.",
      "date_published": "2023-02-02T17:09:18Z",
      "date_modified": "2023-02-02T17:09:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/karpathy-nanogpt/",
      "url": "https://go.waylonwalker.com/karpathy-nanogpt/",
      "title": "⭐ karpathy nanoGPT",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/karpathy/nanoGPT\" 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\"\u003enanoGPT\u003c/a\u003e from \u003ca href=\"https://github.com/karpathy\" 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\"\u003ekarpathy\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eThe simplest, fastest repository for training/finetuning medium-sized GPTs.\u003c/p\u003e\n",
      "content_text": "\nI came across [nanoGPT](https://github.com/karpathy/nanoGPT) from [karpathy](https://github.com/karpathy), and it's packed with great features and ideas.\n\nThe simplest, fastest repository for training/finetuning medium-sized GPTs.\n",
      "summary": "I came across nanoGPT from karpathy, and it's packed with great features and ideas.",
      "date_published": "2023-02-01T03:50:43Z",
      "date_modified": "2023-02-01T03:50:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fathyb-carbonyl/",
      "url": "https://go.waylonwalker.com/fathyb-carbonyl/",
      "title": "⭐ fathyb carbonyl",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/fathyb/carbonyl\" 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\"\u003ecarbonyl\u003c/a\u003e by \u003ca href=\"https://github.com/fathyb\" 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\"\u003efathyb\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eChromium running inside your terminal\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [carbonyl](https://github.com/fathyb/carbonyl) by [fathyb](https://github.com/fathyb).\n\nChromium running inside your terminal\n",
      "summary": "Looking for inspiration? carbonyl by fathyb.",
      "date_published": "2023-01-30T16:05:05Z",
      "date_modified": "2023-01-30T16:05:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pablolec-recoverpy/",
      "url": "https://go.waylonwalker.com/pablolec-recoverpy/",
      "title": "⭐ PabloLec RecoverPy",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/PabloLec/RecoverPy\" 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\"\u003eRecoverPy\u003c/a\u003e, created by \u003ca href=\"https://github.com/PabloLec\" 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\"\u003ePabloLec\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eInteractively find and recover deleted or 👉 overwritten 👈 files from your terminal\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [RecoverPy](https://github.com/PabloLec/RecoverPy), created by [PabloLec](https://github.com/PabloLec).\n\nInteractively find and recover deleted or :point_right: overwritten :point_left: files from your terminal\n",
      "summary": "If you're into interesting projects, don't miss out on RecoverPy, created by PabloLec.",
      "date_published": "2023-01-28T01:51:32Z",
      "date_modified": "2023-01-28T01:51:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/selectel-pyte/",
      "url": "https://go.waylonwalker.com/selectel-pyte/",
      "title": "⭐ selectel pyte",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/selectel/pyte\" 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\"\u003epyte\u003c/a\u003e from \u003ca href=\"https://github.com/selectel\" 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\"\u003eselectel\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSimple VTXXX-compatible linux terminal emulator\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pyte](https://github.com/selectel/pyte) from [selectel](https://github.com/selectel).\n\nSimple VTXXX-compatible linux terminal emulator\n",
      "summary": "I'm impressed by pyte from selectel.",
      "date_published": "2023-01-28T01:46:41Z",
      "date_modified": "2023-01-28T01:46:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mitosch-textual-terminal/",
      "url": "https://go.waylonwalker.com/mitosch-textual-terminal/",
      "title": "⭐ mitosch textual-terminal",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/mitosch\" 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\"\u003emitosch\u003c/a\u003e and their project \u003ca href=\"https://github.com/mitosch/textual-terminal\" 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\"\u003etextual-terminal\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA terminal emulator widget for Textual.\u003c/p\u003e\n",
      "content_text": "\nCheck out [mitosch](https://github.com/mitosch) and their project [textual-terminal](https://github.com/mitosch/textual-terminal).\n\nA terminal emulator widget for Textual.\n",
      "summary": "Check out mitosch and their project textual-terminal.",
      "date_published": "2023-01-28T01:45:45Z",
      "date_modified": "2023-01-28T01:45:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pedrovhb-typescope/",
      "url": "https://go.waylonwalker.com/pedrovhb-typescope/",
      "title": "⭐ pedrovhb typescope",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/pedrovhb/typescope\" 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\"\u003etypescope\u003c/a\u003e by \u003ca href=\"https://github.com/pedrovhb\" 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\"\u003epedrovhb\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA nicer terminal view for your Python type analysis needs.\u003c/p\u003e\n",
      "content_text": "\nJust starred [typescope](https://github.com/pedrovhb/typescope) by [pedrovhb](https://github.com/pedrovhb). It's an exciting project with a lot to offer.\n\nA nicer terminal view for your Python type analysis needs.\n",
      "summary": "Just starred typescope by pedrovhb. It's an exciting project with a lot to offer.",
      "date_published": "2023-01-28T01:42:36Z",
      "date_modified": "2023-01-28T01:42:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darrenburns-textual-autocomplete/",
      "url": "https://go.waylonwalker.com/darrenburns-textual-autocomplete/",
      "title": "⭐ darrenburns textual-autocomplete",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/darrenburns/textual-autocomplete\" 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\"\u003etextual-autocomplete\u003c/a\u003e from \u003ca href=\"https://github.com/darrenburns\" 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\"\u003edarrenburns\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eEasily add autocomplete dropdowns to your Textual apps\u003c/p\u003e\n",
      "content_text": "\nI came across [textual-autocomplete](https://github.com/darrenburns/textual-autocomplete) from [darrenburns](https://github.com/darrenburns), and it's packed with great features and ideas.\n\nEasily add autocomplete dropdowns to your Textual apps\n",
      "summary": "I came across textual-autocomplete from darrenburns, and it's packed with great features and ideas.",
      "date_published": "2023-01-27T16:16:59Z",
      "date_modified": "2023-01-27T16:16:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/syrupy-project-syrupy/",
      "url": "https://go.waylonwalker.com/syrupy-project-syrupy/",
      "title": "⭐ syrupy-project syrupy",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/syrupy-project/syrupy\" 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\"\u003esyrupy\u003c/a\u003e, created by \u003ca href=\"https://github.com/syrupy-project\" 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\"\u003esyrupy-project\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🥞 The sweeter pytest snapshot plugin\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [syrupy](https://github.com/syrupy-project/syrupy), created by [syrupy-project](https://github.com/syrupy-project).\n\n:pancakes: The sweeter pytest snapshot plugin\n",
      "summary": "If you're into interesting projects, don't miss out on syrupy, created by syrupy-project.",
      "date_published": "2023-01-27T16:10:44Z",
      "date_modified": "2023-01-27T16:10:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/initialcommit-com-git-sim/",
      "url": "https://go.waylonwalker.com/initialcommit-com-git-sim/",
      "title": "⭐ initialcommit-com git-sim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/initialcommit-com/git-sim\" 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\"\u003egit-sim\u003c/a\u003e by \u003ca href=\"https://github.com/initialcommit-com\" 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\"\u003einitialcommit-com\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eVisually simulate \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e operations in your own repos with a single terminal command.\u003c/p\u003e\n",
      "content_text": "\nCheck out [git-sim](https://github.com/initialcommit-com/git-sim) by [initialcommit-com](https://github.com/initialcommit-com). It's a well-crafted project with great potential.\n\nVisually simulate Git operations in your own repos with a single terminal command.\n",
      "summary": "Check out git-sim by initialcommit-com. It's a well-crafted project with great potential.",
      "date_published": "2023-01-23T17:18:41Z",
      "date_modified": "2023-01-23T17:18:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gh-release/",
      "url": "https://go.waylonwalker.com/gh-release/",
      "title": "Releasing a New Version of Your Python Package Just Got Easier",
      "content_html": "\u003cp\u003eQuickly and easily create new versions of your Python package with the \u003ccode\u003egh release\u003c/code\u003e\ncommand. Get the version number, changelog, and\u003c/p\u003e\n\u003cp\u003eReleasing a new version of your Python package can be a daunting task. You need to make\nsure that all the necessary files are included, and that the version number is correct.\nBut now, with the help of the \u003ccode\u003egh release\u003c/code\u003e command, you can make the process much\nsmoother.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003egh release\u003c/code\u003e command allows you to quickly and easily create a new version of your\nPython package. All you need to do is provide the version number, the changelog, and the\ndistribution files. For example, if you wanted to create a new version of your package\nwith the version number \u003ccode\u003ev1.2.3\u003c/code\u003e, you could use the following command:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh release create v1.2.3 -F CHANGELOG.md dist/*.whl dist/*.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis command will create a new version of your package with the specified version number,\nand include the changelog and the distribution files. It’s a great way to make sure that\nall the necessary files are included in the release, and that the version number is\ncorrect.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003egh release\u003c/code\u003e command is a great tool for quickly and easily creating new versions of\nyour Python package. With just a few simple commands, you can make sure that all the\nnecessary files are included, and that the version number is correct. So if you’re looking\nfor an easy way to release a new version of your Python package, give the \u003ccode\u003egh release\u003c/code\u003e\ncommand a try.\u003c/p\u003e\n",
      "content_text": "\nQuickly and easily create new versions of your Python package with the `gh release`\ncommand. Get the version number, changelog, and\n\nReleasing a new version of your Python package can be a daunting task. You need to make\nsure that all the necessary files are included, and that the version number is correct.\nBut now, with the help of the `gh release` command, you can make the process much\nsmoother.\n\nThe `gh release` command allows you to quickly and easily create a new version of your\nPython package. All you need to do is provide the version number, the changelog, and the\ndistribution files. For example, if you wanted to create a new version of your package\nwith the version number `v1.2.3`, you could use the following command:\n\n```bash\ngh release create v1.2.3 -F CHANGELOG.md dist/*.whl dist/*.tar.gz\n```\n\nThis command will create a new version of your package with the specified version number,\nand include the changelog and the distribution files. It's a great way to make sure that\nall the necessary files are included in the release, and that the version number is\ncorrect.\n\nThe `gh release` command is a great tool for quickly and easily creating new versions of\nyour Python package. With just a few simple commands, you can make sure that all the\nnecessary files are included, and that the version number is correct. So if you're looking\nfor an easy way to release a new version of your Python package, give the `gh release`\ncommand a try.\n",
      "summary": "Quickly and easily create new versions of your Python package with the command. Get the version number, changelog, and",
      "date_published": "2023-01-23T10:52:19Z",
      "date_modified": "2023-01-23T10:52:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/arch-rejects-password/",
      "url": "https://go.waylonwalker.com/arch-rejects-password/",
      "title": "Arch Linux Randomly Rejecting Passwords",
      "content_html": "\u003cblockquote\u003e\n\u003cp\u003eFix Arch Linux randomly rejecting passwords with one command. Try\n‘faillock –user $USER’ to reset login counter and regain access. Quick\nsolution for a smooth computing\u0026#34;\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000255.3612717469.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000255.3612717469.webp\" alt=\"an intertwined mess of wires\"/ data-glightbox=\"description: an intertwined mess of wires\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIf you’re an Arch Linux user, you may have experienced a frustrating issue\nwhere your password is randomly not being accepted by the system. This can be a\nmajor inconvenience and can cause a lot of frustration, especially if it\nhappens frequently.\u003c/p\u003e\n\u003cp\u003eThe good news is that there is a simple fix for this issue. The following bash\ncode can be used to fix the problem:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ebash faillock --user $USER\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis command is used to reset the failed login count for the current user. By\nrunning this command, you will be able to reset the system’s login counter and\nregain access to your account.\u003c/p\u003e\n\u003cp\u003eIt’s important to note that this command should only be used as a temporary\nsolution. If you find yourself frequently having to run this command, it’s\nlikely that there is a deeper issue with your system that needs to be\naddressed.\u003c/p\u003e\n\u003cp\u003eIn any case, if you’re experiencing problems with your Arch Linux system not\naccepting your password, give the above command a try and see if it resolves\nthe issue for you.\u003c/p\u003e\n",
      "content_text": "\n\u003e Fix Arch Linux randomly rejecting passwords with one command. Try\n\u003e 'faillock --user $USER' to reset login counter and regain access. Quick\n\u003e solution for a smooth computing\"\n\n![an intertwined mess of wires](https://stable-diffusion.waylonwalker.com/000255.3612717469.webp)\n\nIf you're an Arch Linux user, you may have experienced a frustrating issue\nwhere your password is randomly not being accepted by the system. This can be a\nmajor inconvenience and can cause a lot of frustration, especially if it\nhappens frequently.\n\nThe good news is that there is a simple fix for this issue. The following bash\ncode can be used to fix the problem:\n\n`bash faillock --user $USER`\n\nThis command is used to reset the failed login count for the current user. By\nrunning this command, you will be able to reset the system's login counter and\nregain access to your account.\n\nIt's important to note that this command should only be used as a temporary\nsolution. If you find yourself frequently having to run this command, it's\nlikely that there is a deeper issue with your system that needs to be\naddressed.\n\nIn any case, if you're experiencing problems with your Arch Linux system not\naccepting your password, give the above command a try and see if it resolves\nthe issue for you.\n",
      "summary": "Fix Arch Linux randomly rejecting passwords with one command. Try \u003e 'faillock --user $USER' to reset login counter and regain access. Quick \u003e solution for a...",
      "date_published": "2023-01-19T07:46:31Z",
      "date_modified": "2023-01-19T07:46:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darrenburns-rich-pixels/",
      "url": "https://go.waylonwalker.com/darrenburns-rich-pixels/",
      "title": "⭐ darrenburns rich-pixels",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/darrenburns\" 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\"\u003edarrenburns’s\u003c/a\u003e project \u003ca href=\"https://github.com/darrenburns/rich-pixels\" 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\"\u003erich-pixels\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Rich-compatible library for writing pixel images and ASCII art to the terminal.\u003c/p\u003e\n",
      "content_text": "\nI like [darrenburns's](https://github.com/darrenburns) project [rich-pixels](https://github.com/darrenburns/rich-pixels).\n\nA Rich-compatible library for writing pixel images and ASCII art to the terminal.\n",
      "summary": "I like darrenburns's project rich-pixels.",
      "date_published": "2023-01-19T01:20:58Z",
      "date_modified": "2023-01-19T01:20:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pycqa-eradicate/",
      "url": "https://go.waylonwalker.com/pycqa-eradicate/",
      "title": "⭐ PyCQA eradicate",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/PyCQA/eradicate\" 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\"\u003eeradicate\u003c/a\u003e by \u003ca href=\"https://github.com/PyCQA\" 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\"\u003ePyCQA\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eRemoves commented-out code from Python files\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [eradicate](https://github.com/PyCQA/eradicate) by [PyCQA](https://github.com/PyCQA), and it's truly impressive.\n\nRemoves commented-out code from Python files\n",
      "summary": "I recently discovered eradicate by PyCQA, and it's truly impressive.",
      "date_published": "2023-01-18T01:34:23Z",
      "date_modified": "2023-01-18T01:34:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jay-babu-mason-nvim-dap-nvim/",
      "url": "https://go.waylonwalker.com/jay-babu-mason-nvim-dap-nvim/",
      "title": "⭐ jay-babu mason-nvim-dap.nvim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/jay-babu/mason-nvim-dap.nvim\" 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\"\u003emason-nvim-dap.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/jay-babu\" 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\"\u003ejay-babu\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI came across [mason-nvim-dap.nvim](https://github.com/jay-babu/mason-nvim-dap.nvim) from [jay-babu](https://github.com/jay-babu), and it's packed with great features and ideas.\n\nNo description available.\n",
      "summary": "I came across mason-nvim-dap.nvim from jay-babu, and it's packed with great features and ideas.",
      "date_published": "2023-01-16T14:16:53Z",
      "date_modified": "2023-01-16T14:16:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypa-pipx/",
      "url": "https://go.waylonwalker.com/pypa-pipx/",
      "title": "⭐ pypa pipx",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pypa\" 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\"\u003epypa\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pypa/pipx\" 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\"\u003epipx\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eInstall and Run Python Applications in Isolated Environments\u003c/p\u003e\n",
      "content_text": "\n[pypa](https://github.com/pypa) has done a fantastic job with [pipx](https://github.com/pypa/pipx). Highly recommend taking a look.\n\nInstall and Run Python Applications in Isolated Environments\n",
      "summary": "pypa has done a fantastic job with pipx. Highly recommend taking a look.",
      "date_published": "2023-01-16T13:51:26Z",
      "date_modified": "2023-01-16T13:51:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sickcodes-docker-osx/",
      "url": "https://go.waylonwalker.com/sickcodes-docker-osx/",
      "title": "⭐ sickcodes Docker-OSX",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/sickcodes\" 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\"\u003esickcodes’s\u003c/a\u003e project \u003ca href=\"https://github.com/sickcodes/Docker-OSX\" 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\"\u003eDocker-OSX\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRun macOS VM in a Docker! Run near native OSX-KVM in Docker! X11 Forwarding! CI/CD for OS X Security Research! Docker mac Containers.\u003c/p\u003e\n",
      "content_text": "\nI like [sickcodes's](https://github.com/sickcodes) project [Docker-OSX](https://github.com/sickcodes/Docker-OSX).\n\nRun macOS VM in a Docker! Run near native OSX-KVM in Docker! X11 Forwarding! CI/CD for OS X Security Research! Docker mac Containers.\n",
      "summary": "I like sickcodes's project Docker-OSX.",
      "date_published": "2023-01-16T13:42:19Z",
      "date_modified": "2023-01-16T13:42:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bloomberg-memray/",
      "url": "https://go.waylonwalker.com/bloomberg-memray/",
      "title": "⭐ bloomberg memray",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/bloomberg/memray\" 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\"\u003ememray\u003c/a\u003e from \u003ca href=\"https://github.com/bloomberg\" 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\"\u003ebloomberg\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMemray is a memory profiler for Python\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [memray](https://github.com/bloomberg/memray) from [bloomberg](https://github.com/bloomberg).\n\nMemray is a memory profiler for Python\n",
      "summary": "I'm impressed by memray from bloomberg.",
      "date_published": "2023-01-16T13:40:33Z",
      "date_modified": "2023-01-16T13:40:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/artempyanykh-marksman/",
      "url": "https://go.waylonwalker.com/artempyanykh-marksman/",
      "title": "⭐ artempyanykh marksman",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/artempyanykh\" 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\"\u003eartempyanykh’s\u003c/a\u003e project \u003ca href=\"https://github.com/artempyanykh/marksman\" 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\"\u003emarksman\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWrite Markdown with code assist and intelligence in the comfort of your favourite editor.\u003c/p\u003e\n",
      "content_text": "\nI like [artempyanykh's](https://github.com/artempyanykh) project [marksman](https://github.com/artempyanykh/marksman).\n\nWrite Markdown with code assist and intelligence in the comfort of your favourite editor.\n",
      "summary": "I like artempyanykh's project marksman.",
      "date_published": "2023-01-15T15:07:46Z",
      "date_modified": "2023-01-15T15:07:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nedbat-cog/",
      "url": "https://go.waylonwalker.com/nedbat-cog/",
      "title": "⭐ nedbat cog",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/nedbat/cog\" 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\"\u003ecog\u003c/a\u003e by \u003ca href=\"https://github.com/nedbat\" 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\"\u003enedbat\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eSmall bits of Python computation for static files\u003c/p\u003e\n",
      "content_text": "\nCheck out [cog](https://github.com/nedbat/cog) by [nedbat](https://github.com/nedbat). It's a well-crafted project with great potential.\n\nSmall bits of Python computation for static files\n",
      "summary": "Check out cog by nedbat. It's a well-crafted project with great potential.",
      "date_published": "2022-12-27T22:51:31Z",
      "date_modified": "2022-12-27T22:51:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hynek-hatch-fancy-pypi-readme/",
      "url": "https://go.waylonwalker.com/hynek-hatch-fancy-pypi-readme/",
      "title": "⭐ hynek hatch-fancy-pypi-readme",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/hynek/hatch-fancy-pypi-readme\" 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\"\u003ehatch-fancy-pypi-readme\u003c/a\u003e, created by \u003ca href=\"https://github.com/hynek\" 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\"\u003ehynek\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFancy PyPI READMEs with Hatch\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [hatch-fancy-pypi-readme](https://github.com/hynek/hatch-fancy-pypi-readme), created by [hynek](https://github.com/hynek).\n\nFancy PyPI READMEs with Hatch\n",
      "summary": "If you're into interesting projects, don't miss out on hatch-fancy-pypi-readme, created by hynek.",
      "date_published": "2022-12-23T16:12:13Z",
      "date_modified": "2022-12-23T16:12:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/terrastruct-d2/",
      "url": "https://go.waylonwalker.com/terrastruct-d2/",
      "title": "⭐ terrastruct d2",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/terrastruct/d2\" 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\"\u003ed2\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/terrastruct\" 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\"\u003eterrastruct\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eD2 is a modern diagram scripting language that turns text to diagrams.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [d2](https://github.com/terrastruct/d2), an amazing project by [terrastruct](https://github.com/terrastruct). It's worth exploring!\n\nD2 is a modern diagram scripting language that turns text to diagrams.\n",
      "summary": "I'm really excited about d2, an amazing project by terrastruct. It's worth exploring!",
      "date_published": "2022-12-21T15:56:47Z",
      "date_modified": "2022-12-21T15:56:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/danymat-neogen/",
      "url": "https://go.waylonwalker.com/danymat-neogen/",
      "title": "⭐ danymat neogen",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/danymat/neogen\" 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\"\u003eneogen\u003c/a\u003e from \u003ca href=\"https://github.com/danymat\" 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\"\u003edanymat\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA better annotation generator. Supports multiple languages and annotation conventions.\u003c/p\u003e\n",
      "content_text": "\nI came across [neogen](https://github.com/danymat/neogen) from [danymat](https://github.com/danymat), and it's packed with great features and ideas.\n\nA better annotation generator. Supports multiple languages and annotation conventions.\n",
      "summary": "I came across neogen from danymat, and it's packed with great features and ideas.",
      "date_published": "2022-12-21T15:54:20Z",
      "date_modified": "2022-12-21T15:54:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-lua-kickstart-nvim/",
      "url": "https://go.waylonwalker.com/nvim-lua-kickstart-nvim/",
      "title": "⭐ nvim-lua kickstart.nvim",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/nvim-lua/kickstart.nvim\" 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\"\u003ekickstart.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/nvim-lua\" 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\"\u003envim-lua\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA launch point for your personal nvim configuration\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim) by [nvim-lua](https://github.com/nvim-lua).\n\nA launch point for your personal nvim configuration\n",
      "summary": "Looking for inspiration? kickstart.nvim by nvim-lua.",
      "date_published": "2022-12-21T15:53:03Z",
      "date_modified": "2022-12-21T15:53:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-init-lua/",
      "url": "https://go.waylonwalker.com/theprimeagen-init-lua/",
      "title": "⭐ ThePrimeagen init.lua",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ThePrimeagen/init.lua\" 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\"\u003einit.lua\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [init.lua](https://github.com/ThePrimeagen/init.lua) by [ThePrimeagen](https://github.com/ThePrimeagen). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out init.lua by ThePrimeagen. It's a well-crafted project with great potential.",
      "date_published": "2022-12-21T15:53:02Z",
      "date_modified": "2022-12-21T15:53:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/williamboman-mason-nvim/",
      "url": "https://go.waylonwalker.com/williamboman-mason-nvim/",
      "title": "⭐ williamboman mason.nvim",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/williamboman/mason.nvim\" 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\"\u003emason.nvim\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/williamboman\" 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\"\u003ewilliamboman\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003ePortable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [mason.nvim](https://github.com/williamboman/mason.nvim), an amazing project by [williamboman](https://github.com/williamboman). It's worth exploring!\n\nPortable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.\n",
      "summary": "I'm really excited about mason.nvim, an amazing project by williamboman. It's worth exploring!",
      "date_published": "2022-12-21T15:53:01Z",
      "date_modified": "2022-12-21T15:53:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mason-org-mason-nvim/",
      "url": "https://go.waylonwalker.com/mason-org-mason-nvim/",
      "title": "⭐ mason-org mason.nvim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/mason-org/mason.nvim\" 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\"\u003emason.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/mason-org\" 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\"\u003emason-org\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003ePortable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.\u003c/p\u003e\n",
      "content_text": "\nI came across [mason.nvim](https://github.com/mason-org/mason.nvim) from [mason-org](https://github.com/mason-org), and it's packed with great features and ideas.\n\nPortable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.\n",
      "summary": "I came across mason.nvim from mason-org, and it's packed with great features and ideas.",
      "date_published": "2022-12-21T15:53:01Z",
      "date_modified": "2022-12-21T15:53:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sbidoul-hatch-pip-deepfreeze/",
      "url": "https://go.waylonwalker.com/sbidoul-hatch-pip-deepfreeze/",
      "title": "⭐ sbidoul hatch-pip-deepfreeze",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/sbidoul\" 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\"\u003esbidoul’s\u003c/a\u003e project \u003ca href=\"https://github.com/sbidoul/hatch-pip-deepfreeze\" 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\"\u003ehatch-pip-deepfreeze\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA hatch \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e plugin to lock dependencies with pip-deepfreeze\u003c/p\u003e\n",
      "content_text": "\nI like [sbidoul's](https://github.com/sbidoul) project [hatch-pip-deepfreeze](https://github.com/sbidoul/hatch-pip-deepfreeze).\n\nA hatch virtual environment plugin to lock dependencies with pip-deepfreeze\n",
      "summary": "I like sbidoul's project hatch-pip-deepfreeze.",
      "date_published": "2022-12-16T15:21:23Z",
      "date_modified": "2022-12-16T15:21:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yazgoo-vmux/",
      "url": "https://go.waylonwalker.com/yazgoo-vmux/",
      "title": "⭐ yazgoo vmux",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/yazgoo\" 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\"\u003eyazgoo\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/yazgoo/vmux\" 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\"\u003evmux\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003ehelper for multiplexing terminals with vim/neovim\u003c/p\u003e\n",
      "content_text": "\n[yazgoo](https://github.com/yazgoo) has done a fantastic job with [vmux](https://github.com/yazgoo/vmux). Highly recommend taking a look.\n\nhelper for multiplexing terminals with vim/neovim\n",
      "summary": "yazgoo has done a fantastic job with vmux. Highly recommend taking a look.",
      "date_published": "2022-12-10T23:20:32Z",
      "date_modified": "2022-12-10T23:20:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fail-ci-scripts/",
      "url": "https://go.waylonwalker.com/fail-ci-scripts/",
      "title": "dash e your github docker actions",
      "content_html": "\u003cp\u003eGive github actions the -e flag in the shebang \u003ccode\u003e#!\u003c/code\u003e so they fail on any one\ncommand failure. Otherwise each line will set the exit status, but only the\nlast one will be passed to ci.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash -e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-is--e\"\u003eWhat is -e \u003ca href=\"#what-is--e\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe -e flag to the bash command allows your script to exit immediately if any\ncommand within the script returns a non-zero exit status. This can be useful\nfor ensuring that your script exits with an error if any of the commands it\nruns fail, which can help you identify and debug issues in your script. For\nexample, if you have a script that runs several commands and one of those\ncommands fails, the script will continue running without the -e flag, but will\nexit immediately if the -e flag is present. This can make it easier to\ntroubleshoot your script and ensure that it runs correctly.\u003c/p\u003e\n\u003ch2 id=\"solution-for-windows\"\u003eSolution for Windows \u003ca href=\"#solution-for-windows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn windows the solution is not quite as simple. You can define a function in a\nWindows batch script that wraps an if statement to check the exit status of a\ncommand and handle any errors that may have occurred. Here is an example of how\nyou might define a function called “check_error” that does this:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nl\"\u003echeck_error\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"k\"\u003eerrorlevel\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eecho\u003c/span\u003e An error occurred!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eexit\u003c/span\u003e /b 1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo use this function in your script, you would simply call it after running a\ncommand, like this:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esome_command\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecall\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nl\"\u003echeck_error\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis would run the “some_command” and then call the “check_error” function to\ncheck the exit status and handle any errors that may have occurred. This\napproach allows you to reuse the error-checking logic in your script, which can\nmake it easier to write and maintain.\u003c/p\u003e\n",
      "content_text": "\nGive github actions the -e flag in the shebang `#!` so they fail on any one\ncommand failure. Otherwise each line will set the exit status, but only the\nlast one will be passed to ci.\n\n```bash\n#!/bin/bash -e\n```\n\n## What is -e\n\nThe -e flag to the bash command allows your script to exit immediately if any\ncommand within the script returns a non-zero exit status. This can be useful\nfor ensuring that your script exits with an error if any of the commands it\nruns fail, which can help you identify and debug issues in your script. For\nexample, if you have a script that runs several commands and one of those\ncommands fails, the script will continue running without the -e flag, but will\nexit immediately if the -e flag is present. This can make it easier to\ntroubleshoot your script and ensure that it runs correctly.\n\n## Solution for Windows\n\nIn windows the solution is not quite as simple. You can define a function in a\nWindows batch script that wraps an if statement to check the exit status of a\ncommand and handle any errors that may have occurred. Here is an example of how\nyou might define a function called \"check_error\" that does this:\n\n```cmd\n:check_error\nif errorlevel 1 (\n  echo An error occurred!\n  exit /b 1\n)\n```\n\nTo use this function in your script, you would simply call it after running a\ncommand, like this:\n\n```cmd\nsome_command\ncall :check_error\n```\n\nThis would run the \"some_command\" and then call the \"check_error\" function to\ncheck the exit status and handle any errors that may have occurred. This\napproach allows you to reuse the error-checking logic in your script, which can\nmake it easier to write and maintain.\n",
      "summary": "Give github actions the -e flag in the shebang so they fail on any one command failure. Otherwise each line will set the exit status, but only the last one...",
      "date_published": "2022-12-07T13:09:37Z",
      "date_modified": "2022-12-07T13:09:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "github",
        "actions",
        "ci-cd"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/libfuse-sshfs/",
      "url": "https://go.waylonwalker.com/libfuse-sshfs/",
      "title": "⭐ libfuse sshfs",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/libfuse/sshfs\" 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\"\u003esshfs\u003c/a\u003e by \u003ca href=\"https://github.com/libfuse\" 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\"\u003elibfuse\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA network filesystem client to connect to SSH servers\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [sshfs](https://github.com/libfuse/sshfs) by [libfuse](https://github.com/libfuse).\n\nA network filesystem client to connect to SSH servers\n",
      "summary": "Looking for inspiration? sshfs by libfuse.",
      "date_published": "2022-12-05T15:57:09Z",
      "date_modified": "2022-12-05T15:57:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ssh-copy-id/",
      "url": "https://go.waylonwalker.com/ssh-copy-id/",
      "title": "ssh copy id",
      "content_html": "\u003cp\u003eI recently setup some vm’s on my main machine and got sick of signing in with\npasswords.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh-keygen\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh-copy-id -i ~/.ssh/id_rsa.pub virt\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI recently setup some vm's on my main machine and got sick of signing in with\npasswords.\n\n``` bash\nssh-keygen\nssh-copy-id -i ~/.ssh/id_rsa.pub virt\n```\n",
      "summary": "I recently setup some vm's on my main machine and got sick of signing in with passwords.",
      "date_published": "2022-12-04T20:10:05Z",
      "date_modified": "2022-12-04T20:10:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tmux-push-pull-panes/",
      "url": "https://go.waylonwalker.com/tmux-push-pull-panes/",
      "title": "tmux push/pull panes",
      "content_html": "\u003cp\u003eMoving panes between tmux sessions is something that makes tmux a very flexible\nand powerful tool.  I don’t need this feature very often, but it comes in\nclutch when you need it.\u003c/p\u003e\n\u003ch2 id=\"pull-a-pane-from-any-other-session\"\u003ePull a pane from any other session \u003ca href=\"#pull-a-pane-from-any-other-session\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eUsing \u003ccode\u003echoose-window\u003c/code\u003e I was able to come up with a way to select any pane\nwithing any other session and join it into my current session.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Choose a pane to join in horizontally\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e f choose-window -Z \u003cspan class=\"s1\"\u003e\u0026#39;join-pane -h -s \u0026#34;%%\u0026#34;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"pushpull-from-scratch\"\u003ePush/Pull from scratch \u003ca href=\"#pushpull-from-scratch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve long had this one in my tmux config, I always have a “scratch” session\nthat I’m running, I often use for looking at things like \u003ccode\u003ek9s\u003c/code\u003e accross repos\nwithin a popup.\u003c/p\u003e\n\u003cp\u003eThis use case puts a pane into the scratch session, then pulls it back out.  I\nwill use this to move a pane between sessions in the rare cases I need to do\nthis.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# push the active pane into the scratch session horizonally\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -n M-f join-pane -ht scratch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# pull the last active pane from the scratch session horizonally into this session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -n M-F join-pane -hs scratch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nMoving panes between tmux sessions is something that makes tmux a very flexible\nand powerful tool.  I don't need this feature very often, but it comes in\nclutch when you need it.\n\n## Pull a pane from any other session\n\nUsing `choose-window` I was able to come up with a way to select any pane\nwithing any other session and join it into my current session.\n\n``` bash\n# Choose a pane to join in horizontally\nbind f choose-window -Z 'join-pane -h -s \"%%\"'\n```\n\n## Push/Pull from scratch\n\nI've long had this one in my tmux config, I always have a \"scratch\" session\nthat I'm running, I often use for looking at things like `k9s` accross repos\nwithin a popup.\n\nThis use case puts a pane into the scratch session, then pulls it back out.  I\nwill use this to move a pane between sessions in the rare cases I need to do\nthis.\n\n``` bash\n# push the active pane into the scratch session horizonally\nbind -n M-f join-pane -ht scratch\n# pull the last active pane from the scratch session horizonally into this session\nbind -n M-F join-pane -hs scratch\n```\n",
      "summary": "Moving panes between tmux sessions is something that makes tmux a very flexible and powerful tool. I don't need this feature very often, but it comes in...",
      "date_published": "2022-12-04T13:25:54Z",
      "date_modified": "2022-12-04T13:25:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "tmux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joehillen-sysz/",
      "url": "https://go.waylonwalker.com/joehillen-sysz/",
      "title": "⭐ joehillen sysz",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/joehillen\" 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\"\u003ejoehillen\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/joehillen/sysz\" 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\"\u003esysz\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eAn fzf  terminal UI for systemctl\u003c/p\u003e\n",
      "content_text": "\n[joehillen](https://github.com/joehillen) has done a fantastic job with [sysz](https://github.com/joehillen/sysz). Highly recommend taking a look.\n\nAn fzf  terminal UI for systemctl\n",
      "summary": "joehillen has done a fantastic job with sysz. Highly recommend taking a look.",
      "date_published": "2022-12-03T17:37:11Z",
      "date_modified": "2022-12-03T17:37:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/eth-p-bat-extras/",
      "url": "https://go.waylonwalker.com/eth-p-bat-extras/",
      "title": "⭐ eth-p bat-extras",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/eth-p\" 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\"\u003eeth-p’s\u003c/a\u003e project \u003ca href=\"https://github.com/eth-p/bat-extras\" 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\"\u003ebat-extras\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBash scripts that integrate bat with various command line tools.\u003c/p\u003e\n",
      "content_text": "\nI like [eth-p's](https://github.com/eth-p) project [bat-extras](https://github.com/eth-p/bat-extras).\n\nBash scripts that integrate bat with various command line tools.\n",
      "summary": "I like eth-p's project bat-extras.",
      "date_published": "2022-12-03T17:37:06Z",
      "date_modified": "2022-12-03T17:37:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cdown-clipmenu/",
      "url": "https://go.waylonwalker.com/cdown-clipmenu/",
      "title": "⭐ cdown clipmenu",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/cdown/clipmenu\" 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\"\u003eclipmenu\u003c/a\u003e by \u003ca href=\"https://github.com/cdown\" 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\"\u003ecdown\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eClipboard management using dmenu\u003c/p\u003e\n",
      "content_text": "\nJust starred [clipmenu](https://github.com/cdown/clipmenu) by [cdown](https://github.com/cdown). It's an exciting project with a lot to offer.\n\nClipboard management using dmenu\n",
      "summary": "Just starred clipmenu by cdown. It's an exciting project with a lot to offer.",
      "date_published": "2022-12-03T17:36:57Z",
      "date_modified": "2022-12-03T17:36:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/qw3rtty-neix/",
      "url": "https://go.waylonwalker.com/qw3rtty-neix/",
      "title": "⭐ qw3rtty neix",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/qw3rtty/neix\" 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\"\u003eneix\u003c/a\u003e from \u003ca href=\"https://github.com/qw3rtty\" 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\"\u003eqw3rtty\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eneix - a RSS/Atom feed reader for your terminal.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [neix](https://github.com/qw3rtty/neix) from [qw3rtty](https://github.com/qw3rtty).\n\nneix - a RSS/Atom feed reader for your terminal.\n",
      "summary": "I'm impressed by neix from qw3rtty.",
      "date_published": "2022-11-30T15:10:21Z",
      "date_modified": "2022-11-30T15:10:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rwhitt2049-df-viewer-poc/",
      "url": "https://go.waylonwalker.com/rwhitt2049-df-viewer-poc/",
      "title": "⭐ rwhitt2049 df-viewer-poc",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rwhitt2049\" 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\"\u003erwhitt2049\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/rwhitt2049/df-viewer-poc\" 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\"\u003edf-viewer-poc\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[rwhitt2049](https://github.com/rwhitt2049) has done a fantastic job with [df-viewer-poc](https://github.com/rwhitt2049/df-viewer-poc). Highly recommend taking a look.\n\nNo description available.\n",
      "summary": "rwhitt2049 has done a fantastic job with df-viewer-poc. Highly recommend taking a look.",
      "date_published": "2022-11-29T15:51:46Z",
      "date_modified": "2022-11-29T15:51:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-ansible-vault-pre-commit/",
      "url": "https://go.waylonwalker.com/pypeaday-ansible-vault-pre-commit/",
      "title": "⭐ pypeaday ansible-vault-pre-commit",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/pypeaday/ansible-vault-pre-commit\" 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\"\u003eansible-vault-pre-commit\u003c/a\u003e by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003epre-commit hook to ensure sensitive info in a repo is encrypted with ansible-vault\u003c/p\u003e\n",
      "content_text": "\nThe work on [ansible-vault-pre-commit](https://github.com/pypeaday/ansible-vault-pre-commit) by [pypeaday](https://github.com/pypeaday).\n\npre-commit hook to ensure sensitive info in a repo is encrypted with ansible-vault\n",
      "summary": "The work on ansible-vault-pre-commit by pypeaday.",
      "date_published": "2022-11-29T15:50:54Z",
      "date_modified": "2022-11-29T15:50:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cool-rr-pysnooper/",
      "url": "https://go.waylonwalker.com/cool-rr-pysnooper/",
      "title": "⭐ cool-RR PySnooper",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/cool-RR/PySnooper\" 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\"\u003ePySnooper\u003c/a\u003e by \u003ca href=\"https://github.com/cool-RR\" 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\"\u003ecool-RR\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNever use print for debugging again\u003c/p\u003e\n",
      "content_text": "\nThe work on [PySnooper](https://github.com/cool-RR/PySnooper) by [cool-RR](https://github.com/cool-RR).\n\nNever use print for debugging again\n",
      "summary": "The work on PySnooper by cool-RR.",
      "date_published": "2022-11-24T16:56:43Z",
      "date_modified": "2022-11-24T16:56:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ssh-key-permissions/",
      "url": "https://go.waylonwalker.com/ssh-key-permissions/",
      "title": "ssh key permissions",
      "content_html": "\u003cp\u003eI just shared some ssh keys with myself and ran into this error telling me that\nI did not set the correct permissions on my key.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePermissions \u003cspan class=\"m\"\u003e0750\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/home/waylon/.ssh/id_*******\u0026#39;\u003c/span\u003e are too open.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIt is required that your private key files are NOT accessible by others.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThis private key will be ignored.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLoad key \u003cspan class=\"s2\"\u003e\u0026#34;/home/waylon/.ssh/id_*******\u0026#34;\u003c/span\u003e: bad Permissions\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erepo: Permission denied \u003cspan class=\"o\"\u003e(\u003c/span\u003epublickey,gssapi-keyex,gssapi-with-mic\u003cspan class=\"o\"\u003e)\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efatal: Could not \u003cspan class=\"nb\"\u003eread\u003c/span\u003e from remote repository.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePlease make sure you have the correct access rights\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eand the repository exists.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI changed them with the following commands.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod \u003cspan class=\"m\"\u003e644\u003c/span\u003e ~/.ssh/id_*******.pub\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod \u003cspan class=\"m\"\u003e600\u003c/span\u003e ~/.ssh/id_*******\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI just shared some ssh keys with myself and ran into this error telling me that\nI did not set the correct permissions on my key.\n\n``` bash\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nPermissions 0750 for '/home/waylon/.ssh/id_*******' are too open.\nIt is required that your private key files are NOT accessible by others.\nThis private key will be ignored.\nLoad key \"/home/waylon/.ssh/id_*******\": bad Permissions\nrepo: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).\nfatal: Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.\n```\n\nI changed them with the following commands.\n\n``` bash\nchmod 644 ~/.ssh/id_*******.pub\nchmod 600 ~/.ssh/id_*******\n```\n",
      "summary": "I just shared some ssh keys with myself and ran into this error telling me that I did not set the correct permissions on my key.",
      "date_published": "2022-11-22T16:16:38Z",
      "date_modified": "2022-11-22T16:16:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/formatme/",
      "url": "https://go.waylonwalker.com/formatme/",
      "title": "formatme",
      "content_html": "\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ekedro.pipeline\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003einput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;raw\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;int\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003emy_func\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;one\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n```python\nfrom kedro.pipeline import node\n\nnode(\n    input=\"raw\",\n    output=\"int\",\n    func=my_func,\n    tags=[\"one\"],\n)\n```\n",
      "date_published": "2022-11-11T14:39:23Z",
      "date_modified": "2022-11-11T14:39:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "markdown"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mr-destructive-djankata/",
      "url": "https://go.waylonwalker.com/mr-destructive-djankata/",
      "title": "⭐ Mr-Destructive djankata",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Mr-Destructive\" 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\"\u003eMr-Destructive\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/Mr-Destructive/djankata\" 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\"\u003edjankata\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eDjango + Markata blog starter\u003c/p\u003e\n",
      "content_text": "\n[Mr-Destructive](https://github.com/Mr-Destructive) has done a fantastic job with [djankata](https://github.com/Mr-Destructive/djankata). Highly recommend taking a look.\n\nDjango + Markata blog starter\n",
      "summary": "Mr-Destructive has done a fantastic job with djankata. Highly recommend taking a look.",
      "date_published": "2022-11-01T12:14:17Z",
      "date_modified": "2022-11-01T12:14:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/allaman-nvim/",
      "url": "https://go.waylonwalker.com/allaman-nvim/",
      "title": "⭐ Allaman nvim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Allaman/nvim\" 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\"\u003envim\u003c/a\u003e by \u003ca href=\"https://github.com/Allaman\" 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\"\u003eAllaman\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eMinimal, blazingly fast, and pure Lua based Neovim configuration for my work as DevOps/Cloud Engineer with batteries included for Python, Golang, and, of course, YAML\u003c/p\u003e\n",
      "content_text": "\nCheck out [nvim](https://github.com/Allaman/nvim) by [Allaman](https://github.com/Allaman). It's a well-crafted project with great potential.\n\nMinimal, blazingly fast, and pure Lua based Neovim configuration for my work as DevOps/Cloud Engineer with batteries included for Python, Golang, and, of course, YAML\n",
      "summary": "Check out nvim by Allaman. It's a well-crafted project with great potential.",
      "date_published": "2022-10-30T18:22:19Z",
      "date_modified": "2022-10-30T18:22:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jessarcher-dotfiles/",
      "url": "https://go.waylonwalker.com/jessarcher-dotfiles/",
      "title": "⭐ jessarcher dotfiles",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/jessarcher/dotfiles\" 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\"\u003edotfiles\u003c/a\u003e by \u003ca href=\"https://github.com/jessarcher\" 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\"\u003ejessarcher\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e$HOME sweet $HOME\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [dotfiles](https://github.com/jessarcher/dotfiles) by [jessarcher](https://github.com/jessarcher).\n\n$HOME sweet $HOME\n",
      "summary": "Looking for inspiration? dotfiles by jessarcher.",
      "date_published": "2022-10-29T19:59:10Z",
      "date_modified": "2022-10-29T19:59:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-navic/",
      "url": "https://go.waylonwalker.com/nvim-navic/",
      "title": "nvim navic",
      "content_html": "\u003cp\u003eWith the latest release of version of nvim 0.8.0 we get access to a new winbar\nfeature.  One thing I have long wanted somewhere in my nvim is navigation for\npairing partners or anyone watching can keep track of where I am.  As the\ndriver it’s easy to keep track of the file/function you are in.  But when you\nmake big jumps in a few keystrokes it can be quite disorienting to anyone\nwatching, and having this feedback to look at is very helpful.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000362.2841371882.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000362.2841371882.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C6.0 -Ak_lms -S2841371882\"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C6.0 -Ak_lms -S2841371882\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"winbar\"\u003ewinbar \u003ca href=\"#winbar\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003envim exposes the winbar api in lua, and you can send any text to the winbar as follows.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.o\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewinbar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;here\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can try it for yourself right from the nvim command line.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003elua\u003c/span\u003e \u003cspan class=\"nx\"\u003evim\u003c/span\u003e.\u003cspan class=\"nx\"\u003eo\u003c/span\u003e.\u003cspan class=\"nx\"\u003ewinbar\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;here\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow you will notice one line above your file with the word \u003ccode\u003ehere\u003c/code\u003e at the very\nbeginning.\u003c/p\u003e\n\u003ch2 id=\"clearing-the-winbar\"\u003eClearing the winbar \u003ca href=\"#clearing-the-winbar\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want to clear it out, you can just set it to an empty string or \u003ccode\u003enil\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003elua\u003c/span\u003e \u003cspan class=\"nx\"\u003evim\u003c/span\u003e.\u003cspan class=\"nx\"\u003eo\u003c/span\u003e.\u003cspan class=\"nx\"\u003ewinbar\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003elua\u003c/span\u003e \u003cspan class=\"nx\"\u003evim\u003c/span\u003e.\u003cspan class=\"nx\"\u003eo\u003c/span\u003e.\u003cspan class=\"nx\"\u003ewinbar\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003enil\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"setting-up-nvim-navic\"\u003eSetting up nvim-navic \u003ca href=\"#setting-up-nvim-navic\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need to install \u003ccode\u003envim-navic\u003c/code\u003e if you want to use it.  I added it to my\nplugins using Plug as follows.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecall\u003c/span\u003e \u003cspan class=\"nx\"\u003eplug\u003c/span\u003e#\u003cspan class=\"nx\"\u003ebegin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;~/.local/share/nvim/plugged\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;SmiteshP/nvim-navic\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecall\u003c/span\u003e \u003cspan class=\"nx\"\u003eplug\u003c/span\u003e#\u003cspan class=\"nx\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote! \u003ccode\u003envim-navic\u003c/code\u003e does require the use of the nvim lsp, so if you are not\nusing it then maybe this won’t work for you.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI created an \u003ccode\u003eon_attach\u003c/code\u003e function long ago, cause that’s what Teej told me to\ndo.  Now I am glad I did, because it made this change super easy.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e \u003cspan class=\"nf\"\u003eon_attach\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebufnr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eclient.server_capabilities\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edocumentSymbolProvider\u003c/span\u003e \u003cspan class=\"kr\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003enavic.attach\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eclient\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebufnr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen you need to use that \u003ccode\u003eon_attach\u003c/code\u003e function on all of the lsp’s that you\nwant navic to work on.\u003c/p\u003e\n\u003cp\u003eThen in a lua file you need to setup the winbar, for now I put this in my\nlsp-config settings file, but eventually I want to move my settings to lua and\nput it there.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.o\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewinbar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; %{%v:lua.vim.fn.expand(\u0026#39;%F\u0026#39;)%}  %{%v:lua.require\u0026#39;nvim-navic\u0026#39;.get_location()%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-my-winbar-looks-like\"\u003eWhat my winbar looks like \u003ca href=\"#what-my-winbar-looks-like\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat I have right now is everything someone who is watching would need to know\nto navigate to the same place that I am in the project.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e waylonwalker/app.py   Link \u0026gt;  on_click\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/d01f3307-6397-4fdf-a870-0165b331d186.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/d01f3307-6397-4fdf-a870-0165b331d186.webp\" alt=\"nvim-navic-example.webp\"/ data-glightbox=\"description: nvim-navic-example.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"diff\"\u003eDiff \u003ca href=\"#diff\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are the changes that I made to to my plugins list and my lsp-config to get\nit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e /home/u_walkews/.config/nvim/plugins.vim\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecall plug#begin(\u0026#39;~/.local/share/nvim/plugged\u0026#39;)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+Plug \u0026#39;SmiteshP/nvim-navic\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#  /home/u_walkews/.config/nvim/lua/waylonwalker/lsp-config.lua\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-local function on_attach() end\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+local navic = require(\u0026#34;nvim-navic\u0026#34;)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+local function on_attach(client, bufnr)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+    if client.server_capabilities.documentSymbolProvider then\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+        navic.attach(client, bufnr)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+    end\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+end\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+vim.o.winbar = \u0026#34; %{%v:lua.vim.fn.expand(\u0026#39;%F\u0026#39;)%}  %{%v:lua.require\u0026#39;nvim-navic\u0026#39;.get_location()%}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"gh-commit\"\u003eGH commit \u003ca href=\"#gh-commit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want to see the change on GitHub, here is the\n\u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/62298a935d93a2cf21e1c965d323363bcbd22881\" 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\"\u003ediff\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/62298a935d93a2cf21e1c965d323363bcbd22881\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/5efbd396-2716-49d3-833b-3004f1726afe.webp\" alt=\"nvim-navic-setup-gh-diff.webp\"/ data-glightbox=\"description: nvim-navic-setup-gh-diff.webp\"\u003e\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nWith the latest release of version of nvim 0.8.0 we get access to a new winbar\nfeature.  One thing I have long wanted somewhere in my nvim is navigation for\npairing partners or anyone watching can keep track of where I am.  As the\ndriver it's easy to keep track of the file/function you are in.  But when you\nmake big jumps in a few keystrokes it can be quite disorienting to anyone\nwatching, and having this feedback to look at is very helpful.\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C6.0 -Ak_lms -S2841371882](https://stable-diffusion.waylonwalker.com/000362.2841371882.webp)\n\n## winbar\n\nnvim exposes the winbar api in lua, and you can send any text to the winbar as follows.\n\n``` lua\nvim.o.winbar = \"here\"\n```\n\nYou can try it for yourself right from the nvim command line.\n\n``` vim\n:lua vim.o.winbar = \"here\"\n```\n\nNow you will notice one line above your file with the word `here` at the very\nbeginning.\n\n## Clearing the winbar\n\nIf you want to clear it out, you can just set it to an empty string or `nil`.\n\n``` vim\n:lua vim.o.winbar = \"\"\n:lua vim.o.winbar = nil\n```\n\n## Setting up nvim-navic\n\nYou will need to install `nvim-navic` if you want to use it.  I added it to my\nplugins using Plug as follows.\n\n``` vim\ncall plug#begin('~/.local/share/nvim/plugged')\nPlug 'SmiteshP/nvim-navic'\ncall plug#end()\n```\n\n\u003e Note! `nvim-navic` does require the use of the nvim lsp, so if you are not\n\u003e using it then maybe this won't work for you.\n\nI created an `on_attach` function long ago, cause that's what Teej told me to\ndo.  Now I am glad I did, because it made this change super easy.\n\n``` lua\nlocal function on_attach(client, bufnr)\n    if client.server_capabilities.documentSymbolProvider then\n        navic.attach(client, bufnr)\n    end\nend\n```\n\nThen you need to use that `on_attach` function on all of the lsp's that you\nwant navic to work on.\n\nThen in a lua file you need to setup the winbar, for now I put this in my\nlsp-config settings file, but eventually I want to move my settings to lua and\nput it there.\n\n``` lua\nvim.o.winbar = \" %{%v:lua.vim.fn.expand('%F')%}  %{%v:lua.require'nvim-navic'.get_location()%}\"\n```\n\n## What my winbar looks like\n\nWhat I have right now is everything someone who is watching would need to know\nto navigate to the same place that I am in the project.\n\n``` text\n waylonwalker/app.py   Link \u003e  on_click\n```\n\n![nvim-navic-example.webp](https://dropper.waylonwalker.com/api/file/d01f3307-6397-4fdf-a870-0165b331d186.webp)\n\n## Diff\n\nHere are the changes that I made to to my plugins list and my lsp-config to get\nit.\n\n```diff\n /home/u_walkews/.config/nvim/plugins.vim\ncall plug#begin('~/.local/share/nvim/plugged')\n+Plug 'SmiteshP/nvim-navic'\n```\n\n``` diff\n#  /home/u_walkews/.config/nvim/lua/waylonwalker/lsp-config.lua\n-local function on_attach() end\n+local navic = require(\"nvim-navic\")\n+local function on_attach(client, bufnr)\n+    if client.server_capabilities.documentSymbolProvider then\n+        navic.attach(client, bufnr)\n+    end\n+end\n+\n+vim.o.winbar = \" %{%v:lua.vim.fn.expand('%F')%}  %{%v:lua.require'nvim-navic'.get_location()%}\"\n```\n\n## GH commit\n\nIf you want to see the change on GitHub, here is the\n[diff](https://github.com/WaylonWalker/devtainer/commit/62298a935d93a2cf21e1c965d323363bcbd22881)\n\n[![nvim-navic-setup-gh-diff.webp](https://dropper.waylonwalker.com/api/file/5efbd396-2716-49d3-833b-3004f1726afe.webp)](https://github.com/WaylonWalker/devtainer/commit/62298a935d93a2cf21e1c965d323363bcbd22881)\n",
      "summary": "With the latest release of version of nvim 0.8.0 we get access to a new winbar feature. One thing I have long wanted somewhere in my nvim is navigation for...",
      "date_published": "2022-10-27T20:13:20Z",
      "date_modified": "2022-10-27T20:13:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/smiteshp-nvim-navic/",
      "url": "https://go.waylonwalker.com/smiteshp-nvim-navic/",
      "title": "⭐ SmiteshP nvim-navic",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/SmiteshP/nvim-navic\" 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\"\u003envim-navic\u003c/a\u003e by \u003ca href=\"https://github.com/SmiteshP\" 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\"\u003eSmiteshP\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eSimple winbar/statusline plugin that shows your current code context\u003c/p\u003e\n",
      "content_text": "\nJust starred [nvim-navic](https://github.com/SmiteshP/nvim-navic) by [SmiteshP](https://github.com/SmiteshP). It's an exciting project with a lot to offer.\n\nSimple winbar/statusline plugin that shows your current code context\n",
      "summary": "Just starred nvim-navic by SmiteshP. It's an exciting project with a lot to offer.",
      "date_published": "2022-10-26T15:56:33Z",
      "date_modified": "2022-10-26T15:56:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fgheng-winbar-nvim/",
      "url": "https://go.waylonwalker.com/fgheng-winbar-nvim/",
      "title": "⭐ fgheng winbar.nvim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/fgheng/winbar.nvim\" 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\"\u003ewinbar.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/fgheng\" 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\"\u003efgheng\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003ewinbar config for neovim\u003c/p\u003e\n",
      "content_text": "\nI came across [winbar.nvim](https://github.com/fgheng/winbar.nvim) from [fgheng](https://github.com/fgheng), and it's packed with great features and ideas.\n\nwinbar config for neovim\n",
      "summary": "I came across winbar.nvim from fgheng, and it's packed with great features and ideas.",
      "date_published": "2022-10-26T15:54:30Z",
      "date_modified": "2022-10-26T15:54:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/petertriho-nvim-scrollbar/",
      "url": "https://go.waylonwalker.com/petertriho-nvim-scrollbar/",
      "title": "⭐ petertriho nvim-scrollbar",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/petertriho/nvim-scrollbar\" 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\"\u003envim-scrollbar\u003c/a\u003e by \u003ca href=\"https://github.com/petertriho\" 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\"\u003epetertriho\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eExtensible Neovim Scrollbar\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [nvim-scrollbar](https://github.com/petertriho/nvim-scrollbar) by [petertriho](https://github.com/petertriho).\n\nExtensible Neovim Scrollbar\n",
      "summary": "Looking for inspiration? nvim-scrollbar by petertriho.",
      "date_published": "2022-10-26T15:53:31Z",
      "date_modified": "2022-10-26T15:53:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kevinhwang91-nvim-hlslens/",
      "url": "https://go.waylonwalker.com/kevinhwang91-nvim-hlslens/",
      "title": "⭐ kevinhwang91 nvim-hlslens",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/kevinhwang91/nvim-hlslens\" 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\"\u003envim-hlslens\u003c/a\u003e by \u003ca href=\"https://github.com/kevinhwang91\" 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\"\u003ekevinhwang91\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eHlsearch Lens for Neovim\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [nvim-hlslens](https://github.com/kevinhwang91/nvim-hlslens) by [kevinhwang91](https://github.com/kevinhwang91).\n\nHlsearch Lens for Neovim\n",
      "summary": "Looking for inspiration? nvim-hlslens by kevinhwang91.",
      "date_published": "2022-10-26T15:53:27Z",
      "date_modified": "2022-10-26T15:53:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pre-commit-pre-commit/",
      "url": "https://go.waylonwalker.com/pre-commit-pre-commit/",
      "title": "⭐ pre-commit pre-commit",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/pre-commit/pre-commit\" 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\"\u003epre-commit\u003c/a\u003e from \u003ca href=\"https://github.com/pre-commit\" 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\"\u003epre-commit\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA framework for managing and maintaining multi-language pre-commit hooks.\u003c/p\u003e\n",
      "content_text": "\nI came across [pre-commit](https://github.com/pre-commit/pre-commit) from [pre-commit](https://github.com/pre-commit), and it's packed with great features and ideas.\n\nA framework for managing and maintaining multi-language pre-commit hooks.\n",
      "summary": "I came across pre-commit from pre-commit, and it's packed with great features and ideas.",
      "date_published": "2022-10-25T11:42:08Z",
      "date_modified": "2022-10-25T11:42:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pipx-textual-devtools/",
      "url": "https://go.waylonwalker.com/pipx-textual-devtools/",
      "title": "pipx textual devtools",
      "content_html": "\u003cp\u003eI really like having global cli command installed with pipx.  Since textual\n\u003ccode\u003e0.2.x\u003c/code\u003e (the css release) is out I want to be able to pop into textual devtools\neasily from anywhere.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000359.2404332231.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000359.2404332231.webp\" alt=\"“rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2404332231\"/ data-glightbox=\"description: “rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2404332231\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"pipx-install\"\u003ePipx Install \u003ca href=\"#pipx-install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can pipx install textual.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install textual\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBut if you try to run any textual cli commands you will run into a\n\u003ccode\u003eModuleNotFoundError\u003c/code\u003e, because you need to install the optional \u003ccode\u003edev\u003c/code\u003e\ndependencies.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTraceback\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emost\u003c/span\u003e \u003cspan class=\"n\"\u003erecent\u003c/span\u003e \u003cspan class=\"n\"\u003ecall\u003c/span\u003e \u003cspan class=\"n\"\u003elast\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/home/u_walkews/.local/bin/textual\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.cli.cli\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003erun\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/home/u_walkews/.local/pipx/venvs/textual/lib/python3.10/site-packages/textual/cli/cli.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eclick\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eModuleNotFoundError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003emodule\u003c/span\u003e \u003cspan class=\"n\"\u003enamed\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;click\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"pipx-inject\"\u003ePipx Inject \u003ca href=\"#pipx-inject\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn order to install optional dependencies with \u003ccode\u003epipx\u003c/code\u003e you need to first install\nthe library, then inject in the optional dependencies using the square bracket\nsyntax.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install textual\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx inject textual \u003cspan class=\"s1\"\u003e\u0026#39;textual[dev]\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI really like having global cli command installed with pipx.  Since textual\n`0.2.x` (the css release) is out I want to be able to pop into textual devtools\neasily from anywhere.\n\n![\"rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S2404332231](https://stable-diffusion.waylonwalker.com/000359.2404332231.webp)\n\n## Pipx Install\n\nYou can pipx install textual.\n\n``` bash\npipx install textual\n```\n\nBut if you try to run any textual cli commands you will run into a\n`ModuleNotFoundError`, because you need to install the optional `dev`\ndependencies.\n\n``` python\nTraceback (most recent call last):\n  File \"/home/u_walkews/.local/bin/textual\", line 5, in \u003cmodule\u003e\n    from textual.cli.cli import run\n  File \"/home/u_walkews/.local/pipx/venvs/textual/lib/python3.10/site-packages/textual/cli/cli.py\", line 4, in \u003cmodule\u003e\n    import click\nModuleNotFoundError: No module named 'click'\n```\n\n## Pipx Inject\n\nIn order to install optional dependencies with `pipx` you need to first install\nthe library, then inject in the optional dependencies using the square bracket\nsyntax.\n\n``` bash\npipx install textual\npipx inject textual 'textual[dev]'\n```\n",
      "summary": "I really like having global cli command installed with pipx. Since textual (the css release) is out I want to be able to pop into textual devtools easily...",
      "date_published": "2022-10-24T08:16:33Z",
      "date_modified": "2022-10-24T08:16:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textual-app-devtools/",
      "url": "https://go.waylonwalker.com/textual-app-devtools/",
      "title": "textual app devtools",
      "content_html": "\u003cp\u003eI am working through the textual tutorial, and I want to put it in a proper cli\nthat I can pip install and run the command without \u003ccode\u003etextual run --dev app.py\u003c/code\u003e.\nThis is a fine pattern, but I also want this to work when I don’t have a file\nto run.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000221.3617210203.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000221.3617210203.webp\" alt=\"“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203\"/ data-glightbox=\"description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"pyprojecttoml-entrypoints\"\u003epyproject.toml entrypoints \u003ca href=\"#pyprojecttoml-entrypoints\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI set up a new project running \u003ccode\u003ehatch new\u003c/code\u003e, and added the following entrypoint,\ngiving me a \u003ccode\u003etutorial\u003c/code\u003e cli command to run.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003escripts\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etutorial\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;textual_tutorial.tui:tui\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://waylonwalker.com/hatch-new-cli/\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\"\u003ehttps://waylonwalker.com/hatch-new-cli/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"setuppy-entrypoints\"\u003esetup.py entrypoints \u003ca href=\"#setuppy-entrypoints\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you are using \u003ccode\u003esetup.py\u003c/code\u003e, you can set up entrypoints in the \u003ccode\u003esetup\u003c/code\u003e command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003esetuptools\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003esetup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eentry_points\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;console_scripts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;tutorial = textual_tutorial.tui:tui\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://waylonwalker.com/minimal-python-package/\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/waylonwalker.com.ico\"\u003ehttps://waylonwalker.com/minimal-python-package/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"tuipy\"\u003etui.py \u003ca href=\"#tuipy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eadding features\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNow to get devtools through a cli without running through \u003ccode\u003etextual run --dev\u003c/code\u003e.\nI pulled open the textual cli source code, and this is what it does at the time\nof writing.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote: I used sys.argv as a way to implement a \u003ccode\u003e--dev\u003c/code\u003e quickly tutorial. For a\nreal project, I’d setup argparse, click, or typer. \u003ccode\u003etyper\u003c/code\u003e is my go to these\ndays, unless I am really trying to limit dependencies, then the standard\nlibrary \u003ccode\u003eargparse\u003c/code\u003e might be what I go with.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etui\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.features\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eparse_features\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esys\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edev\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;--dev\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e \u003cspan class=\"c1\"\u003e# this works, but putting it behind argparse, click, or typer would be much better\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efeatures\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparse_features\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenviron\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;TEXTUAL\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efeatures\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;debug\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efeatures\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;devtools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eenviron\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;TEXTUAL\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejoin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003esorted\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efeatures\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eStopwatchApp\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etui\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"other-flags\"\u003eOther Flags??? \u003ca href=\"#other-flags\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you look at the source, there is one other flag for \u003ccode\u003eheadless\u003c/code\u003e mode.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eFEATURES\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eFinal\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;devtools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;debug\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;headless\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"run-it\"\u003eRun it \u003ca href=\"#run-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere it is running with \u003ccode\u003etutorial --dev\u003c/code\u003e on the left, and \u003ccode\u003etextual console\u003c/code\u003e on\nthe right.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/01c4b236-fc55-4760-814a-d61d141ef1db.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/01c4b236-fc55-4760-814a-d61d141ef1db.webp\" alt=\"textual-tutorial-devtools.webp\"/ data-glightbox=\"description: textual-tutorial-devtools.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI am working through the textual tutorial, and I want to put it in a proper cli\nthat I can pip install and run the command without `textual run --dev app.py`.\nThis is a fine pattern, but I also want this to work when I don't have a file\nto run.\n\n![\"An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art\" -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203](https://stable-diffusion.waylonwalker.com/000221.3617210203.webp)\n\n## pyproject.toml entrypoints\n\nI set up a new project running `hatch new`, and added the following entrypoint,\ngiving me a `tutorial` cli command to run.\n\n```toml\n...\n\n[project.scripts]\ntutorial = 'textual_tutorial.tui:tui'\n```\n\n[https://waylonwalker.com/hatch-new-cli/](https://waylonwalker.com/hatch-new-cli/){.hoverlink}\n\n## setup.py entrypoints\n\nIf you are using `setup.py`, you can set up entrypoints in the `setup` command.\n\n```python\nfrom setuptools import setup\n\nsetup(\n    ...\n    entry_points={\n        \"console_scripts\": [\"tutorial = textual_tutorial.tui:tui\"],\n    },\n    ...\n)\n```\n\n[https://waylonwalker.com/minimal-python-package/](https://waylonwalker.com/minimal-python-package/){.hoverlink}\n\n## tui.py\n\n_adding features_\n\nNow to get devtools through a cli without running through `textual run --dev`.\nI pulled open the textual cli source code, and this is what it does at the time\nof writing.\n\n\u003e Note: I used sys.argv as a way to implement a `--dev` quickly tutorial. For a\n\u003e real project, I'd setup argparse, click, or typer. `typer` is my go to these\n\u003e days, unless I am really trying to limit dependencies, then the standard\n\u003e library `argparse` might be what I go with.\n\n```python\ndef tui():\n\n    from textual.features import parse_features\n    import os\n    import sys\n\n    dev = \"--dev\" in sys.argv # this works, but putting it behind argparse, click, or typer would be much better\n\n    features = set(parse_features(os.environ.get(\"TEXTUAL\", \"\")))\n    if dev:\n        features.add(\"debug\")\n        features.add(\"devtools\")\n\n    os.environ[\"TEXTUAL\"] = \",\".join(sorted(features))\n    app = StopwatchApp()\n    app.run()\n\n\nif __name__ == \"__main__\":\n    tui()\n```\n\n## Other Flags???\n\nIf you look at the source, there is one other flag for `headless` mode.\n\n```python\nFEATURES: Final = {\"devtools\", \"debug\", \"headless\"}\n```\n\n## Run it\n\nHere it is running with `tutorial --dev` on the left, and `textual console` on\nthe right.\n\n![textual-tutorial-devtools.webp](https://dropper.waylonwalker.com/api/file/01c4b236-fc55-4760-814a-d61d141ef1db.webp)\n",
      "summary": "I am working through the textual tutorial, and I want to put it in a proper cli that I can pip install and run the command without . This is a fine pattern,...",
      "date_published": "2022-10-24T07:42:48Z",
      "date_modified": "2022-10-24T07:42:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/github-actions-cache-venv/",
      "url": "https://go.waylonwalker.com/github-actions-cache-venv/",
      "title": "caching python virtual environments in GitHub Actions",
      "date_published": "2022-10-21T15:32:49Z",
      "date_modified": "2022-10-21T15:32:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/anh0ang-kedro-aim/",
      "url": "https://go.waylonwalker.com/anh0ang-kedro-aim/",
      "title": "⭐ AnH0ang kedro-aim",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/AnH0ang\" 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\"\u003eAnH0ang’s\u003c/a\u003e project \u003ca href=\"https://github.com/AnH0ang/kedro-aim\" 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\"\u003ekedro-aim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA kedro plugin that enables logging to the ml experiment tracker aim\u003c/p\u003e\n",
      "content_text": "\nI like [AnH0ang's](https://github.com/AnH0ang) project [kedro-aim](https://github.com/AnH0ang/kedro-aim).\n\nA kedro plugin that enables logging to the ml experiment tracker aim\n",
      "summary": "I like AnH0ang's project kedro-aim.",
      "date_published": "2022-10-20T00:21:06Z",
      "date_modified": "2022-10-20T00:21:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-github-pages/",
      "url": "https://go.waylonwalker.com/markata-github-pages/",
      "title": "Markata GitHub Pages",
      "content_html": "\u003cul\u003e\n\u003cli\u003e11ty \u003ca href=\"https://www.rockyourcode.com/how-to-deploy-eleventy-to-github-pages-with-github-actions/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.rockyourcode.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.rockyourcode.com.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://www.rockyourcode.com/how-to-deploy-eleventy-to-github-pages-with-github-actions/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ehugo puts it in the base url \u003ca href=\"https://gohugo.io/getting-started/configuration/#baseurl\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gohugo.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gohugo.io.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://gohugo.io/getting-started/configuration/#baseurl\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003emkdocs uses a special cli build command \u003ca href=\"https://squidfunk.github.io/mkdocs-material/publishing-your-site/#github-pages\"\u003ehttps://squidfunk.github.io/mkdocs-material/publishing-your-site/#github-pages\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\n\n* 11ty https://www.rockyourcode.com/how-to-deploy-eleventy-to-github-pages-with-github-actions/\n* hugo puts it in the base url https://gohugo.io/getting-started/configuration/#baseurl\n* mkdocs uses a special cli build command https://squidfunk.github.io/mkdocs-material/publishing-your-site/#github-pages\n",
      "summary": "hugo puts it in the base url https://gohugo.io/getting-started/configuration/#baseurl * mkdocs uses a special cli build command...",
      "date_published": "2022-10-19T18:03:31Z",
      "date_modified": "2022-10-19T18:03:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/prismlauncher-prismlauncher/",
      "url": "https://go.waylonwalker.com/prismlauncher-prismlauncher/",
      "title": "⭐ PrismLauncher PrismLauncher",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/PrismLauncher/PrismLauncher\" 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\"\u003ePrismLauncher\u003c/a\u003e by \u003ca href=\"https://github.com/PrismLauncher\" 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\"\u003ePrismLauncher\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC)\u003c/p\u003e\n",
      "content_text": "\nThe work on [PrismLauncher](https://github.com/PrismLauncher/PrismLauncher) by [PrismLauncher](https://github.com/PrismLauncher).\n\nA custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC)\n",
      "summary": "The work on PrismLauncher by PrismLauncher.",
      "date_published": "2022-10-19T03:24:01Z",
      "date_modified": "2022-10-19T03:24:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/widdix-learn-cloudformation/",
      "url": "https://go.waylonwalker.com/widdix-learn-cloudformation/",
      "title": "⭐ widdix learn-cloudformation",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/widdix/learn-cloudformation\" 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\"\u003elearn-cloudformation\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/widdix\" 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\"\u003ewiddix\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eLearn how to use Infrastructure as Code on AWS with the help of CloudFormation.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [learn-cloudformation](https://github.com/widdix/learn-cloudformation), an amazing project by [widdix](https://github.com/widdix). It's worth exploring!\n\nLearn how to use Infrastructure as Code on AWS with the help of CloudFormation.\n",
      "summary": "I'm really excited about learn-cloudformation, an amazing project by widdix. It's worth exploring!",
      "date_published": "2022-10-18T11:46:08Z",
      "date_modified": "2022-10-18T11:46:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/obs-virtual-camera-on-boot/",
      "url": "https://go.waylonwalker.com/obs-virtual-camera-on-boot/",
      "title": "obs virtual camera on boot",
      "content_html": "\u003cp\u003eFor far too long I have had to fidget with v4l2oloopback after reboot.  I’ve\nhad this happen on ubuntu 18.04, 22.04, and arch.\u003c/p\u003e\n\u003cp\u003eAfter a reboot the start virtual camera button won’t work, It appears and is\nclickable, but never turns on.  Until I run this command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo modprobe v4l2loopback \u003cspan class=\"nv\"\u003evideo_nr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"nv\"\u003ecard_label\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;OBS Video Source\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003eexclusive_caps\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000378.373882614.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000378.373882614.webp\" alt=\"“cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614 \"/ data-glightbox=\"description: “cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eToday I learned that you can turn on kernel modules through some files in \u003ccode\u003e/etc/modules...\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is what I did to my arch system to get it to work right after boot.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;v4l2loopback\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo tee /etc/modules-load.d/v4l2loopback.conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;options v4l2loopback video_nr=10 card_label=\\\u0026#34;OBS Video Source\\\u0026#34; exclusive_caps=1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo tee /etc/modprobe.d/v4l2loopback.conf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nFor far too long I have had to fidget with v4l2oloopback after reboot.  I've\nhad this happen on ubuntu 18.04, 22.04, and arch.\n\nAfter a reboot the start virtual camera button won't work, It appears and is\nclickable, but never turns on.  Until I run this command.\n\n``` bash\nsudo modprobe v4l2loopback video_nr=10 card_label=\"OBS Video Source\" exclusive_caps=1\n```\n\n![\"cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614 ](https://stable-diffusion.waylonwalker.com/000378.373882614.webp)\n\nToday I learned that you can turn on kernel modules through some files in `/etc/modules...`\n\nThis is what I did to my arch system to get it to work right after boot.\n\n``` bash\necho \"v4l2loopback\" | sudo tee /etc/modules-load.d/v4l2loopback.conf\necho \"options v4l2loopback video_nr=10 card_label=\\\"OBS Video Source\\\" exclusive_caps=1\" | sudo tee /etc/modprobe.d/v4l2loopback.conf\n```\n",
      "summary": "For far too long I have had to fidget with v4l2oloopback after reboot. I've had this happen on ubuntu 18.04, 22.04, and arch.",
      "date_published": "2022-10-18T08:34:25Z",
      "date_modified": "2022-10-18T08:34:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/running-aws-cli-commands-with-localstack/",
      "url": "https://go.waylonwalker.com/running-aws-cli-commands-with-localstack/",
      "title": "running aws cli commands with localstack",
      "content_html": "\u003cp\u003eUpon first running an \u003ccode\u003eaws\u003c/code\u003e cli command using localstack you might end up with the following error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUnable to locate credentials. You can configure credentials by running \u003cspan class=\"s2\"\u003e\u0026#34;aws configure\u0026#34;\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"easy-way\"\u003eEasy way \u003ca href=\"#easy-way\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe easy easiest way is to leverage a package called \u003ccode\u003eawscli-local\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install awscli-local\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"leveraging-the-awscli\"\u003eLeveraging the awscli \u003ca href=\"#leveraging-the-awscli\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want to use the cli pro\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install awscli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaws config --profile localstack\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# put what you want for the keys, but enter a valid region like us-east-1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003eaws\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;aws --endpoint-url http://localhost:4566 --profile localstack\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nUpon first running an `aws` cli command using localstack you might end up with the following error.\n\n``` bash\nUnable to locate credentials. You can configure credentials by running \"aws configure\".\n```\n\n## Easy way\n\nThe easy easiest way is to leverage a package called `awscli-local`.\n\n``` bash\npipx install awscli-local\n```\n\n## Leveraging the awscli\n\nIf you want to use the cli pro\n\n\n``` bash\npipx install awscli\n\naws config --profile localstack\n# put what you want for the keys, but enter a valid region like us-east-1\n\nalias aws='aws --endpoint-url http://localhost:4566 --profile localstack'\n```\n",
      "summary": "Upon first running an cli command using localstack you might end up with the following error.",
      "date_published": "2022-10-17T14:28:33Z",
      "date_modified": "2022-10-17T14:28:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "aws"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/localstack-status-permission/",
      "url": "https://go.waylonwalker.com/localstack-status-permission/",
      "title": "localstack status permission",
      "content_html": "\u003cp\u003eI ran into an issue where I was unable to ask localstack for its status. I\nwould run the command and it would tell me that it didn’t have permission to\nread files from my own home directory.  Let’s fix it\u003c/p\u003e\n\u003ch2 id=\"the-issue\"\u003eThe issue \u003ca href=\"#the-issue\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI would run this to ask for the status.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elocalstack status\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd get this error\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePermissionError: \u003cspan class=\"o\"\u003e[\u003c/span\u003eErrno 13\u003cspan class=\"o\"\u003e]\u003c/span\u003e Permission denied: \u003cspan class=\"s1\"\u003e\u0026#39;/home/waylon/.cache/localstack/image_metadata\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-happened\"\u003eWhat happened \u003ca href=\"#what-happened\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt dawned on me that the first time I ran localstack was straight docker, not\nthe python cli.  When docker runs it typically runs as root unless the\nDockerfile sets up a user and group for it.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000364.3517264680.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000364.3517264680.webp\" alt=\"“cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S3517264680 \"/ data-glightbox=\"description: “cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S3517264680\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"how-to-fix-it\"\u003eHow to fix it \u003ca href=\"#how-to-fix-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you have sudo access to the machine you are on you can recursively change\nownership to your user and group.  I chose to just give myself ownership of my\nwhole \u003ccode\u003e~/.cache directory\u003c/code\u003e you could choose a deeper directory if you want.  I\nfeel pretty safe giving myself ownership to my own cache directory on my own\nmachine.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewhoami\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# waylon\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echown -R waylon:waylon ~/.cache\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"now-its-working\"\u003eNow it’s working \u003ca href=\"#now-its-working\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRunning localstack status now gives me a nice status message rather than an\nerror.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ localstack status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e┌─────────────────┬───────────────────────────────────────────────────────┐\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ Runtime version │ 1.2.1.dev                                             │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ Docker image    │ tag: latest, id: dbbfe0ce0008, 📆 2022-10-15T00:51:03 │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│ Runtime status  │ ✖ stopped                                             │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└─────────────────┴───────────────────────────────────────────────────────┘\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI ran into an issue where I was unable to ask localstack for its status. I\nwould run the command and it would tell me that it didn't have permission to\nread files from my own home directory.  Let's fix it\n\n## The issue\n\nI would run this to ask for the status.\n\n``` bash\nlocalstack status\n```\n\nAnd get this error\n\n``` bash\nPermissionError: [Errno 13] Permission denied: '/home/waylon/.cache/localstack/image_metadata'\n```\n\n## What happened\n\nIt dawned on me that the first time I ran localstack was straight docker, not\nthe python cli.  When docker runs it typically runs as root unless the\nDockerfile sets up a user and group for it.\n\n![\"cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C12.0 -Ak_lms -S3517264680 ](https://stable-diffusion.waylonwalker.com/000364.3517264680.webp)\n\n## How to fix it\n\nIf you have sudo access to the machine you are on you can recursively change\nownership to your user and group.  I chose to just give myself ownership of my\nwhole `~/.cache directory` you could choose a deeper directory if you want.  I\nfeel pretty safe giving myself ownership to my own cache directory on my own\nmachine.\n\n``` bash\nwhoami\n# waylon\n\nchown -R waylon:waylon ~/.cache\n```\n\n## Now it's working\n\nRunning localstack status now gives me a nice status message rather than an\nerror.\n\n``` bash\n❯ localstack status\n┌─────────────────┬───────────────────────────────────────────────────────┐\n│ Runtime version │ 1.2.1.dev                                             │\n│ Docker image    │ tag: latest, id: dbbfe0ce0008, 📆 2022-10-15T00:51:03 │\n│ Runtime status  │ ✖ stopped                                             │\n└─────────────────┴───────────────────────────────────────────────────────┘\n```\n",
      "summary": "I ran into an issue where I was unable to ask localstack for its status. I would run the command and it would tell me that it didn't have permission to read...",
      "date_published": "2022-10-17T08:55:26Z",
      "date_modified": "2022-10-17T08:55:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "aws"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-supports-jinja-plugins-0-5-0-dev2/",
      "url": "https://go.waylonwalker.com/markata-supports-jinja-plugins-0-5-0-dev2/",
      "title": "Markata Supports Jinja Plugins 0.5.0.dev2",
      "content_html": "\u003cp\u003eMarkata now allows you to create jinja extensions that will be loaded right in\nwith nothing more than a \u003ccode\u003epip install\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"from-the-changelog\"\u003eFrom the Changelog \u003ca href=\"#from-the-changelog\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe entry for 0.5.0.dev2 from markata’s \u003ca href=\"https://markata.dev/changelog/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/markata.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/markata.dev.ico\" class=\"has-avatar  has-avatar-before\"\u003echangelog\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCreated entrypoint hook allowing for users to extend marka with jinja\nexensions #60 0.5.0.dev2\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://stable-diffusion.waylonwalker.com/000368.1808537114.webp\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://stable-diffusion.waylonwalker.com/000368.1808537114.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1808537114\" class=\"more-cinematic glightbox\"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1808537114\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"markata-gh\"\u003emarkata-gh \u003ca href=\"#markata-gh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe first example that you can use right now is \u003ccode\u003emarkata-gh\u003c/code\u003e.  It will render\nrepos by GitHub topic and user using the gh cli, which is available in github\nactions!\u003c/p\u003e\n\u003cp\u003eGet it with a pip install\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install markata-gh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUse it with some jinja in your markdown.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## Markata plugins\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIt uses the logged in uer by default.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% gh_repo_list_topic \u0026#34;markata\u0026#34; %}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eYou can more explicitly grab your username, and a topic.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{% gh_repo_list_topic \u0026#34;waylonwalker\u0026#34;, \u0026#34;personal-website\u0026#34; %}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"how-is-this-achieved\"\u003eHow is this achieved \u003ca href=\"#how-is-this-achieved\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe jinja extension details are for another post, but this is how \u003ccode\u003emarkata-gh\u003c/code\u003e\nexposes itslef as a jinja extension.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eGhRepoListTopic\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eExtension\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etags\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;gh_repo_list_topic\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003esuper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eparse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eline_number\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003enext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estream\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elineno\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eargs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparse_tuple\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eAttributeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"ne\"\u003eAttributeError\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;Invalid Syntax gh_repo_list_topic expects \u0026lt;username\u0026gt;, or \u0026lt;username\u0026gt;,\u0026lt;topic\u0026gt; both must have the comma\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003enodes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCallBlock\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecall_method\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;run\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"p\"\u003e[],\u003c/span\u003e \u003cspan class=\"p\"\u003e[],\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset_lineno\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eline_number\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etopic\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecaller\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;get\u0026#39;s markdown to inject into post\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003erepo_md\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etopic\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003etopic\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000368.2487720618.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000368.2487720618.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2487720618 \"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2487720618\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"entrypoints\"\u003eEntrypoints \u003ca href=\"#entrypoints\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThen \u003ccode\u003emarkata-gh\u003c/code\u003e exposes itself as an extension through entrypoints.\u003c/p\u003e\n\u003ch3 id=\"creating-entrypoints-in-pyprojecttoml\"\u003eCreating entrypoints in pyproject.toml \u003ca href=\"#creating-entrypoints-in-pyprojecttoml\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eIf your project is using \u003ccode\u003epyproject.toml\u003c/code\u003e for packaging you can setup an\nentrypoint as follows.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eentry-points\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;markata.jinja_md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003emarkta_gh\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;markata_gh.repo_list:GhRepoListTopic\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"creating-entrypoints-in-setuppy\"\u003eCreating entrypoints in setup.py \u003ca href=\"#creating-entrypoints-in-setuppy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf your project is using \u003ccode\u003esetup.py\u003c/code\u003e for packaging you can setup an\nentrypoint as follows.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eentry_points\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;markata.jinja_md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;markta_gh\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;markata_gh.repo_list:GhRepoListTopic\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000368.655826089.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000368.655826089.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S655826089\"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S655826089\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nMarkata now allows you to create jinja extensions that will be loaded right in\nwith nothing more than a `pip install`.\n\n## From the Changelog\n\nThe entry for 0.5.0.dev2 from markata's [changelog](https://markata.dev/changelog/)\n\n* Created entrypoint hook allowing for users to extend marka with jinja\n  exensions #60 0.5.0.dev2\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S1808537114](https://stable-diffusion.waylonwalker.com/000368.1808537114.webp){.more-cinematic}\n\n## markata-gh\n\nThe first example that you can use right now is `markata-gh`.  It will render\nrepos by GitHub topic and user using the gh cli, which is available in github\nactions!\n\nGet it with a pip install\n\n``` bash\npip install markata-gh\n```\n\nUse it with some jinja in your markdown.\n\n``` markdown\n## Markata plugins\n\nIt uses the logged in uer by default.\n\n{% gh_repo_list_topic \"markata\" %}\n\nYou can more explicitly grab your username, and a topic.\n{% gh_repo_list_topic \"waylonwalker\", \"personal-website\" %}\n```\n\n## How is this achieved\n\nThe jinja extension details are for another post, but this is how `markata-gh`\nexposes itslef as a jinja extension.\n\n``` python\nclass GhRepoListTopic(Extension):\n    tags = {\"gh_repo_list_topic\"}\n\n    def __init__(self, environment):\n        super().__init__(environment)\n\n    def parse(self, parser):\n        line_number = next(parser.stream).lineno\n        try:\n            args = parser.parse_tuple().items\n        except AttributeError:\n            raise AttributeError(\n                \"Invalid Syntax gh_repo_list_topic expects \u003cusername\u003e, or \u003cusername\u003e,\u003ctopic\u003e both must have the comma\"\n            )\n\n        return nodes.CallBlock(self.call_method(\"run\", args), [], [], \"\").set_lineno(\n            line_number\n        )\n\n    def run(self, username=None, topic=None, caller=None):\n        \"get's markdown to inject into post\"\n        return repo_md(username=username, topic=topic)\n```\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S2487720618 ](https://stable-diffusion.waylonwalker.com/000368.2487720618.webp)\n\n## Entrypoints\n\nThen `markata-gh` exposes itself as an extension through entrypoints.\n\n### Creating entrypoints in pyproject.toml\n\nIf your project is using `pyproject.toml` for packaging you can setup an\nentrypoint as follows.\n\n``` toml\n[project.entry-points.\"markata.jinja_md\"]\nmarkta_gh = \"markata_gh.repo_list:GhRepoListTopic\"\n```\n\n## Creating entrypoints in setup.py\n\nIf your project is using `setup.py` for packaging you can setup an\nentrypoint as follows.\n\n``` python\nsetup(\n    ...\n    entry_points={\n        \"markata.jinja_md\": [\"markta_gh\" = \"markata_gh.repo_list:GhRepoListTopic\"]\n    },\n    ...\n)\n```\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S655826089](https://stable-diffusion.waylonwalker.com/000368.655826089.webp)\n",
      "summary": "Markata now allows you to create jinja extensions that will be loaded right in with nothing more than a .",
      "date_published": "2022-10-11T14:34:35Z",
      "date_modified": "2022-10-11T14:34:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/django-rest-framework-react/",
      "url": "https://go.waylonwalker.com/django-rest-framework-react/",
      "title": "Using Django Rest Framework inside react",
      "content_html": "\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx create-react-app todoreact\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e \u003cspan class=\"nx\"\u003eReact\u003c/span\u003e\u003cspan class=\"p\"\u003e,{\u003c/span\u003e\u003cspan class=\"nx\"\u003euseState\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nx\"\u003euseEffect\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"nx\"\u003efrom\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;react\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;./App.css\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003efunction\u003c/span\u003e \u003cspan class=\"nx\"\u003eApp\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nx\"\u003esetData\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nx\"\u003euseState\u003c/span\u003e\u003cspan class=\"p\"\u003e([]);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003enewName\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nx\"\u003esetNewName\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nx\"\u003euseState\u003c/span\u003e\u003cspan class=\"p\"\u003e([]);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nx\"\u003egetData\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e()=\u0026gt;{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003efetch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;/api\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e,{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nx\"\u003eheaders\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;Content-Type\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;application/json\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;Accept\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;application/json\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ethen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kd\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003eresponse\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nx\"\u003eresponse\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ejson\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ethen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kd\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003emyJson\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003esetData\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003emyJson\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nx\"\u003euseEffect\u003c/span\u003e\u003cspan class=\"p\"\u003e(()=\u0026gt;{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003egetData\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},[])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nx\"\u003eaddItem\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003easync\u003c/span\u003e \u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nx\"\u003erawResponse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e \u003cspan class=\"nx\"\u003efetch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;/api/add/\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nx\"\u003emethod\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;POST\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nx\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;Accept\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;application/json\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;Content-Type\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;application/json\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003ebody\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nx\"\u003eJSON\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003estringify\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nx\"\u003enewName\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nx\"\u003econtent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e \u003cspan class=\"nx\"\u003erawResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003econsole\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003elog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003egetData\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ediv\u003c/span\u003e \u003cspan class=\"nx\"\u003eclassName\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;App\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"nx\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003elength\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"nx\"\u003eitem\u003c/span\u003e\u003cspan class=\"p\"\u003e)=\u0026gt;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nx\"\u003eitem\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e}{\u003c/span\u003e\u003cspan class=\"nx\"\u003eitem\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003epriority\u003c/span\u003e\u003cspan class=\"p\"\u003e}{\u003c/span\u003e\u003cspan class=\"nx\"\u003eitem\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ebutton\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eraise\u003c/span\u003e \u003cspan class=\"nx\"\u003epriority\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e/button\u0026gt;\u0026lt;/p\u0026gt;)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003einput\u003c/span\u003e \u003cspan class=\"nx\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e \u003cspan class=\"nx\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nx\"\u003enewName\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"nx\"\u003eonChange\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{(\u003c/span\u003e\u003cspan class=\"nx\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003esetNewName\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nx\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003etarget\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e))}\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ebutton\u003c/span\u003e \u003cspan class=\"nx\"\u003eonClick\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nx\"\u003eaddItem\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eadd\u003c/span\u003e \u003cspan class=\"nx\"\u003eitem\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e/button\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e/div\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"k\"\u003edefault\u003c/span\u003e \u003cspan class=\"nx\"\u003eApp\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\n``` bash\nnpx create-react-app todoreact\n```\n\n``` javascript\nimport React,{useState,useEffect} from 'react';\nimport './App.css';\n\nfunction App() {\n  const [data,setData]=useState([]);\n  const [newName,setNewName]=useState([]);\n  const getData=()=\u003e{\n    fetch('/api'\n    ,{\n      headers : {\n        'Content-Type': 'application/json',\n        'Accept': 'application/json'\n       }\n    }\n    )\n      .then(function(response){\n        return response.json();\n      })\n      .then(function(myJson) {\n        setData(myJson)\n      });\n  }\n  useEffect(()=\u003e{\n    getData()\n  },[])\n\n  const addItem= async () =\u003e {\n    const rawResponse = await fetch('/api/add/', {\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n\n    body: JSON.stringify({\"name\": newName})\n    });\n    const content = await rawResponse;\n\n    console.log(content);\n    getData()\n  }\n\n\n\n\n  return (\n    \u003cdiv className=\"App\"\u003e\n     {\n       data \u0026\u0026 data.length\u003e0 \u0026\u0026 data.map((item)=\u003e\u003cp\u003e{item.id}{item.priority}{item.name}\u003cbutton\u003eraise priority\u003c/button\u003e\u003c/p\u003e)\n     }\n    \u003cinput type='text' value={newName} onChange={(e) =\u003e (setNewName(e.target.value))} /\u003e\n    \u003cbutton onClick={addItem} \u003eadd item\u003c/button\u003e\n    \u003c/div\u003e\n  );\n}\n\nexport default App;\n```\n",
      "date_published": "2022-10-09T20:56:19Z",
      "date_modified": "2022-10-09T20:56:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "django",
        "react",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/django-rest-framework-getting-started/",
      "url": "https://go.waylonwalker.com/django-rest-framework-getting-started/",
      "title": "Getting Started with Django REST framework",
      "content_html": "\u003cp\u003eIn my adventure to learn django, I want to be able to setup REST api’s to feed\ninto dynamic front end sites. Potentially sites running react under the hood.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000327.4270306418.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000327.4270306418.webp\" alt=\"cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\u0026#34; -s50 -W832 -H416 -C18.0 -Ak_lms -S4270306418\"/ data-glightbox=\"description: cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\u0026#34; -s50 -W832 -H416 -C18.0 -Ak_lms -S4270306418\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"install\"\u003eInstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo get started lets open up a \u003ccode\u003etodo\u003c/code\u003e app that I created with \u003ccode\u003edjango-admin startproject todo\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install djangorestframework\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"install-app\"\u003eInstall APP \u003ca href=\"#install-app\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we need to declare \u003ccode\u003erest_framwork\u003c/code\u003e as an \u003ccode\u003eINSTALLED_APP\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eINSTALLED_APPS\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;rest_framework\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"create-the-api-app\"\u003ecreate the api app \u003ca href=\"#create-the-api-app\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNext I will create all the files that I need to get the api running.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir api\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etouch api/__init__.py api/serializers.py api/urls.py api/views.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000323.3862698977.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000323.3862698977.webp\" alt=\"cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\u0026#34; -s50 -W832 -H416 -C7.5 -Ak_lms -S3862698977\"/ data-glightbox=\"description: cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\u0026#34; -s50 -W832 -H416 -C7.5 -Ak_lms -S3862698977\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"basemodelspy\"\u003ebase/models.py \u003ca href=\"#basemodelspy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI already have the following model from last time I was playing with django. It\nwill suffice as it is not the focus of what I am learning for now.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote the name of the model class is singular, this is becuase django will\nautomatically pluralize it in places like the admin panel, and you would end\nup with Itemss.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003edjango.db\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003emodels\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create your models here.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eItem\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emodels\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emodels\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecreated\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emodels\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDateTimeField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauto_now_add\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__str__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epriority\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNext I will make some dummy data to be able to return. I popped open \u003ccode\u003eipython\u003c/code\u003e\nand made a few records.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ebase.models\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eItem\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eItem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eobjects\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;first\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eItem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eobjects\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;second\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eItem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eobjects\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecreate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;third\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"apiserializerspy\"\u003eapi/serializers.py \u003ca href=\"#apiserializerspy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNext we need to set up a serializer to seriaze and de-serialize data between\nour model and json. You can specify each field individually or all of them by\npassing in \u003ccode\u003e__all__\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erest_framework\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eserializers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ebase.models\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eItem\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eItemSerializer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eserializers\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eModelSerializer\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emodel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eItem\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efields\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;__all__\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"apiviewspy\"\u003eapi/views.py \u003ca href=\"#apiviewspy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000340.2111691103.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000340.2111691103.webp\" alt=\"“cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S2111691103 cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem command \"/ data-glightbox=\"description: “cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S2111691103 cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem command\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eNow we need a view leveraging the \u003ccode\u003edjangorestframework\u003c/code\u003e. The serializer we\njust created will be used to serialize all of the rows into a list of objects\nthat Response can handle.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote: to return a collection of model objects we need to set many to \u003ccode\u003eTrue\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erest_framework.decorators\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eapi_view\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erest_framework.response\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eResponse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ebase.models\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eItem\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003e.serializers\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eItemSerializer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@api_view\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;GET\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_data\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eitems\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eItem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eobjects\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eItemSerializer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eitems\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emany\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@api_view\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;POST\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eadd_item\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eItemSerializer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eis_valid\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esave\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eResponse\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"apiurlspy\"\u003eapi/urls.py \u003ca href=\"#apiurlspy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000341.192089936.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000341.192089936.webp\" alt=\"“cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking at a map, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S192089936 \"/ data-glightbox=\"description: “cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking at a map, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S192089936\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eNow we need to setup routing to access the views through an url.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003edjango.urls\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003epath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003e.\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eviews\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eurlpatterns\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eviews\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_data\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;add/\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eviews\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_item\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"todourlspy\"\u003etodo/urls.py \u003ca href=\"#todourlspy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThen we need to include these urls from our api in the urls specified by \u003ccode\u003esettings.ROOT_URLCONf\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003edjango.urls\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003epath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eurlpatterns\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;api/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einclude\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;api.urls\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"run-it\"\u003eRun it \u003ca href=\"#run-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e \u003cspan class=\"n\"\u003emanage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e \u003cspan class=\"n\"\u003erunserver\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eRunning the developement server and going to \u003ccode\u003elocalhost:8000/api\u003c/code\u003e we can see\nthe full list of items in th api.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/1142afab-b71f-474d-bf5c-27bd2a01309b.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/1142afab-b71f-474d-bf5c-27bd2a01309b.webp\" alt=\"djangorestframework-get-items.webp\"/ data-glightbox=\"description: djangorestframework-get-items.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nIn my adventure to learn django, I want to be able to setup REST api's to feed\ninto dynamic front end sites. Potentially sites running react under the hood.\n\n![cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C18.0 -Ak_lms -S4270306418](https://stable-diffusion.waylonwalker.com/000327.4270306418.webp)\n\n## Install\n\nTo get started lets open up a `todo` app that I created with `django-admin startproject todo`.\n\n```bash\npip install djangorestframework\n```\n\n## Install APP\n\nNow we need to declare `rest_framwork` as an `INSTALLED_APP`.\n\n```bash\nINSTALLED_APPS = [\n    ...\n    \"rest_framework\",\n    ...\n]\n```\n\n## create the api app\n\nNext I will create all the files that I need to get the api running.\n\n```bash\nmkdir api\ntouch api/__init__.py api/serializers.py api/urls.py api/views.py\n```\n\n![cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C7.5 -Ak_lms -S3862698977](https://stable-diffusion.waylonwalker.com/000323.3862698977.webp)\n\n## base/models.py\n\nI already have the following model from last time I was playing with django. It\nwill suffice as it is not the focus of what I am learning for now.\n\n\u003e Note the name of the model class is singular, this is becuase django will\n\u003e automatically pluralize it in places like the admin panel, and you would end\n\u003e up with Itemss.\n\n```python\nfrom django.db import models\n\n# Create your models here.\n\nclass Item(models.Model):\n    name = models.CharField(max_length=200)\n    created = models.DateTimeField(auto_now_add=True)\n\n    def __str__(self):\n        return f\"{self.priority} {self.name}\"\n```\n\nNext I will make some dummy data to be able to return. I popped open `ipython`\nand made a few records.\n\n```python\nfrom base.models import Item\n\nItem.objects.create(name='first')\nItem.objects.create(name='second')\nItem.objects.create(name='third')\n```\n\n## api/serializers.py\n\nNext we need to set up a serializer to seriaze and de-serialize data between\nour model and json. You can specify each field individually or all of them by\npassing in `__all__`.\n\n```python\nfrom rest_framework import serializers\n\nfrom base.models import Item\n\n\nclass ItemSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Item\n        fields = '__all__'\n```\n\n## api/views.py\n\n![\"cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C18.0 -Ak_lms -S2111691103 cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem command ](https://stable-diffusion.waylonwalker.com/000340.2111691103.webp)\n\nNow we need a view leveraging the `djangorestframework`. The serializer we\njust created will be used to serialize all of the rows into a list of objects\nthat Response can handle.\n\n\u003e Note: to return a collection of model objects we need to set many to `True`\n\n```python\nfrom rest_framework.decorators import api_view\nfrom rest_framework.response import Response\n\nfrom base.models import Item\n\nfrom .serializers import ItemSerializer\n\n\n@api_view([\"GET\"])\ndef get_data(request):\n    items = Item.objects.all()\n    serializer = ItemSerializer(items, many=True)\n    return Response(serializer.data)\n\n@api_view(['POST'])\ndef add_item(request):\n    serializer = ItemSerializer(data = request.data)\n    if serializer.is_valid():\n        serializer.save()\n    return Response()\n\n```\n\n## api/urls.py\n\n![\"cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking at a map, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C18.0 -Ak_lms -S192089936 ](https://stable-diffusion.waylonwalker.com/000341.192089936.webp)\n\nNow we need to setup routing to access the views through an url.\n\n```python\nfrom django.urls import path\n\nfrom . import views\n\nurlpatterns = [\n        path('', views.get_data),\n        path('add/', views.add_item),\n        ]\n```\n\n## todo/urls.py\n\nThen we need to include these urls from our api in the urls specified by `settings.ROOT_URLCONf`\n\n```python\nfrom django.urls import path\n\nurlpatterns = [\n    ...\n    path(\"api/\", include(\"api.urls\")),\n]\n```\n\n## Run it\n\n```python\npython manage.py runserver\n```\n\nRunning the developement server and going to `localhost:8000/api` we can see\nthe full list of items in th api.\n\n![djangorestframework-get-items.webp](https://dropper.waylonwalker.com/api/file/1142afab-b71f-474d-bf5c-27bd2a01309b.webp)\n",
      "summary": "In my adventure to learn django, I want to be able to setup REST api's to feed into dynamic front end sites. Potentially sites running react under the hood.",
      "date_published": "2022-10-09T15:57:37Z",
      "date_modified": "2022-10-09T15:57:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "django",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/openai-whisper/",
      "url": "https://go.waylonwalker.com/openai-whisper/",
      "title": "⭐ openai whisper",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/openai\" 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\"\u003eopenai’s\u003c/a\u003e project \u003ca href=\"https://github.com/openai/whisper\" 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\"\u003ewhisper\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRobust Speech Recognition via Large-Scale Weak Supervision\u003c/p\u003e\n",
      "content_text": "\nI like [openai's](https://github.com/openai) project [whisper](https://github.com/openai/whisper).\n\nRobust Speech Recognition via Large-Scale Weak Supervision\n",
      "summary": "I like openai's project whisper.",
      "date_published": "2022-10-08T21:31:00Z",
      "date_modified": "2022-10-08T21:31:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-now-uses-hatch/",
      "url": "https://go.waylonwalker.com/markata-now-uses-hatch/",
      "title": "Markata now uses hatch",
      "content_html": "\u003cp\u003eMarkata now uses hatch as its build backend, and version bumping tool.\n\u003ccode\u003esetup.py\u003c/code\u003e, and \u003ccode\u003esetup.cfg\u003c/code\u003e are completely gone.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://stable-diffusion.waylonwalker.com/000136.4048189038.webp\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://stable-diffusion.waylonwalker.com/000136.4048189038.webp\" alt=\"“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S4048189038\" class=\"more-cinematic glightbox\"/ data-glightbox=\"description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S4048189038\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"050-is-big\"\u003e0.5.0 is big \u003ca href=\"#050-is-big\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMarkata 0.5.0 is now out, and it’s huge.  Even though it’s the backend of this\nblog I don’t actually have that many posts directly about it.  I’ve used it a\nbit for blog fuel in generic ways, like talking about pluggy and diskcache, but\nvery little have I even mentioned it.\u003c/p\u003e\n\u003cp\u003eOver the last month I made a big push to get 0.5.0 out, which adds a whole\nbunch of new configurability to \u003ccode\u003emarkata\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eHere’s the \u003ca href=\"https://markata.dev/changelog/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/markata.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/markata.dev.ico\" class=\"has-avatar  has-avatar-before\"\u003echangelog\u003c/a\u003e entry.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eMoved to PEP 517 build #59 0.5.0.dev1\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"my-personal-simple-cicd\"\u003eMy Personal Simple CI/CD \u003ca href=\"#my-personal-simple-cicd\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBefore cutting all of my personal projects over to hatch.  The first thing I\ndid was to setup a solid github action,\n\u003ca href=\"https://github.com/WaylonWalker/hatch-action\" 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\"\u003ehatch-action\u003c/a\u003ethat I can resue.\u003c/p\u003e\n\u003cp\u003eIt automatically bumps versions, using pre-releases on all branches other than\nmain, with special branches for bumping major, minor, patch, dev, alha, beta,\nand dev.\u003c/p\u003e\n\u003ch2 id=\"hatch-new---init\"\u003ehatch new –init \u003ca href=\"#hatch-new---init\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo convert the project over to hatch, and get rid of setup.py/setup.cfg, I ran\n\u003ccode\u003ehatch new --init\u003c/code\u003e.  This automatically grabs all the metadata for the project\nand makes a \u003ccode\u003epyproject.toml\u003c/code\u003e that has most of what I need.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch new --init\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI then manually moved over my isort config, put flake8 config into \u003ccode\u003e.flake8\u003c/code\u003e,\nand dropped setup.cfg.\u003c/p\u003e\n\u003ch2 id=\"lint-test\"\u003elint-test \u003ca href=\"#lint-test\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePart of my hatch-action is to run a \u003ccode\u003ebefore-command\u003c/code\u003e, for markata, this runs\nall of my linting and testing in one hatch script called \u003ccode\u003elint-test\u003c/code\u003e.  If this\nfails CI will fail and I can read the report in the logs, make a fix and\nre-publish.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eenvs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003escripts\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecov\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=markata --cov=tests\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eno-cov\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cov --no-cov\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elint\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;flake8 markata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;black --check markata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esort-imports\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;isort markata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebuild-docs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;markata build\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elint-test\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;lint\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;format\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;seed-isort-config\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sort-imports\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cov\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etest-lint\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;lint-test\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"typical-branching-workflow\"\u003eTypical branching workflow \u003ca href=\"#typical-branching-workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ewith automatic versioning\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eMy typical workflow is to work on features in their own branch where they do\nnot automatically version or publish, they keep the same version they were\nbranched off of.  Then I do a pr to develop, which will do a \u003ccode\u003eminor,dev\u003c/code\u003e bump\nand publish a pre-relese to pypi.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# starting with version 0.0.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFeature1 -- │\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFeature2 -- ├── dev 0.1.0.dev1,2,3 ── main 0.1.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFeature3 -- │\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI will let several features collect in develop before cutting a full relese\nover to main.  This gives me time to make sure the solution is what makes the\nmost sense, I try to use it in a few projects, and generally its edges show,\nand another pr is warranted to make the feature useful for more use cases.\nAfter running and using these new releases in a few projects, I am confident\nthat its ready and release to main.\u003c/p\u003e\n\u003ch3 id=\"managing-prs\"\u003emanaging prs \u003ca href=\"#managing-prs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eDoing PR’s with gh, probably deserves its own post but here are some helpful\ncommands.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr create --base develop --fill\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr edit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr diff \u003cspan class=\"p\"\u003e|\u003c/span\u003e dunk\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr merge -ds\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"building-and-publishing\"\u003eBuilding and publishing \u003ca href=\"#building-and-publishing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000221.3512493435.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000221.3512493435.webp\" alt=\"“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3512493435\"/ data-glightbox=\"description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3512493435\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003ehatch makes building and publishing pretty straightforward.  It’s one command\ninside my hatch-action to build and one to publish.  On each project that uses\nmy hatch-action I only need to give it a token that I get from PyPi.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eHATCH_INDEX_USER\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e__token__\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eHATCH_INDEX_AUTH\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ secrets.pypi_password }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"full-set-of-changes\"\u003eFull set of changes \u003ca href=\"#full-set-of-changes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want to see all of the details on how markata moved over to hatch, you can check out this diff.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/WaylonWalker/markata/compare/v0.4.0..v0.5.0.dev0\" 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\"\u003ehttps://github.com/WaylonWalker/markata/compare/v0.4.0..v0.5.0.dev0\u003c/a\u003e\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000224.2409791448.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000224.2409791448.webp\" alt=\"“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -U 4.0 0.6 -S2409791448 \"/ data-glightbox=\"description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -U 4.0 0.6 -S2409791448\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nMarkata now uses hatch as its build backend, and version bumping tool.\n`setup.py`, and `setup.cfg` are completely gone.\n\n![\"An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting\" -s50 -W800 -H450 -C7.5 -Ak_lms -S4048189038](https://stable-diffusion.waylonwalker.com/000136.4048189038.webp){.more-cinematic}\n\n## 0.5.0 is big\n\nMarkata 0.5.0 is now out, and it's huge.  Even though it's the backend of this\nblog I don't actually have that many posts directly about it.  I've used it a\nbit for blog fuel in generic ways, like talking about pluggy and diskcache, but\nvery little have I even mentioned it.\n\nOver the last month I made a big push to get 0.5.0 out, which adds a whole\nbunch of new configurability to `markata`.\n\nHere's the [changelog](https://markata.dev/changelog/) entry.\n\n\u003e * Moved to PEP 517 build #59 0.5.0.dev1\n\n## My Personal Simple CI/CD\n\nBefore cutting all of my personal projects over to hatch.  The first thing I\ndid was to setup a solid github action,\n[hatch-action](https://github.com/WaylonWalker/hatch-action)that I can resue.\n\nIt automatically bumps versions, using pre-releases on all branches other than\nmain, with special branches for bumping major, minor, patch, dev, alha, beta,\nand dev.\n\n## hatch new --init\n\nTo convert the project over to hatch, and get rid of setup.py/setup.cfg, I ran\n`hatch new --init`.  This automatically grabs all the metadata for the project\nand makes a `pyproject.toml` that has most of what I need.\n\n``` bash\nhatch new --init\n```\n\nI then manually moved over my isort config, put flake8 config into `.flake8`,\nand dropped setup.cfg.\n\n## lint-test\n\nPart of my hatch-action is to run a `before-command`, for markata, this runs\nall of my linting and testing in one hatch script called `lint-test`.  If this\nfails CI will fail and I can read the report in the logs, make a fix and\nre-publish.\n\n``` toml\n[tool.hatch.envs.default.scripts]\ncov = \"pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=markata --cov=tests\"\nno-cov = \"cov --no-cov\"\nlint = \"flake8 markata\"\nformat = \"black --check markata\"\nsort-imports = \"isort markata\"\nbuild-docs = \"markata build\"\nlint-test = [\n \"lint\",\n \"format\",\n \"seed-isort-config\",\n \"sort-imports\",\n \"cov\",\n]\ntest-lint = \"lint-test\"\n```\n\n## Typical branching workflow\n\n_with automatic versioning_\n\nMy typical workflow is to work on features in their own branch where they do\nnot automatically version or publish, they keep the same version they were\nbranched off of.  Then I do a pr to develop, which will do a `minor,dev` bump\nand publish a pre-relese to pypi.\n\n``` text\n# starting with version 0.0.0\nFeature1 -- │\nFeature2 -- ├── dev 0.1.0.dev1,2,3 ── main 0.1.0\nFeature3 -- │\n```\n\nI will let several features collect in develop before cutting a full relese\nover to main.  This gives me time to make sure the solution is what makes the\nmost sense, I try to use it in a few projects, and generally its edges show,\nand another pr is warranted to make the feature useful for more use cases.\nAfter running and using these new releases in a few projects, I am confident\nthat its ready and release to main.\n\n### managing prs\n\nDoing PR's with gh, probably deserves its own post but here are some helpful\ncommands.\n\n``` bash\ngh pr create --base develop --fill\ngh pr edit\ngh pr diff | dunk\ngh pr merge -ds\n```\n\n## Building and publishing\n\n![\"An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art\" -s50 -W768 -H448 -C7.5 -Ak_lms -S3512493435](https://stable-diffusion.waylonwalker.com/000221.3512493435.webp)\n\nhatch makes building and publishing pretty straightforward.  It's one command\ninside my hatch-action to build and one to publish.  On each project that uses\nmy hatch-action I only need to give it a token that I get from PyPi.\n\n``` yaml\nenv:\n  HATCH_INDEX_USER: __token__\n  HATCH_INDEX_AUTH: ${{ secrets.pypi_password }}\n```\n\n## Full set of changes\n\nIf you want to see all of the details on how markata moved over to hatch, you can check out this diff.\n\n\u003chttps://github.com/WaylonWalker/markata/compare/v0.4.0..v0.5.0.dev0\u003e\n\n![\"An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art\" -s50 -W768 -H448 -C7.5 -Ak_lms -U 4.0 0.6 -S2409791448 ](https://stable-diffusion.waylonwalker.com/000224.2409791448.webp)\n",
      "summary": "Markata now uses hatch as its build backend, and version bumping tool. , and are completely gone.",
      "date_published": "2022-10-08T07:25:10Z",
      "date_modified": "2022-10-08T07:25:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lkwq007-stablediffusion-infinity/",
      "url": "https://go.waylonwalker.com/lkwq007-stablediffusion-infinity/",
      "title": "⭐ lkwq007 stablediffusion-infinity",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/lkwq007\" 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\"\u003elkwq007\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/lkwq007/stablediffusion-infinity\" 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\"\u003establediffusion-infinity\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eOutpainting with Stable Diffusion on an infinite canvas\u003c/p\u003e\n",
      "content_text": "\n[lkwq007](https://github.com/lkwq007) has done a fantastic job with [stablediffusion-infinity](https://github.com/lkwq007/stablediffusion-infinity). Highly recommend taking a look.\n\nOutpainting with Stable Diffusion on an infinite canvas\n",
      "summary": "lkwq007 has done a fantastic job with stablediffusion-infinity. Highly recommend taking a look.",
      "date_published": "2022-10-01T21:03:37Z",
      "date_modified": "2022-10-01T21:03:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/toumorokoshi-deepmerge/",
      "url": "https://go.waylonwalker.com/toumorokoshi-deepmerge/",
      "title": "⭐ toumorokoshi deepmerge",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/toumorokoshi\" 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\"\u003etoumorokoshi\u003c/a\u003e and their project \u003ca href=\"https://github.com/toumorokoshi/deepmerge\" 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\"\u003edeepmerge\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA deep merging tool for Python core data structures\u003c/p\u003e\n",
      "content_text": "\nCheck out [toumorokoshi](https://github.com/toumorokoshi) and their project [deepmerge](https://github.com/toumorokoshi/deepmerge).\n\nA deep merging tool for Python core data structures\n",
      "summary": "Check out toumorokoshi and their project deepmerge.",
      "date_published": "2022-09-27T00:02:23Z",
      "date_modified": "2022-09-27T00:02:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/django-polls-app/",
      "url": "https://go.waylonwalker.com/django-polls-app/",
      "title": "django polls app",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/388f4342-8623-4ac7-9b4b-1d63cd82d2ad.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/388f4342-8623-4ac7-9b4b-1d63cd82d2ad.png\" alt=\"djangopolls-startapp.png\"/ data-glightbox=\"description: djangopolls-startapp.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\n![djangopolls-startapp.png](https://dropper.waylonwalker.com/api/file/388f4342-8623-4ac7-9b4b-1d63cd82d2ad.png)\n",
      "date_published": "2022-09-26T09:17:52Z",
      "date_modified": "2022-09-26T09:17:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "django",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/django-create-superuser/",
      "url": "https://go.waylonwalker.com/django-create-superuser/",
      "title": "django create superuser",
      "content_html": "\u003cp\u003eMy next step into django made me realize that I do not have access to the admin panel, turns out that I need to create a cuper user first.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000368.3309980874.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000368.3309980874.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S3309980874\"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S3309980874\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"run-migrations\"\u003eRun Migrations \u003ca href=\"#run-migrations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRight away when trying to setup the superuser I ran into this issue\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edjango.db.utils.OperationalError: no such table: auth_user\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBack to the \u003ca href=\"https://docs.djangoproject.com/en/1.8/intro/tutorial01/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.djangoproject.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.djangoproject.com.ico\" class=\"has-avatar  has-avatar-before\"\u003etutorial\u003c/a\u003e\ntells me that I need to run migrations to setup some tables for the\n\u003ccode\u003eINSTALLED_APPS\u003c/code\u003e, \u003ccode\u003edjango.contrib.admin\u003c/code\u003e being one of them.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython manage.py migrate\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/c5774ced-b535-42d3-bbdc-8be39da7795e.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/c5774ced-b535-42d3-bbdc-8be39da7795e.png\" alt=\"trydjango-migration.png\"/ data-glightbox=\"description: trydjango-migration.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eyes I am still running remote on from my chromebook.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython manage.py createsuperuser\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/b46c5a29-56d2-413f-bc14-f49353169ea3.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/b46c5a29-56d2-413f-bc14-f49353169ea3.png\" alt=\"trydjango-create-superuser.png\"/ data-glightbox=\"description: trydjango-create-superuser.png\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThe super user has been created.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000368.2018296614.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000368.2018296614.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2018296614\"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2018296614\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"csrf-failure\"\u003eCSRF FAILURE \u003ca href=\"#csrf-failure\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMy next issue trying to run off of a separate domain was a cross site request\nforgery error.\u003c/p\u003e\n\u003cp\u003eSince this is a valid domain that we are hosting the app from we need to tell\nDjango that this is safe.  We can do this again in the \u003ccode\u003esettings.py\u003c/code\u003e, but this\ntime the variable we need is not there out of the box and we need to add it.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eCSRF_TRUSTED_ORIGINS = [\u0026#39;https://localhost.waylonwalker.com\u0026#39;]\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"i-made-it\"\u003eI made it!! \u003ca href=\"#i-made-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAnd we are in, and welcomed for the first time with this django admin panel.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/839b17ce-1850-44d4-a560-014e878934bd.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/839b17ce-1850-44d4-a560-014e878934bd.webp\" alt=\"trydjango-hello.webp\"/ data-glightbox=\"description: trydjango-hello.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"remote-hosting\"\u003eRemote Hosting \u003ca href=\"#remote-hosting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou might find these settings helpful as well if you are trying to run your\nsite on a remote host like aws, digital ocean, linode, or any sort of cloud\nprovidor.  I had it running in my home lab while I was out of the house and\nssh’d in over with a chromebook.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000368.1092166059.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000368.1092166059.webp\" alt=\"“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1092166059\"/ data-glightbox=\"description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1092166059\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nMy next step into django made me realize that I do not have access to the admin panel, turns out that I need to create a cuper user first.\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S3309980874](https://stable-diffusion.waylonwalker.com/000368.3309980874.webp)\n\n## Run Migrations\n\nRight away when trying to setup the superuser I ran into this issue\n\n``` bash\ndjango.db.utils.OperationalError: no such table: auth_user\n```\n\nBack to the [tutorial](https://docs.djangoproject.com/en/1.8/intro/tutorial01/)\ntells me that I need to run migrations to setup some tables for the\n`INSTALLED_APPS`, `django.contrib.admin` being one of them.\n\n``` bash\npython manage.py migrate\n```\n\n![trydjango-migration.png](https://dropper.waylonwalker.com/api/file/c5774ced-b535-42d3-bbdc-8be39da7795e.png)\n\n\u003e yes I am still running remote on from my chromebook.\n\n``` bash\npython manage.py createsuperuser\n```\n\n![trydjango-create-superuser.png](https://dropper.waylonwalker.com/api/file/b46c5a29-56d2-413f-bc14-f49353169ea3.png)\n\nThe super user has been created.\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S2018296614](https://stable-diffusion.waylonwalker.com/000368.2018296614.webp)\n\n## CSRF FAILURE\n\nMy next issue trying to run off of a separate domain was a cross site request\nforgery error.\n\n\nSince this is a valid domain that we are hosting the app from we need to tell\nDjango that this is safe.  We can do this again in the `settings.py`, but this\ntime the variable we need is not there out of the box and we need to add it.\n\n```\nCSRF_TRUSTED_ORIGINS = ['https://localhost.waylonwalker.com']\n```\n\n## I made it!!\n\nAnd we are in, and welcomed for the first time with this django admin panel.\n\n![trydjango-hello.webp](https://dropper.waylonwalker.com/api/file/839b17ce-1850-44d4-a560-014e878934bd.webp)\n\n## Remote Hosting\n\nYou might find these settings helpful as well if you are trying to run your\nsite on a remote host like aws, digital ocean, linode, or any sort of cloud\nprovidor.  I had it running in my home lab while I was out of the house and\nssh'd in over with a chromebook.\n\n![\"cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality\" -s50 -W832 -H416 -C12.0 -Ak_lms -S1092166059](https://stable-diffusion.waylonwalker.com/000368.1092166059.webp)\n",
      "summary": "My next step into django made me realize that I do not have access to the admin panel, turns out that I need to create a cuper user first.",
      "date_published": "2022-09-26T07:14:04Z",
      "date_modified": "2022-09-26T07:14:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "django",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/django-disallowed-host/",
      "url": "https://go.waylonwalker.com/django-disallowed-host/",
      "title": "django disallowed host",
      "content_html": "\u003cp\u003eI am continuing my journey into django, but today I am not at my workstation. I\nam ssh’d in remotely from a chromebook.  I am fully outside of my network, so I\ncan’t access it by localhost, or it’s ip.  I do have cloudflared tunnel\ninstalled and dns setup to a \u003ccode\u003elocalhost.waylonwalker.com\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"settings\"\u003eSettings \u003ca href=\"#settings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI found this in \u003ccode\u003esettings.py\u003c/code\u003e and yolo, it worked first try.  I am in from my\nremote location, and even have auth taken care of thanks to cloudflare.  I am\nreally hoping to learn how to setup my own auth with django as this is one of\nthe things that I could really use in my toolbelt.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eALLOWED_HOSTS\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;localhost.waylonwalker.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000321.3422093952.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000321.3422093952.webp\" alt=\"“cell shaded long shot of a cybernetic blue bald soldier with glowing blue eyes as Borderlands 3 concept art, llustration, post grunge, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C7.5 -Ak_lms -S3422093952 \"/ data-glightbox=\"description: “cell shaded long shot of a cybernetic blue bald soldier with glowing blue eyes as Borderlands 3 concept art, llustration, post grunge, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C7.5 -Ak_lms -S3422093952\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI am continuing my journey into django, but today I am not at my workstation. I\nam ssh'd in remotely from a chromebook.  I am fully outside of my network, so I\ncan't access it by localhost, or it's ip.  I do have cloudflared tunnel\ninstalled and dns setup to a `localhost.waylonwalker.com`.\n\n## Settings\n\nI found this in `settings.py` and yolo, it worked first try.  I am in from my\nremote location, and even have auth taken care of thanks to cloudflare.  I am\nreally hoping to learn how to setup my own auth with django as this is one of\nthe things that I could really use in my toolbelt.\n\n``` python\nALLOWED_HOSTS = ['localhost.waylonwalker.com']\n```\n\n![\"cell shaded long shot of a cybernetic blue bald soldier with glowing blue eyes as Borderlands 3 concept art, llustration, post grunge, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem\" -s50 -W832 -H416 -C7.5 -Ak_lms -S3422093952 ](https://stable-diffusion.waylonwalker.com/000321.3422093952.webp)\n",
      "summary": "I am continuing my journey into django, but today I am not at my workstation. I am ssh'd in remotely from a chromebook. I am fully outside of my network, so...",
      "date_published": "2022-09-26T06:15:24Z",
      "date_modified": "2022-09-26T06:15:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "django",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/trying-out-django/",
      "url": "https://go.waylonwalker.com/trying-out-django/",
      "title": "Trying out django",
      "content_html": "\u003cp\u003eI have no experience in django, and in my exploration to become a better python\ndeveloper I am dipping my toe into one of the most polished and widely used web\nframeworks Django to so that I can better understand it and become a better\npython developer.\u003c/p\u003e\n\u003cp\u003eIf you found this at all helpful make sure you check out the \u003ca href=\"https://docs.djangoproject.com/en/4.1/intro/tutorial01/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.djangoproject.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.djangoproject.com.ico\" class=\"has-avatar  has-avatar-before\"\u003edjango tutorial\u003c/a\u003e\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000243.2250540408.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000243.2250540408.webp\" alt=\"“An atronaut working in a lab, there is a long snake working along side, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S2250540408\"/ data-glightbox=\"description: “An atronaut working in a lab, there is a long snake working along side, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S2250540408\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"install-django\"\u003einstall django \u003ca href=\"#install-django\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe first thing I need to do is render out a template to start the project.\nFor this I need the \u003ccode\u003edjango-admin\u003c/code\u003e cli.  To get this I am going the route of\n\u003ccode\u003epipx\u003c/code\u003e it will be installed globally on my system in it’s own virtual\nenvironment that I don’t have to manage.  This will be useful only for using\nstartproject as far as I know.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install django\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edjango-admin startproject try_django\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e try_django\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/1913211c-81ac-4de4-af49-9a532f0786f7.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/1913211c-81ac-4de4-af49-9a532f0786f7.webp\" alt=\"django-startproject.webp\"/ data-glightbox=\"description: django-startproject.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"make-a-venv\"\u003eMake a venv \u003ca href=\"#make-a-venv\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce I have the project I need a venv for all of django and all of my\ndependencies I might need for the project.  I have really been diggin \u003ccode\u003ehatch\u003c/code\u003e\nlately, and it has a one line \u003cem\u003e“make a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e and manage it for\nme”\u003c/em\u003e command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch shell\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/974809a1-02bd-46c4-acf9-783fd5128b35.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/974809a1-02bd-46c4-acf9-783fd5128b35.webp\" alt=\"trydjango-venv.webp\"/ data-glightbox=\"description: trydjango-venv.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIf hatch is a bit bleeding edge for you, or it has died out by the time you\nread this.  The ol trusty venv will likely stand the test of time, this is what\nI would use for that.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m .venv --prmpt \u003cspan class=\"sb\"\u003e`\u003c/span\u003ebasename \u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e. ./.venv/bin/activate\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"start-the-webserver\"\u003eStart the webserver \u003ca href=\"#start-the-webserver\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNext up we need to start the webserver to start seeing that development\ncontent.  The first thing I did was run it as stated in the tutorial and find\nit clashed with a currently running web server port.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython manage.py runserver\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/ac1397f4-71b9-4617-9438-33cfa2e53c75.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/ac1397f4-71b9-4617-9438-33cfa2e53c75.webp\" alt=\"django-runserver-oops.webp\"/ data-glightbox=\"description: django-runserver-oops.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI jumped over to that tmux session, killed the process and I was up and running.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/828d8e21-00c7-4f02-bd47-e3cebc318adc.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/828d8e21-00c7-4f02-bd47-e3cebc318adc.webp\" alt=\"trydjango-runserver.webp\"/ data-glightbox=\"description: trydjango-runserver.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"whats-running\"\u003eWhat’s running \u003ca href=\"#whats-running\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe default django hello world looks well designed.  You are first presented\nwith this page.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp\" alt=\"trydjango-hello.webp\"/ data-glightbox=\"description: trydjango-hello.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"next\"\u003eNext \u003ca href=\"#next\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI opened up the \u003ccode\u003eurls.py\u003c/code\u003e to discover that the only configured url was at\n\u003ccode\u003e/admin\u003c/code\u003e. I tried to log in as admin, but was unable to as I have not yet\ncreated a superuser.  Next time I play with django that is what I will explore.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000250.526887289.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000250.526887289.webp\" alt=\"An astronaut working in a dimly lit labratory, it is almost black, heavy dark blacks, black space, heavy vingette, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, by Alphonse Mucha, dynamic lighting, digital art\"/ data-glightbox=\"description: An astronaut working in a dimly lit labratory, it is almost black, heavy dark blacks, black space, heavy vingette, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, by Alphonse Mucha, dynamic lighting, digital art\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI have no experience in django, and in my exploration to become a better python\ndeveloper I am dipping my toe into one of the most polished and widely used web\nframeworks Django to so that I can better understand it and become a better\npython developer.\n\nIf you found this at all helpful make sure you check out the [django tutorial](https://docs.djangoproject.com/en/4.1/intro/tutorial01/)\n\n\n![\"An atronaut working in a lab, there is a long snake working along side, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art\" -s50 -W768 -H448 -C7.5 -Ak_lms -S2250540408](https://stable-diffusion.waylonwalker.com/000243.2250540408.webp)\n## install django\n\nThe first thing I need to do is render out a template to start the project.\nFor this I need the `django-admin` cli.  To get this I am going the route of\n`pipx` it will be installed globally on my system in it's own virtual\nenvironment that I don't have to manage.  This will be useful only for using\nstartproject as far as I know.\n\n``` bash\npipx install django\ndjango-admin startproject try_django\ncd try_django\n```\n\n![django-startproject.webp](https://dropper.waylonwalker.com/api/file/1913211c-81ac-4de4-af49-9a532f0786f7.webp)\n\n## Make a venv\n\nOnce I have the project I need a venv for all of django and all of my\ndependencies I might need for the project.  I have really been diggin `hatch`\nlately, and it has a one line _\"make a virtual environment and manage it for\nme\"_ command.\n\n``` bash\nhatch shell\n```\n\n![trydjango-venv.webp](https://dropper.waylonwalker.com/api/file/974809a1-02bd-46c4-acf9-783fd5128b35.webp)\n\nIf hatch is a bit bleeding edge for you, or it has died out by the time you\nread this.  The ol trusty venv will likely stand the test of time, this is what\nI would use for that.\n\n``` bash\npython -m .venv --prmpt `basename $PWD`\n. ./.venv/bin/activate\n```\n\n## Start the webserver\n\nNext up we need to start the webserver to start seeing that development\ncontent.  The first thing I did was run it as stated in the tutorial and find\nit clashed with a currently running web server port.\n\n``` bash\npython manage.py runserver\n```\n\n![django-runserver-oops.webp](https://dropper.waylonwalker.com/api/file/ac1397f4-71b9-4617-9438-33cfa2e53c75.webp)\n\nI jumped over to that tmux session, killed the process and I was up and running.\n\n![trydjango-runserver.webp](https://dropper.waylonwalker.com/api/file/828d8e21-00c7-4f02-bd47-e3cebc318adc.webp)\n\n## What's running\n\nThe default django hello world looks well designed.  You are first presented\nwith this page.\n\n![trydjango-hello.webp](https://dropper.waylonwalker.com/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp)\n\n## Next\n\nI opened up the `urls.py` to discover that the only configured url was at\n`/admin`. I tried to log in as admin, but was unable to as I have not yet\ncreated a superuser.  Next time I play with django that is what I will explore.\n\n![An astronaut working in a dimly lit labratory, it is almost black, heavy dark blacks, black space, heavy vingette, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, by Alphonse Mucha, dynamic lighting, digital art](https://stable-diffusion.waylonwalker.com/000250.526887289.webp)\n",
      "summary": "I have no experience in django, and in my exploration to become a better python developer I am dipping my toe into one of the most polished and widely used...",
      "date_published": "2022-09-25T18:47:54Z",
      "date_modified": "2022-09-25T18:47:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "django",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jinja2-escape/",
      "url": "https://go.waylonwalker.com/jinja2-escape/",
      "title": "how to escape variables in jinja templates",
      "content_html": "\u003cp\u003eWhile updating my site to use Markata’s new configurable head I ran into some\nescaping issues.  Things like single quotes would cause jinja to fail as it was\nclosing quotes that it shouldnt have.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000258.1910330087.webp#cinematic\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000258.1910330087.webp#cinematic\" alt=\"Nuclear core being help up by glowing neon wires, cyberpunk synthwave, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.\"/ data-glightbox=\"description: Nuclear core being help up by glowing neon wires, cyberpunk synthwave, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"jinja-escaping-strings\"\u003eJinja Escaping Strings \u003ca href=\"#jinja-escaping-strings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eJinja comes with a handy utility for escaping strings.  I definitly tried to\nover-complicate this before realizing.  You can just pipe your variables into\n\u003ccode\u003ee\u003c/code\u003e to escape them.  This has worked pretty flawless at solving some jinja\nissues for me.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{{ title|e }}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"creating-meta-tags-in-markata\"\u003eCreating meta tags in Markata \u003ca href=\"#creating-meta-tags-in-markata\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe issue I ran into was when trying to setup meta tags with the new\nconfigurable head, some of my titles have single quotes in them.  This is what\nI put in my \u003ccode\u003emarkata.toml\u003c/code\u003e to create some meta tags.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003emeta\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;og:title\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003econtent\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;{{ title }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUsing my article titles like this ended up causing this syntax error when not\nescaped.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eSyntaxError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003einvalid\u003c/span\u003e \u003cspan class=\"n\"\u003esyntax\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e \u003cspan class=\"n\"\u003ePerhaps\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003eforgot\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ecomma\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eException\u003c/span\u003e \u003cspan class=\"n\"\u003eignored\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efunction\u003c/span\u003e \u003cspan class=\"n\"\u003eForward\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__del__\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"mh\"\u003e0x7fa9807192d0\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTraceback\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emost\u003c/span\u003e \u003cspan class=\"n\"\u003erecent\u003c/span\u003e \u003cspan class=\"n\"\u003ecall\u003c/span\u003e \u003cspan class=\"n\"\u003elast\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eTypeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;NoneType\u0026#39;\u003c/span\u003e \u003cspan class=\"nb\"\u003eobject\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003ecallable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"jinja2-escape\"\u003ejinja2 escape \u003ca href=\"#jinja2-escape\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAfter making a complicated system of using \u003ccode\u003ehtml.escape\u003c/code\u003e I realized that jinja\nincluded escaping out of the box so I updated my \u003ccode\u003emarkata.toml\u003c/code\u003e to include the\nescaping, and it all just worked!.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003emeta\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;og:title\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003econtent\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;{{ title|e }}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000255.3328233410.webp#cinematic\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000255.3328233410.webp#cinematic\" alt=\"Nuclear core being help up by wires, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.\"/ data-glightbox=\"description: Nuclear core being help up by wires, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nWhile updating my site to use Markata's new configurable head I ran into some\nescaping issues.  Things like single quotes would cause jinja to fail as it was\nclosing quotes that it shouldnt have.\n\n![Nuclear core being help up by glowing neon wires, cyberpunk synthwave, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.](https://stable-diffusion.waylonwalker.com/000258.1910330087.webp#cinematic)\n\n## Jinja Escaping Strings\n\nJinja comes with a handy utility for escaping strings.  I definitly tried to\nover-complicate this before realizing.  You can just pipe your variables into\n`e` to escape them.  This has worked pretty flawless at solving some jinja\nissues for me.\n\n``` html\n\u003cp\u003e\n{{ title|e }}\n\u003c/p\u003e\n```\n\n## Creating meta tags in Markata\n\nThe issue I ran into was when trying to setup meta tags with the new\nconfigurable head, some of my titles have single quotes in them.  This is what\nI put in my `markata.toml` to create some meta tags.\n\n``` toml\n[[markata.head.meta]]\nname = \"og:title\"\ncontent = \"{{ title }}\"\n```\n\nUsing my article titles like this ended up causing this syntax error when not\nescaped.\n\n``` python\nSyntaxError: invalid syntax. Perhaps you forgot a comma?\nException ignored in: \u003cfunction Forward.__del__ at 0x7fa9807192d0\u003e\nTraceback (most recent call last):\n    ...\nTypeError: 'NoneType' object is not callable\n```\n\n## jinja2 escape\n\nAfter making a complicated system of using `html.escape` I realized that jinja\nincluded escaping out of the box so I updated my `markata.toml` to include the\nescaping, and it all just worked!.\n\n``` toml\n[[markata.head.meta]]\nname = \"og:title\"\ncontent = \"{{ title|e }}\"\n```\n\n![Nuclear core being help up by wires, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.](https://stable-diffusion.waylonwalker.com/000255.3328233410.webp#cinematic)\n",
      "summary": "While updating my site to use Markata's new configurable head I ran into some escaping issues. Things like single quotes would cause jinja to fail as it was...",
      "date_published": "2022-09-24T15:18:50Z",
      "date_modified": "2022-09-24T15:18:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-hatch-direct-dependencies/",
      "url": "https://go.waylonwalker.com/python-hatch-direct-dependencies/",
      "title": "Python direct dependencies in pyproject.toml",
      "content_html": "\u003cp\u003eHatch allows you to specify direct references for dependencies in your\n\u003ccode\u003epyproject.toml\u003c/code\u003e file. This is useful when you want to depend on a package that\nis not available on PyPI or when you want to use a specific version from a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e\nrepository.  Often used for unreleased packages, or unreleased versions of\npackages.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://hatch.pypa.io/dev/config/dependency/#direct-references\"\u003edocs\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edependencies\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;markata\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;markata-todoui@git+https://github.com/waylonwalker/markata-todoui\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003emetadata\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eallow-direct-references\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nHatch allows you to specify direct references for dependencies in your\n`pyproject.toml` file. This is useful when you want to depend on a package that\nis not available on PyPI or when you want to use a specific version from a Git\nrepository.  Often used for unreleased packages, or unreleased versions of\npackages.\n\n[docs](https://hatch.pypa.io/dev/config/dependency/#direct-references)\n\n``` toml\n[project]\ndependencies = ['markata', 'markata-todoui@git+https://github.com/waylonwalker/markata-todoui']\n\n[tool.hatch.metadata]\nallow-direct-references=true\n```\n",
      "summary": "Hatch allows you to specify direct references for dependencies in your file. This is useful when you want to depend on a package that is not available on...",
      "date_published": "2022-09-22T14:43:06Z",
      "date_modified": "2022-09-22T14:43:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/use-ipython-extensions/",
      "url": "https://go.waylonwalker.com/use-ipython-extensions/",
      "title": "I've made my ipython config too complicated, let's fix it.",
      "content_html": "\u003cp\u003eWhen I am developing python code I often have a repl open alongside of it\nrunning snippets ofcode as I go.  Ipython is my repl of choice, and I hace\ntricked it out the best I can and I really like it.  The problem I recently\ndiscovered is that I have way overcomplicated it.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000221.3407229670.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000221.3407229670.webp\" alt=\"\"/ data-glightbox=\"description: \"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"what-have-i-done\"\u003eWhat Have I done?? \u003ca href=\"#what-have-i-done\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo in the past the way I have setup a few extensions for myself is to add\nsomething like this to my \u003ccode\u003e~/.ipython/profile_default/startup\u003c/code\u003e directory.  It\nsets up some things like rich highlighting or in this example automatic\nimports.  I even went as far as installing some of these in the case I didn’t have them installed.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esubprocess\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eIPython\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_ipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eIPython.core.error\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eUsageError\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eipython\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eget_ipython\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun_line_magic\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;load_ext pyflyby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;inline\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"n\"\u003eUsageError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;installing pyflyby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pip\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;install\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pyflyby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDEVNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estderr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDEVNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewait\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun_line_magic\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;load_ext pyflyby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;inline\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;installing isort\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pip\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;install\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;isort\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDEVNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003estderr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDEVNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000255.43782833.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000255.43782833.webp\" alt=\"A man looking over to a glowing nuclear core with hundreds of wires running from it\"/ data-glightbox=\"description: A man looking over to a glowing nuclear core with hundreds of wires running from it\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"what-i-missed\"\u003eWhat I missed? \u003ca href=\"#what-i-missed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI missed the fact that some of these tools like \u003ccode\u003epyflyby\u003c/code\u003e and \u003ccode\u003erich\u003c/code\u003e already\nhave an ipython extension maintained by the library that just works.  It’s less\ncomplicated and more robust to future changes in the library.  If anything ever\nchanges with these I will not have to worry about which version is installed,\nthe extension will just take care of itself.\u003c/p\u003e\n\u003ch2 id=\"how-to-activate-these\"\u003eHow to activate these. \u003ca href=\"#how-to-activate-these\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe reccomended way is to add them to your\n\u003ccode\u003e~/.ipython/profile_default/ipython_config.py\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eInteractiveShellApp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eextensions\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;rich\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eInteractiveShellApp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eextensions\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;markata\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eInteractiveShellApp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eextensions\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pyflyby\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe issue that I found with this is that you can end up with a sea of errors\nflooding your terminal.  Personally I will know immediately if ipython is\nworking right or not and typically have scriped venv installs so I have\neverything I need, so If I don’t have everything it’s probably for a reason and\nI don’t need an error message lighting up.\u003c/p\u003e\n\u003cp\u003eMy way around this was to test if the module was importable and if it had a\n\u003ccode\u003eload_ipython_extension\u003c/code\u003e attribute before appending it as an extension.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eactivate_extension\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eextension\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emod\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eimportlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimport_module\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eextension\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003egetattr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emod\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;load_ipython_extension\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eInteractiveShellApp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eextensions\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eextension\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eModuleNotFoundError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;extension is not installed\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eAttributeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;extension does not have a \u0026#39;load_ipython_extension\u0026#39; function\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eextensions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;rich\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;markata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pyflyby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eextension\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eextensions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eactivate_extension\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eextension\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"my-change\"\u003eMy Change \u003ca href=\"#my-change\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want to see what I did to my config see \u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/e83b65db8cc292e0de99f1089754e088d8e7e3ef\" 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\"\u003ethis commit\u003c/a\u003e.\u003c/p\u003e\n",
      "content_text": "\nWhen I am developing python code I often have a repl open alongside of it\nrunning snippets ofcode as I go.  Ipython is my repl of choice, and I hace\ntricked it out the best I can and I really like it.  The problem I recently\ndiscovered is that I have way overcomplicated it.\n\n![](https://stable-diffusion.waylonwalker.com/000221.3407229670.webp)\n\n## What Have I done??\n\nSo in the past the way I have setup a few extensions for myself is to add\nsomething like this to my `~/.ipython/profile_default/startup` directory.  It\nsets up some things like rich highlighting or in this example automatic\nimports.  I even went as far as installing some of these in the case I didn't have them installed.\n\n``` python\nimport subprocess\n\nfrom IPython import get_ipython\nfrom IPython.core.error import UsageError\n\nipython = get_ipython()\n\ntry:\n    ipython.run_line_magic(\"load_ext pyflyby\", \"inline\")\nexcept UsageError:\n    print(\"installing pyflyby\")\n    subprocess.Popen(\n        [\"pip\", \"install\", \"pyflyby\"],\n        stdout=subprocess.DEVNULL,\n        stderr=subprocess.DEVNULL,\n    ).wait()\n    ipython.run_line_magic(\"load_ext pyflyby\", \"inline\")\n    print(\"installing isort\")\n    subprocess.Popen(\n        [\"pip\", \"install\", \"isort\"],\n        stdout=subprocess.DEVNULL,\n        stderr=subprocess.DEVNULL,\n    )\n```\n\n![A man looking over to a glowing nuclear core with hundreds of wires running from it](https://stable-diffusion.waylonwalker.com/000255.43782833.webp)\n\n## What I missed?\n\nI missed the fact that some of these tools like `pyflyby` and `rich` already\nhave an ipython extension maintained by the library that just works.  It's less\ncomplicated and more robust to future changes in the library.  If anything ever\nchanges with these I will not have to worry about which version is installed,\nthe extension will just take care of itself.\n\n## How to activate these.\n\nThe reccomended way is to add them to your\n`~/.ipython/profile_default/ipython_config.py`\n\n``` python\nc.InteractiveShellApp.extensions.append('rich')\nc.InteractiveShellApp.extensions.append('markata')\nc.InteractiveShellApp.extensions.append('pyflyby')\n```\n\nThe issue that I found with this is that you can end up with a sea of errors\nflooding your terminal.  Personally I will know immediately if ipython is\nworking right or not and typically have scriped venv installs so I have\neverything I need, so If I don't have everything it's probably for a reason and\nI don't need an error message lighting up.\n\nMy way around this was to test if the module was importable and if it had a\n`load_ipython_extension` attribute before appending it as an extension.\n\n``` python\ndef activate_extension(extension):\n    try:\n        mod = importlib.import_module(extension)\n        getattr(mod, \"load_ipython_extension\")\n        c.InteractiveShellApp.extensions.append(extension)\n    except ModuleNotFoundError:\n        \"extension is not installed\"\n    except AttributeError:\n        \"extension does not have a 'load_ipython_extension' function\"\n\n\nextensions = [\"rich\", \"markata\", \"pyflyby\"]\nfor extension in extensions:\n    activate_extension(extension)\n\n```\n\n## My Change\n\nIf you want to see what I did to my config see [this commit](https://github.com/WaylonWalker/devtainer/commit/e83b65db8cc292e0de99f1089754e088d8e7e3ef).\n",
      "summary": "When I am developing python code I often have a repl open alongside of it running snippets ofcode as I go. Ipython is my repl of choice, and I hace tricked...",
      "date_published": "2022-09-20T15:40:31Z",
      "date_modified": "2022-09-20T15:40:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-stable-diffusion-pype-dev/",
      "url": "https://go.waylonwalker.com/pypeaday-stable-diffusion-pype-dev/",
      "title": "⭐ pypeaday stable-diffusion-pype-dev",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday’s\u003c/a\u003e project \u003ca href=\"https://github.com/pypeaday/stable-diffusion-pype-dev\" 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\"\u003estable-diffusion-pype-dev\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI like [pypeaday's](https://github.com/pypeaday) project [stable-diffusion-pype-dev](https://github.com/pypeaday/stable-diffusion-pype-dev).\n\nNo description available.\n",
      "summary": "I like pypeaday's project stable-diffusion-pype-dev.",
      "date_published": "2022-09-20T01:00:21Z",
      "date_modified": "2022-09-20T01:00:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gradio-app-gradio/",
      "url": "https://go.waylonwalker.com/gradio-app-gradio/",
      "title": "⭐ gradio-app gradio",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/gradio-app\" 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\"\u003egradio-app\u003c/a\u003e and their project \u003ca href=\"https://github.com/gradio-app/gradio\" 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\"\u003egradio\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBuild and share delightful machine learning apps, all in Python. 🌟 Star to support our work!\u003c/p\u003e\n",
      "content_text": "\nCheck out [gradio-app](https://github.com/gradio-app) and their project [gradio](https://github.com/gradio-app/gradio).\n\nBuild and share delightful machine learning apps, all in Python. 🌟 Star to support our work!\n",
      "summary": "Check out gradio-app and their project gradio.",
      "date_published": "2022-09-20T00:43:18Z",
      "date_modified": "2022-09-20T00:43:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/automatic1111-stable-diffusion-webui/",
      "url": "https://go.waylonwalker.com/automatic1111-stable-diffusion-webui/",
      "title": "⭐ AUTOMATIC1111 stable-diffusion-webui",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/AUTOMATIC1111/stable-diffusion-webui\" 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\"\u003estable-diffusion-webui\u003c/a\u003e by \u003ca href=\"https://github.com/AUTOMATIC1111\" 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\"\u003eAUTOMATIC1111\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eStable Diffusion web UI\u003c/p\u003e\n",
      "content_text": "\nJust starred [stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) by [AUTOMATIC1111](https://github.com/AUTOMATIC1111). It's an exciting project with a lot to offer.\n\nStable Diffusion web UI\n",
      "summary": "Just starred stable-diffusion-webui by AUTOMATIC1111. It's an exciting project with a lot to offer.",
      "date_published": "2022-09-19T16:47:11Z",
      "date_modified": "2022-09-19T16:47:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-org-kedro-plugins/",
      "url": "https://go.waylonwalker.com/kedro-org-kedro-plugins/",
      "title": "⭐ kedro-org kedro-plugins",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/kedro-org/kedro-plugins\" 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\"\u003ekedro-plugins\u003c/a\u003e by \u003ca href=\"https://github.com/kedro-org\" 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\"\u003ekedro-org\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eFirst-party plugins maintained by the Kedro team.\u003c/p\u003e\n",
      "content_text": "\n[kedro-plugins](https://github.com/kedro-org/kedro-plugins) by [kedro-org](https://github.com/kedro-org) is a game-changer in its space. Excited to see how it evolves.\n\nFirst-party plugins maintained by the Kedro team.\n",
      "summary": "kedro-plugins by kedro-org is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2022-09-19T16:10:55Z",
      "date_modified": "2022-09-19T16:10:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/modrinth-knossos/",
      "url": "https://go.waylonwalker.com/modrinth-knossos/",
      "title": "⭐ modrinth knossos",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/modrinth/knossos\" 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\"\u003eknossos\u003c/a\u003e, created by \u003ca href=\"https://github.com/modrinth\" 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\"\u003emodrinth\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e[Archived] Former repo of the Modrinth frontend\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [knossos](https://github.com/modrinth/knossos), created by [modrinth](https://github.com/modrinth).\n\n[Archived] Former repo of the Modrinth frontend\n",
      "summary": "If you're into interesting projects, don't miss out on knossos, created by modrinth.",
      "date_published": "2022-09-18T19:16:19Z",
      "date_modified": "2022-09-18T19:16:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/caffeinemc-sodium/",
      "url": "https://go.waylonwalker.com/caffeinemc-sodium/",
      "title": "⭐ CaffeineMC sodium",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/CaffeineMC\" 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\"\u003eCaffeineMC’s\u003c/a\u003e project \u003ca href=\"https://github.com/CaffeineMC/sodium\" 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\"\u003esodium\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Minecraft mod designed to improve frame rates and reduce micro-stutter\u003c/p\u003e\n",
      "content_text": "\nI like [CaffeineMC's](https://github.com/CaffeineMC) project [sodium](https://github.com/CaffeineMC/sodium).\n\nA Minecraft mod designed to improve frame rates and reduce micro-stutter\n",
      "summary": "I like CaffeineMC's project sodium.",
      "date_published": "2022-09-18T12:31:10Z",
      "date_modified": "2022-09-18T12:31:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-markata-todoui/",
      "url": "https://go.waylonwalker.com/waylonwalker-markata-todoui/",
      "title": "⭐ WaylonWalker markata-todoui",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/WaylonWalker/markata-todoui\" 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\"\u003emarkata-todoui\u003c/a\u003e by \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. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA todo plugin for markata.  It is a tui (text user interface) that runs in the terminal using textual.  It gives me a trello-board feel from the terminal.  I can create, update, delete, move, and fully manage my todo items from the terminal with it.\u003c/p\u003e\n",
      "content_text": "\nJust starred [markata-todoui](https://github.com/WaylonWalker/markata-todoui) by [WaylonWalker](https://github.com/WaylonWalker). It's an exciting project with a lot to offer.\n\nA todo plugin for markata.  It is a tui (text user interface) that runs in the terminal using textual.  It gives me a trello-board feel from the terminal.  I can create, update, delete, move, and fully manage my todo items from the terminal with it.\n",
      "summary": "Just starred markata-todoui by WaylonWalker. It's an exciting project with a lot to offer.",
      "date_published": "2022-09-17T21:04:30Z",
      "date_modified": "2022-09-17T21:04:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/giscus-giscus/",
      "url": "https://go.waylonwalker.com/giscus-giscus/",
      "title": "⭐ giscus giscus",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/giscus\" 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\"\u003egiscus\u003c/a\u003e and their project \u003ca href=\"https://github.com/giscus/giscus\" 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\"\u003egiscus\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA comment system powered by GitHub Discussions. :octocat: 💬 💎\u003c/p\u003e\n",
      "content_text": "\nCheck out [giscus](https://github.com/giscus) and their project [giscus](https://github.com/giscus/giscus).\n\nA comment system powered by GitHub Discussions. :octocat: :speech_balloon: :gem:\n",
      "summary": "Check out giscus and their project giscus.",
      "date_published": "2022-09-17T12:35:36Z",
      "date_modified": "2022-09-17T12:35:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hrsh7th-cmp-nvim-lsp-signature-help/",
      "url": "https://go.waylonwalker.com/hrsh7th-cmp-nvim-lsp-signature-help/",
      "title": "⭐ hrsh7th cmp-nvim-lsp-signature-help",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/hrsh7th/cmp-nvim-lsp-signature-help\" 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\"\u003ecmp-nvim-lsp-signature-help\u003c/a\u003e by \u003ca href=\"https://github.com/hrsh7th\" 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\"\u003ehrsh7th\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ecmp-nvim-lsp-signature-help\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [cmp-nvim-lsp-signature-help](https://github.com/hrsh7th/cmp-nvim-lsp-signature-help) by [hrsh7th](https://github.com/hrsh7th), and it's truly impressive.\n\ncmp-nvim-lsp-signature-help\n",
      "summary": "I recently discovered cmp-nvim-lsp-signature-help by hrsh7th, and it's truly impressive.",
      "date_published": "2022-09-13T01:24:52Z",
      "date_modified": "2022-09-13T01:24:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-configure-head/",
      "url": "https://go.waylonwalker.com/markata-configure-head/",
      "title": "markata extend \u003chead\u003e in configuration",
      "content_html": "\u003cp\u003e\u003ca href=\"https://stable-diffusion.waylonwalker.com/000172.2339173599.webp\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://stable-diffusion.waylonwalker.com/000172.2339173599.webp\" alt=\"Astronauts stunting some stylish color explosion\" class=\"more-cinematic glightbox\"/ data-glightbox=\"description: Astronauts stunting some stylish color explosion\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eA long needed feature of markata has been the ability to really configure out\ntemplates with configuration rather.  It’s been long that you needed that if\nyou really want to change the style, meta tags, or anything in the head you\nneeded to write a plugin or eject out of the template and use your own.\u003c/p\u003e\n\u003ch2 id=\"adding-some-head\"\u003eAdding some Head \u003ca href=\"#adding-some-head\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow you can add some extra style to your site with the existing built-in\ntemplate.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etext\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026lt;style\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eimg {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  width: 100%;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  height: auto;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eul {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  display: flex;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  flex-wrap: wrap;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026lt;/style\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"you-can-have-more-than-one-head\"\u003eYou can have more than one Head \u003ca href=\"#you-can-have-more-than-one-head\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEach text entry in \u003ccode\u003emarkata.head\u003c/code\u003e just gets appended raw into the head.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etext\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026lt;style\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eimg {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  width: 100%;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  height: auto;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eul {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  display: flex;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e  flex-wrap: wrap;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026lt;/style\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etext\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026lt;script\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003econsole.log(\u0026#39;hey there\u0026#39;)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026lt;/script\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"still-need-more\"\u003eStill need more? \u003ca href=\"#still-need-more\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf this does not take you far enough yet, you can still eject out and use your\nown template pretty easy.  If you are going for a full custom site it’s likely\nthat this will be the workflow for awhile.  Markata should only get better and\nmake this required less often as it matures.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epost_template\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pages/templates/post_template.html\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce you have this in your \u003ccode\u003emarkata.toml\u003c/code\u003e you can put whatever you want in your\nown template.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000172.2678273305.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000172.2678273305.webp\" alt=\"“An astronaut working in a lab, colorful explosion, powder, particles, smoke, 35mm, bokeh, fog, f1.2, shallow depth of field, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2678273305\"/ data-glightbox=\"description: “An astronaut working in a lab, colorful explosion, powder, particles, smoke, 35mm, bokeh, fog, f1.2, shallow depth of field, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2678273305\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\n![Astronauts stunting some stylish color explosion](https://stable-diffusion.waylonwalker.com/000172.2339173599.webp){.more-cinematic}\n\nA long needed feature of markata has been the ability to really configure out\ntemplates with configuration rather.  It's been long that you needed that if\nyou really want to change the style, meta tags, or anything in the head you\nneeded to write a plugin or eject out of the template and use your own.\n\n## Adding some Head\n\nNow you can add some extra style to your site with the existing built-in\ntemplate.\n\n``` toml\n[[markata.head]]\ntext = \"\"\"\n\u003cstyle\u003e\nimg {\n  width: 100%;\n  height: auto;\n}\nul {\n  display: flex;\n  flex-wrap: wrap;\n}\n\u003c/style\u003e\n\"\"\"\n```\n\n## You can have more than one Head\n\nEach text entry in `markata.head` just gets appended raw into the head.\n\n``` toml\n[[markata.head]]\ntext = \"\"\"\n\u003cstyle\u003e\nimg {\n  width: 100%;\n  height: auto;\n}\nul {\n  display: flex;\n  flex-wrap: wrap;\n}\n\u003c/style\u003e\n\"\"\"\n\n[[markata.head]]\ntext = \"\"\"\n\u003cscript\u003e\nconsole.log('hey there')\n\u003c/script\n\"\"\"\n```\n\n## Still need more?\n\nIf this does not take you far enough yet, you can still eject out and use your\nown template pretty easy.  If you are going for a full custom site it's likely\nthat this will be the workflow for awhile.  Markata should only get better and\nmake this required less often as it matures.\n\n``` toml\n[markata]\npost_template = \"pages/templates/post_template.html\"\n```\n\nOnce you have this in your `markata.toml` you can put whatever you want in your\nown template.\n\n![\"An astronaut working in a lab, colorful explosion, powder, particles, smoke, 35mm, bokeh, fog, f1.2, shallow depth of field, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting\" -s50 -W800 -H450 -C7.5 -Ak_lms -S2678273305](https://stable-diffusion.waylonwalker.com/000172.2678273305.webp)\n",
      "date_published": "2022-09-11T20:25:45Z",
      "date_modified": "2022-09-11T20:25:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nateraw-stable-diffusion-videos/",
      "url": "https://go.waylonwalker.com/nateraw-stable-diffusion-videos/",
      "title": "⭐ nateraw stable-diffusion-videos",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/nateraw/stable-diffusion-videos\" 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\"\u003estable-diffusion-videos\u003c/a\u003e by \u003ca href=\"https://github.com/nateraw\" 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\"\u003enateraw\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eCreate 🔥 videos with Stable Diffusion by exploring the latent space and morphing between text prompts\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [stable-diffusion-videos](https://github.com/nateraw/stable-diffusion-videos) by [nateraw](https://github.com/nateraw), and it's truly impressive.\n\nCreate 🔥 videos with Stable Diffusion by exploring the latent space and morphing between text prompts\n",
      "summary": "I recently discovered stable-diffusion-videos by nateraw, and it's truly impressive.",
      "date_published": "2022-09-09T21:04:40Z",
      "date_modified": "2022-09-09T21:04:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gitleaks-gitleaks/",
      "url": "https://go.waylonwalker.com/gitleaks-gitleaks/",
      "title": "⭐ gitleaks gitleaks",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/gitleaks/gitleaks\" 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\"\u003egitleaks\u003c/a\u003e by \u003ca href=\"https://github.com/gitleaks\" 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\"\u003egitleaks\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eFind secrets with Gitleaks 🔑\u003c/p\u003e\n",
      "content_text": "\n[gitleaks](https://github.com/gitleaks/gitleaks) by [gitleaks](https://github.com/gitleaks) is a game-changer in its space. Excited to see how it evolves.\n\nFind secrets with Gitleaks 🔑\n",
      "summary": "gitleaks by gitleaks is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2022-09-07T21:57:53Z",
      "date_modified": "2022-09-07T21:57:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/abdur-rahmaanj-termcharts/",
      "url": "https://go.waylonwalker.com/abdur-rahmaanj-termcharts/",
      "title": "⭐ Abdur-rahmaanJ termcharts",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Abdur-rahmaanJ/termcharts\" 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\"\u003etermcharts\u003c/a\u003e, created by \u003ca href=\"https://github.com/Abdur-rahmaanJ\" 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\"\u003eAbdur-rahmaanJ\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTerminal charts\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [termcharts](https://github.com/Abdur-rahmaanJ/termcharts), created by [Abdur-rahmaanJ](https://github.com/Abdur-rahmaanJ).\n\nTerminal charts\n",
      "summary": "If you're into interesting projects, don't miss out on termcharts, created by Abdur-rahmaanJ.",
      "date_published": "2022-09-07T17:30:51Z",
      "date_modified": "2022-09-07T17:30:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-markata-slides/",
      "url": "https://go.waylonwalker.com/waylonwalker-markata-slides/",
      "title": "⭐ WaylonWalker markata-slides",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/WaylonWalker/markata-slides\" 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\"\u003emarkata-slides\u003c/a\u003e by \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/p\u003e\n\u003cp\u003eA slides plugin for markata that allows you to create presentations in markdown from the comfort of your favorite editor.  Each new h2 tag (## in markdown) becomes a new slide.  This plugin leverages the built-in feeds plugin for navigation, and adds in some hotkeys (j/k) to go the the previous and next slides.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [markata-slides](https://github.com/WaylonWalker/markata-slides) by [WaylonWalker](https://github.com/WaylonWalker).\n\nA slides plugin for markata that allows you to create presentations in markdown from the comfort of your favorite editor.  Each new h2 tag (## in markdown) becomes a new slide.  This plugin leverages the built-in feeds plugin for navigation, and adds in some hotkeys (j/k) to go the the previous and next slides.\n",
      "summary": "Looking for inspiration? markata-slides by WaylonWalker.",
      "date_published": "2022-09-06T13:11:56Z",
      "date_modified": "2022-09-06T13:11:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-small-group-notes/",
      "url": "https://go.waylonwalker.com/pypeaday-small-group-notes/",
      "title": "⭐ pypeaday small-group-notes",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/pypeaday/small-group-notes\" 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\"\u003esmall-group-notes\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eLanding zone for small group notes - plan is to make this a nicer website for all things small group related\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [small-group-notes](https://github.com/pypeaday/small-group-notes), an amazing project by [pypeaday](https://github.com/pypeaday). It's worth exploring!\n\nLanding zone for small group notes - plan is to make this a nicer website for all things small group related\n",
      "summary": "I'm really excited about small-group-notes, an amazing project by pypeaday. It's worth exploring!",
      "date_published": "2022-09-06T13:11:50Z",
      "date_modified": "2022-09-06T13:11:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mr-destructive-techstructive-blog/",
      "url": "https://go.waylonwalker.com/mr-destructive-techstructive-blog/",
      "title": "⭐ Mr-Destructive techstructive-blog",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/Mr-Destructive/techstructive-blog\" 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\"\u003etechstructive-blog\u003c/a\u003e by \u003ca href=\"https://github.com/Mr-Destructive\" 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\"\u003eMr-Destructive\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBlogging Platform powered by Django.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [techstructive-blog](https://github.com/Mr-Destructive/techstructive-blog) by [Mr-Destructive](https://github.com/Mr-Destructive).\n\nBlogging Platform powered by Django.\n",
      "summary": "Looking for inspiration? techstructive-blog by Mr-Destructive.",
      "date_published": "2022-09-06T13:11:05Z",
      "date_modified": "2022-09-06T13:11:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mr-destructive-meetgor-com/",
      "url": "https://go.waylonwalker.com/mr-destructive-meetgor-com/",
      "title": "⭐ Mr-Destructive meetgor.com",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/Mr-Destructive/meetgor.com\" 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\"\u003emeetgor.com\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/Mr-Destructive\" 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\"\u003eMr-Destructive\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eMy Personal Blog and Portfolio made with Markata SSG and Python\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [meetgor.com](https://github.com/Mr-Destructive/meetgor.com), an amazing project by [Mr-Destructive](https://github.com/Mr-Destructive). It's worth exploring!\n\nMy Personal Blog and Portfolio made with Markata SSG and Python\n",
      "summary": "I'm really excited about meetgor.com, an amazing project by Mr-Destructive. It's worth exploring!",
      "date_published": "2022-09-06T13:10:55Z",
      "date_modified": "2022-09-06T13:10:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sponsfreixes-jinja2-fragments/",
      "url": "https://go.waylonwalker.com/sponsfreixes-jinja2-fragments/",
      "title": "⭐ sponsfreixes jinja2-fragments",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/sponsfreixes/jinja2-fragments\" 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\"\u003ejinja2-fragments\u003c/a\u003e by \u003ca href=\"https://github.com/sponsfreixes\" 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\"\u003esponsfreixes\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRender Jinja2 template block as \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 page fragments on Python web frameworks.\u003c/p\u003e\n",
      "content_text": "\nThe work on [jinja2-fragments](https://github.com/sponsfreixes/jinja2-fragments) by [sponsfreixes](https://github.com/sponsfreixes).\n\nRender Jinja2 template block as HTML page fragments on Python web frameworks.\n",
      "summary": "The work on jinja2-fragments by sponsfreixes.",
      "date_published": "2022-09-06T12:53:14Z",
      "date_modified": "2022-09-06T12:53:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ansible-ansible-language-server/",
      "url": "https://go.waylonwalker.com/ansible-ansible-language-server/",
      "title": "⭐ ansible ansible-language-server",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/ansible/ansible-language-server\" 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\"\u003eansible-language-server\u003c/a\u003e by \u003ca href=\"https://github.com/ansible\" 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\"\u003eansible\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🚧 Ansible Language Server codebase is now included in vscode-ansible repository\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [ansible-language-server](https://github.com/ansible/ansible-language-server) by [ansible](https://github.com/ansible).\n\n🚧 Ansible Language Server codebase is now included in vscode-ansible repository\n",
      "summary": "Looking for inspiration? ansible-language-server by ansible.",
      "date_published": "2022-09-03T14:16:25Z",
      "date_modified": "2022-09-03T14:16:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hatch-new-cli/",
      "url": "https://go.waylonwalker.com/hatch-new-cli/",
      "title": "Create a new Python Project with the Hatch Cli",
      "content_html": "\u003cp\u003eI’m really getting into using hatch as my go to build system, and I am really\nliking it so far.  I am slowly finding new  things that just work really well.\n\u003ccode\u003ehatch new\u003c/code\u003e is one of those things that I didn’t realize I needed until I had\nit.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/hatch-new.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/hatch-new.png\" alt=\"Hatch new cover image\"/ data-glightbox=\"description: Hatch new cover image\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003ecreating new versions created by myself with stable diffusion\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/765d9f0c-c73a-44e5-8f0a-0027dff67abe.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/765d9f0c-c73a-44e5-8f0a-0027dff67abe.webp\" alt=\"hatch-new-cli.webp\"/ data-glightbox=\"description: hatch-new-cli.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cpre\u003e\u003ccode\u003e❯ pipx run hatch new --help\nUsage: hatch new [OPTIONS] [NAME] [LOCATION]\n\n  Create or initialize a project.\n\nOptions:\n  -i, --interactive  Interactively choose details about the project\n  --cli              Give the project a command line interface\n  --init             Initialize an existing project\n  -h, --help         Show this message and exit.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote! I am running all of these commands with pipx. I like to use pipx for\nall of my system level cli applications.  To emphasis this point in the\narticle I am going to use \u003ccode\u003epipx run hatch\u003c/code\u003e, but you can \u003ccode\u003epipx install hatch\u003c/code\u003e\nthen just run \u003ccode\u003ehatch\u003c/code\u003e from there.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"interacively-create-a-new-project\"\u003eInteracively create a new project \u003ca href=\"#interacively-create-a-new-project\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRunning \u003ccode\u003ehatch new -i\u003c/code\u003e will ask let you interactivly choose details about the\nproject, such as the project’s name.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epipx run hatch new -i\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eAfter running and naming the project \u003cstrong\u003eHatch New\u003c/strong\u003e we end up with the following\nfiletree.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── hatch_new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── __about__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── LICENSE.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── pyproject.toml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── tests\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"non-interative\"\u003eNon-Interative \u003ca href=\"#non-interative\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can also fill in the project name ahead of time, and it will run without\nany questions.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/7d902784-e69e-4990-a711-22365665594c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/7d902784-e69e-4990-a711-22365665594c.webp\" alt=\"hatch-new-another-project.webp\"/ data-glightbox=\"description: hatch-new-another-project.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ pipx run hatch new \u003cspan class=\"s2\"\u003e\u0026#34;Another Project\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eanother-project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── another_project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── __about__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── tests\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── LICENSE.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── pyproject.toml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote! all of these examples will create a project directory within your\ncurrent working directory.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000146.324995023.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000146.324995023.webp\" alt=\"“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C10.0 -Ak_lms -S324995023\"/ data-glightbox=\"description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C10.0 -Ak_lms -S324995023\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"--init\"\u003e–init \u003ca href=\"#--init\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eexisting project\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehatch new\u003c/code\u003e has an \u003ccode\u003e--init\u003c/code\u003e flag in order to initialize a new hatch\npyproject.toml in an existing project.  This feels like it would be useful if\nyou are converting a project to hatch, or if like me you sometimes start making\nsomething before you realize it’s something that you want to package.  Honestly\nthis doesn’t happen too much anymore I package most things, and I hope \u003ccode\u003ehatch new\u003c/code\u003e completely breaks this habbit of mine.\u003c/p\u003e\n\u003cp\u003eLet’s say I have the following existing project.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── hatch_init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e directory, \u003cspan class=\"m\"\u003e1\u003c/span\u003e file\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI can setup packaging with hatch by running.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx run hatch new --init\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/8e43edca-57d9-4bbf-9ca8-c6d026356be3.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/8e43edca-57d9-4bbf-9ca8-c6d026356be3.webp\" alt=\"hatch-init-existing.webp\"/ data-glightbox=\"description: hatch-init-existing.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThe \u003ccode\u003epyproject.toml\u003c/code\u003e that comes out is pretty similar to the one that comes out\nof the normal \u003ccode\u003ehatch new\u003c/code\u003e, but without any other files.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNote that you will need to setup a \u003ccode\u003e__about__.py\u003c/code\u003e yourself for the dynamic\nversioning that it has setup for you.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003ebuild-system\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003erequires\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hatchling\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebuild-backend\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;hatchling.build\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;hatch-init\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edescription\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;initialize an existing project using hatch\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ereadme\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;README.md\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003erequires-python\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026gt;=3.7\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elicense\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;MIT\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ekeywords\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eauthors\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Waylon S. Walker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003eemail\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;waylon@waylonwalker.com\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eclassifiers\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Development Status :: 4 - Beta\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: 3.7\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: 3.8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: 3.9\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: 3.10\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: 3.11\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: Implementation :: CPython\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;Programming Language :: Python :: Implementation :: PyPy\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edependencies\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edynamic\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eurls\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eDocumentation\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/unknown/hatch-init#readme\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eIssues\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/unknown/hatch-init/issues\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eSource\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/unknown/hatch-init\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;hatch_init/__about__.py\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eenvs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edependencies\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;pytest\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;pytest-cov\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eenvs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003escripts\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecov\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=hatch_init --cov=tests\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eno-cov\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cov --no-cov\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eenvs\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003etest\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ematrix\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epython\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;37\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;38\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;39\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;310\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;311\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecoverage\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebranch\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eparallel\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eomit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;hatch_init/__about__.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecoverage\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ereport\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eexclude_lines\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;no cov\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;if __name__ == .__main__.:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;if TYPE_CHECKING:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"cli\"\u003ecli \u003ca href=\"#cli\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehatch new\u003c/code\u003e does not stop there, it also has a \u003ccode\u003e--cli\u003c/code\u003e flag to give you a cli\nout of the box as well.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ pipx run hatch new \u003cspan class=\"s2\"\u003e\u0026#34;new cli\u0026#34;\u003c/span\u003e --cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enew-cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── new_cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   │   └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── __about__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── __main__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── tests\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── LICENSE.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── pyproject.toml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWhen you use the \u003ccode\u003e--cli\u003c/code\u003e flag you also get \u003ccode\u003eclick\u003c/code\u003e as a dependency and\n\u003ccode\u003eproject.scripts\u003c/code\u003e setup automatically.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e[project]\nname = \u0026#34;new-cli\u0026#34;\n\n# ...\n\ndependencies = [\n  \u0026#34;click\u0026#34;,\n]\n\n# ...\n\n[project.scripts]\nnew-cli = \u0026#34;new_cli.cli:new_cli\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ca href=\"https://stable-diffusion.waylonwalker.com/000130.98801549.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000130.98801549.webp\" alt=\"“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation” -s50 -W800 -H450 -C7.5 -Ak_lms -S98801549\n\"/ data-glightbox=\"description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation” -s50 -W800 -H450 -C7.5 -Ak_lms -S98801549\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"whats-in-the-cli\"\u003ewhat’s in the cli \u003ca href=\"#whats-in-the-cli\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt’s a hello-world click application.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# SPDX-FileCopyrightText: 2022-present Waylon S. Walker \u0026lt;waylon@waylonwalker.com\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# SPDX-License-Identifier: MIT\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eclick\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003e..__about__\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003e__version__\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@click.group\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econtext_settings\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;help_option_names\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;-h\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;--help\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]},\u003c/span\u003e \u003cspan class=\"n\"\u003einvoke_without_command\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@click.version_option\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003e__version__\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprog_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;new cli\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@click.pass_context\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003enew_cli\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ectx\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eclick\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eContext\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eclick\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eecho\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Hello world!\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"sneak-peek\"\u003esneak peek \u003ca href=\"#sneak-peek\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ll dive more into environments and the run command later, but we can run the\ncli pretty damn quick with two commands. In under 5s I was able to run this cli\nthat it created.  This is a pretty incredible startup time.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/608b7c9c-3cff-4659-87d4-6e5618f6dbcb.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/608b7c9c-3cff-4659-87d4-6e5618f6dbcb.webp\" alt=\"pipx-run-hatch-hello-world.webp\"/ data-glightbox=\"description: pipx-run-hatch-hello-world.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000136.2274808816.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000136.2274808816.webp\" alt=\"“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2274808816\"/ data-glightbox=\"description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2274808816\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI'm really getting into using hatch as my go to build system, and I am really\nliking it so far.  I am slowly finding new  things that just work really well.\n`hatch new` is one of those things that I didn't realize I needed until I had\nit.\n\n\n![Hatch new cover image](https://images.waylonwalker.com/hatch-new.png)\n\n\u003e creating new versions created by myself with stable diffusion\n\n![hatch-new-cli.webp](https://dropper.waylonwalker.com/api/file/765d9f0c-c73a-44e5-8f0a-0027dff67abe.webp)\n\n```\n❯ pipx run hatch new --help\nUsage: hatch new [OPTIONS] [NAME] [LOCATION]\n\n  Create or initialize a project.\n\nOptions:\n  -i, --interactive  Interactively choose details about the project\n  --cli              Give the project a command line interface\n  --init             Initialize an existing project\n  -h, --help         Show this message and exit.\n```\n\n\u003e Note! I am running all of these commands with pipx. I like to use pipx for\n\u003e all of my system level cli applications.  To emphasis this point in the\n\u003e article I am going to use `pipx run hatch`, but you can `pipx install hatch`\n\u003e then just run `hatch` from there.\n\n## Interacively create a new project\n\nRunning `hatch new -i` will ask let you interactivly choose details about the\nproject, such as the project's name.\n\n```\npipx run hatch new -i\n```\n\nAfter running and naming the project **Hatch New** we end up with the following\nfiletree.\n\n``` bash\n❯ tree .\n.\n├── hatch_new\n│   ├── __about__.py\n│   └── __init__.py\n├── LICENSE.txt\n├── pyproject.toml\n├── README.md\n└── tests\n    └── __init__.py\n```\n\n## Non-Interative\n\nYou can also fill in the project name ahead of time, and it will run without\nany questions.\n\n![hatch-new-another-project.webp](https://dropper.waylonwalker.com/api/file/7d902784-e69e-4990-a711-22365665594c.webp)\n\n``` bash\n❯ pipx run hatch new \"Another Project\"\nanother-project\n├── another_project\n│   ├── __about__.py\n│   └── __init__.py\n├── tests\n│   └── __init__.py\n├── LICENSE.txt\n├── README.md\n└── pyproject.toml\n```\n\n\u003e Note! all of these examples will create a project directory within your\n\u003e current working directory.\n\n![\"An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting\" -s50 -W800 -H450 -C10.0 -Ak_lms -S324995023](https://stable-diffusion.waylonwalker.com/000146.324995023.webp)\n\n## --init\n_existing project_\n\n`hatch new` has an `--init` flag in order to initialize a new hatch\npyproject.toml in an existing project.  This feels like it would be useful if\nyou are converting a project to hatch, or if like me you sometimes start making\nsomething before you realize it's something that you want to package.  Honestly\nthis doesn't happen too much anymore I package most things, and I hope `hatch\nnew` completely breaks this habbit of mine.\n\nLet's say I have the following existing project.\n\n``` bash\n❯ tree\n.\n└── hatch_init\n    └── __init__.py\n\n1 directory, 1 file\n```\n\nI can setup packaging with hatch by running.\n\n``` bash\npipx run hatch new --init\n```\n\n![hatch-init-existing.webp](https://dropper.waylonwalker.com/api/file/8e43edca-57d9-4bbf-9ca8-c6d026356be3.webp)\n\n\nThe `pyproject.toml` that comes out is pretty similar to the one that comes out\nof the normal `hatch new`, but without any other files.\n\n\u003e Note that you will need to setup a `__about__.py` yourself for the dynamic\n\u003e versioning that it has setup for you.\n\n``` toml\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"hatch-init\"\ndescription = 'initialize an existing project using hatch'\nreadme = \"README.md\"\nrequires-python = \"\u003e=3.7\"\nlicense = \"MIT\"\nkeywords = []\nauthors = [\n  { name = \"Waylon S. Walker\", email = \"waylon@waylonwalker.com\" },\n]\nclassifiers = [\n  \"Development Status :: 4 - Beta\",\n  \"Programming Language :: Python\",\n  \"Programming Language :: Python :: 3.7\",\n  \"Programming Language :: Python :: 3.8\",\n  \"Programming Language :: Python :: 3.9\",\n  \"Programming Language :: Python :: 3.10\",\n  \"Programming Language :: Python :: 3.11\",\n  \"Programming Language :: Python :: Implementation :: CPython\",\n  \"Programming Language :: Python :: Implementation :: PyPy\",\n]\ndependencies = []\ndynamic = [\"version\"]\n\n[project.urls]\nDocumentation = \"https://github.com/unknown/hatch-init#readme\"\nIssues = \"https://github.com/unknown/hatch-init/issues\"\nSource = \"https://github.com/unknown/hatch-init\"\n\n[tool.hatch.version]\npath = \"hatch_init/__about__.py\"\n\n[tool.hatch.envs.default]\ndependencies = [\n  \"pytest\",\n  \"pytest-cov\",\n]\n[tool.hatch.envs.default.scripts]\ncov = \"pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=hatch_init --cov=tests\"\nno-cov = \"cov --no-cov\"\n\n[[tool.hatch.envs.test.matrix]]\npython = [\"37\", \"38\", \"39\", \"310\", \"311\"]\n\n[tool.coverage.run]\nbranch = true\nparallel = true\nomit = [\n  \"hatch_init/__about__.py\",\n]\n\n[tool.coverage.report]\nexclude_lines = [\n  \"no cov\",\n  \"if __name__ == .__main__.:\",\n  \"if TYPE_CHECKING:\",\n]\n```\n\n## cli\n\n`hatch new` does not stop there, it also has a `--cli` flag to give you a cli\nout of the box as well.\n\n``` bash\n❯ pipx run hatch new \"new cli\" --cli\nnew-cli\n├── new_cli\n│   ├── cli\n│   │   └── __init__.py\n│   ├── __about__.py\n│   ├── __init__.py\n│   └── __main__.py\n├── tests\n│   └── __init__.py\n├── LICENSE.txt\n├── README.md\n└── pyproject.toml\n```\n\nWhen you use the `--cli` flag you also get `click` as a dependency and\n`project.scripts` setup automatically.\n\n```\n[project]\nname = \"new-cli\"\n\n# ...\n\ndependencies = [\n  \"click\",\n]\n\n# ...\n\n[project.scripts]\nnew-cli = \"new_cli.cli:new_cli\"\n```\n\n![\"An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation\" -s50 -W800 -H450 -C7.5 -Ak_lms -S98801549\n](https://stable-diffusion.waylonwalker.com/000130.98801549.webp)\n\n## what's in the cli\n\nIt's a hello-world click application.\n\n``` python\n# SPDX-FileCopyrightText: 2022-present Waylon S. Walker \u003cwaylon@waylonwalker.com\u003e\n#\n# SPDX-License-Identifier: MIT\nimport click\n\nfrom ..__about__ import __version__\n\n\n@click.group(context_settings={'help_option_names': ['-h', '--help']}, invoke_without_command=True)\n@click.version_option(version=__version__, prog_name='new cli')\n@click.pass_context\ndef new_cli(ctx: click.Context):\n    click.echo('Hello world!')\n```\n\n## sneak peek\n\nI'll dive more into environments and the run command later, but we can run the\ncli pretty damn quick with two commands. In under 5s I was able to run this cli\nthat it created.  This is a pretty incredible startup time.\n\n\n![pipx-run-hatch-hello-world.webp](https://dropper.waylonwalker.com/api/file/608b7c9c-3cff-4659-87d4-6e5618f6dbcb.webp)\n\n![\"An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting\" -s50 -W800 -H450 -C7.5 -Ak_lms -S2274808816](https://stable-diffusion.waylonwalker.com/000136.2274808816.webp)\n",
      "summary": "I'm really getting into using hatch as my go to build system, and I am really liking it so far. I am slowly finding new things that just work really well. is...",
      "date_published": "2022-09-02T07:54:03Z",
      "date_modified": "2022-09-02T07:54:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hatch-version/",
      "url": "https://go.waylonwalker.com/hatch-version/",
      "title": "Versioning Python Projects with Hatch",
      "content_html": "\u003cp\u003eHatch has an amazing versioning cli for python packages that just works.  It\ntakes very little config to get going and you can start bumping versions\nwithout worry.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://images.waylonwalker.com/hatch-version.png\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://images.waylonwalker.com/hatch-version.png\" alt=\"Hatch version cover image\" class=\"more-cinematic glightbox\"/ data-glightbox=\"description: Hatch version cover image\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ecreating new versions created by myself with stable diffusion\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"project-layout\"\u003eproject layout \u003ca href=\"#project-layout\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFor trying out the \u003ccode\u003ehatch version\u003c/code\u003e cli let’s make a simple project with the\nterrible name \u003ccode\u003epkg\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── pkg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── __about__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── __init__.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── pyproject.toml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e directory, \u003cspan class=\"m\"\u003e4\u003c/span\u003e files\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"pyprojecttoml\"\u003epyproject.toml \u003ca href=\"#pyprojecttoml\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe main hero of this post is the \u003ccode\u003epyproject.toml\u003c/code\u003e.  This is what defines all\nof our \u003ca href=\"https://peps.python.org/pep-0517/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/peps.python.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/peps.python.org.png\" class=\"has-avatar  has-avatar-before\"\u003ePEP 517\u003c/a\u003e style project setup.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pkg\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edescription\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Show how to version packages with hatch\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ereadme\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;README.md\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edynamic\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003ebuild-system\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003erequires\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;hatchling\u0026gt;=1.4.1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebuild-backend\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;hatchling.build\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pkg/__about__.py\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"statically-versioning\"\u003estatically versioning \u003ca href=\"#statically-versioning\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eproject.version\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIt is possible to set the version number inside the \u003ccode\u003epyproject.toml\u003c/code\u003e\nstatically.  This is fine if you just want to version your package manually,\nand not through the \u003ccode\u003ehatch\u003c/code\u003e cli.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pkg\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eversion\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0.0.0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eStatically versioning in pyproject.toml will not work with \u003ccode\u003ehatch version\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/5e0db9e0-e60a-4a50-8f96-02f194347b2c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/5e0db9e0-e60a-4a50-8f96-02f194347b2c.webp\" alt=\"hatch-static-version-error.webp\"/ data-glightbox=\"description: hatch-static-version-error.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCannot \u003cspan class=\"nb\"\u003eset\u003c/span\u003e version when it is statically defined by the \u003cspan class=\"sb\"\u003e`\u003c/span\u003eproject.version\u003cspan class=\"sb\"\u003e`\u003c/span\u003e field\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"dynamically-versioning\"\u003edynamically Versioning \u003ca href=\"#dynamically-versioning\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eproject.dynamic\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eSetting the project verion dynamically can be done by changing up the following\nto your \u003ccode\u003epyproject.toml\u003c/code\u003e.  Hatch only accepts a path to store your version.  If\nyou need to reference  it elsewhere in your project you can grab it from the\npackage metadata for that file.  I would not put anything else that could\npossibly clash with the version, as you might accidently change both things.\u003c/p\u003e\n\u003cp\u003eIf you really need to set it in more places use a package like bump2version.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eproject\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pkg\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edynamic\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;version\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etool\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ehatch\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pkg/__about__.py\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote: you can configure hatch to use a different pattern\n\u003ca href=\"https://hatch.pypa.io/1.2/version/#configuration\"\u003ehttps://hatch.pypa.io/1.2/version/#configuration\u003c/a\u003e, but I have not found it to\nbe something that I need.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"--about--py\"\u003e\u003cstrong\u003eabout\u003c/strong\u003e.py \u003ca href=\"#--about--py\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe \u003ca href=\"https://github.com/pypa/hatch/\" 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\"\u003ehatch\u003c/a\u003e project itself uses a\n\u003ca href=\"https://github.com/pypa/hatch/blob/master/src/hatch/__about__.py\" 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\"\u003e\u003cstrong\u003eabout\u003c/strong\u003e.py\u003c/a\u003e\nto store it’s version. It’s sole content is a single \u003ccode\u003e__version__\u003c/code\u003e variable.  I\ndon’t have any personal issues with this so I am going to be following this in\nmy projects that use hatch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e__version__\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0.0.0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"versioning\"\u003eversioning \u003ca href=\"#versioning\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e\u003ca href=\"https://hatch.pypa.io/1.2/version/#updating\"\u003ehatch version docs\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eHatch has a pretty intuitive versioning api.  \u003ccode\u003ehatch version\u003c/code\u003e gives you the\nversion.  If you pass in a version like \u003ccode\u003ehatch version \u0026#34;0.0.1\u0026#34;\u003c/code\u003e it will set it\nto that version as long as it is in the future, otherwise it will error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# print the current version\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# set the version to 0.0.1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch version \u003cspan class=\"s2\"\u003e\u0026#34;0.0.1\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"bumping\"\u003ebumping \u003ca href=\"#bumping\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can bump parts of the \u003ca href=\"https://semver.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/semver.org.jpg\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/semver.org.jpg\" class=\"has-avatar  has-avatar-before\"\u003esemver\u003c/a\u003e version.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# minor bump\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch version minor\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# beta pre-release bump\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# If published to pypi this can be installed with the --pre flag to pip\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch version b\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# bump minor and beta\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch version minor,b\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# release all of the --pre-release flags such as alpha beta rc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehatch release\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"example\"\u003eExample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a screenshot of bumping a projet along.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/322a0310-0cea-4320-9f13-955bcd6b5e17.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/322a0310-0cea-4320-9f13-955bcd6b5e17.webp\" alt=\"hatch-version-cli.webp\"/ data-glightbox=\"description: hatch-version-cli.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"gitops\"\u003eGitOps \u003ca href=\"#gitops\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn my github actions flow I will be utilizing this to automate my versions. In\nmy side projects I use the \u003ccode\u003edevelop\u003c/code\u003e branch to release –pre releases.  I have\nall of my own dependent projets running on these –pre releases, this allows me\nto cut myself in my own projects before anyone else.  Then on main I\nautomatically release this beta version.\u003c/p\u003e\n\u003ch2 id=\"github-actions\"\u003eGitHub Actions \u003ca href=\"#github-actions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is what the ci/cd for \u003ccode\u003emarkata\u003c/code\u003e looks like. There  might be a better\nworkflow strategy, but I use a single github actions workflow and cut branches\nto release –pre releases and full release.  These steps will bump, tag,\ncommit, and deploy for me.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eautomatically pre-release develop branch\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003egithub.ref == \u0026#39;refs/heads/develop\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git config --global user.name \u0026#39;autobump\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git config --global user.email \u0026#39;autobump@markata.dev\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          VERSION=`hatch version`\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          # if current version is not already beta then bump minor and beta\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          [ -z \u0026#34;${b##*`hatch version`*}\u0026#34; ] \u0026amp;\u0026amp; hatch version b || hatch version minor,b\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          NEW_VERSION=`hatch version`\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git add markta/__about__.py\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git commit -m \u0026#34;Bump version: $VERSION → $NEW_VERSION\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git tag $VERSION\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git push\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git push --tags\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eautomatically release main branch\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003egithub.ref == \u0026#39;refs/heads/main\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git config --global user.name \u0026#39;autobump\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git config --global user.email \u0026#39;autobump@markata.dev\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          VERSION=`hatch version`\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          hatch version release\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          NEW_VERSION=`hatch version`\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git add markta/__about__.py\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git commit -m \u0026#34;Bump version: $VERSION → $NEW_VERSION\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git tag $VERSION\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git push\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          git push --tags\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebuild\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          python -m build\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epypi-publish\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003egithub.ref == \u0026#39;refs/heads/develop\u0026#39; || github.ref == \u0026#39;refs/heads/main\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epypa/gh-action-pypi-publish@v1.1.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ secrets.pypi_password }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"hatch-version-action\"\u003eHatch Version Action \u003ca href=\"#hatch-version-action\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI am setting up a github custom action\n\u003ca href=\"https://github.com/WaylonWalker/hatch-version-action\" 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/hatch-version-action\u003c/a\u003e\nthat will lint, test, bump, and publish for me in one step.  More on that in\nthe future.\u003c/p\u003e\n",
      "content_text": "\nHatch has an amazing versioning cli for python packages that just works.  It\ntakes very little config to get going and you can start bumping versions\nwithout worry.\n\n![Hatch version cover image](https://images.waylonwalker.com/hatch-version.png){.more-cinematic}\n\n\u003e creating new versions created by myself with stable diffusion\n\n## project layout\n\nFor trying out the `hatch version` cli let's make a simple project with the\nterrible name `pkg`.\n\n``` bash\n❯ tree .\n.\n├── pkg\n│   ├── __about__.py\n│   └── __init__.py\n├── pyproject.toml\n└── README.md\n\n1 directory, 4 files\n```\n\n## pyproject.toml\n\nThe main hero of this post is the `pyproject.toml`.  This is what defines all\nof our [PEP 517](https://peps.python.org/pep-0517/) style project setup.\n\n``` toml\n[project]\nname = \"pkg\"\ndescription = \"Show how to version packages with hatch\"\nreadme = \"README.md\"\ndynamic = [\n \"version\",\n]\n\n[build-system]\nrequires = [\n \"hatchling\u003e=1.4.1\",\n]\nbuild-backend = \"hatchling.build\"\n\n[tool.hatch.version]\npath = \"pkg/__about__.py\"\n```\n\n## statically versioning\n\n_project.version_\n\nIt is possible to set the version number inside the `pyproject.toml`\nstatically.  This is fine if you just want to version your package manually,\nand not through the `hatch` cli.\n\n``` toml\n[project]\nname = \"pkg\"\nversion = \"0.0.0\"\n# ...\n```\n\n\u003e Statically versioning in pyproject.toml will not work with `hatch version`\n\n![hatch-static-version-error.webp](https://dropper.waylonwalker.com/api/file/5e0db9e0-e60a-4a50-8f96-02f194347b2c.webp)\n\n``` bash\nCannot set version when it is statically defined by the `project.version` field\n```\n\n## dynamically Versioning\n\n_project.dynamic_\n\nSetting the project verion dynamically can be done by changing up the following\nto your `pyproject.toml`.  Hatch only accepts a path to store your version.  If\nyou need to reference  it elsewhere in your project you can grab it from the\npackage metadata for that file.  I would not put anything else that could\npossibly clash with the version, as you might accidently change both things.\n\nIf you really need to set it in more places use a package like bump2version.\n\n``` toml\n[project]\nname = \"pkg\"\ndynamic = [\n  \"version\"\n]\n# ...\n[tool.hatch.version]\npath = \"pkg/__about__.py\"\n```\n\n\u003e Note: you can configure hatch to use a different pattern\n\u003e \u003chttps://hatch.pypa.io/1.2/version/#configuration\u003e, but I have not found it to\n\u003e be something that I need.\n\n## __about__.py\n\nThe [hatch](https://github.com/pypa/hatch/) project itself uses a\n[__about__.py](https://github.com/pypa/hatch/blob/master/src/hatch/__about__.py)\nto store it's version. It's sole content is a single `__version__` variable.  I\ndon't have any personal issues with this so I am going to be following this in\nmy projects that use hatch.\n\n``` python\n__version__ = \"0.0.0\"\n```\n\n## versioning\n\n_[hatch version docs](https://hatch.pypa.io/1.2/version/#updating)_\n\nHatch has a pretty intuitive versioning api.  `hatch version` gives you the\nversion.  If you pass in a version like `hatch version \"0.0.1\"` it will set it\nto that version as long as it is in the future, otherwise it will error.\n\n``` bash\n# print the current version\nhatch version\n\n# set the version to 0.0.1\nhatch version \"0.0.1\"\n```\n\n## bumping\n\nYou can bump parts of the [semver](https://semver.org/) version.\n\n``` bash\n# minor bump\nhatch version minor\n\n# beta pre-release bump\n# If published to pypi this can be installed with the --pre flag to pip\nhatch version b\n\n# bump minor and beta\nhatch version minor,b\n\n# release all of the --pre-release flags such as alpha beta rc\nhatch release\n```\n\n## Example\n\nHere is a screenshot of bumping a projet along.\n\n![hatch-version-cli.webp](https://dropper.waylonwalker.com/api/file/322a0310-0cea-4320-9f13-955bcd6b5e17.webp)\n\n## GitOps\n\nIn my github actions flow I will be utilizing this to automate my versions. In\nmy side projects I use the `develop` branch to release --pre releases.  I have\nall of my own dependent projets running on these --pre releases, this allows me\nto cut myself in my own projects before anyone else.  Then on main I\nautomatically release this beta version.\n\n## GitHub Actions\n\nHere is what the ci/cd for `markata` looks like. There  might be a better\nworkflow strategy, but I use a single github actions workflow and cut branches\nto release --pre releases and full release.  These steps will bump, tag,\ncommit, and deploy for me.\n\n``` yaml\n      - name: automatically pre-release develop branch\n        if: github.ref == 'refs/heads/develop'\n        run: |\n          git config --global user.name 'autobump'\n          git config --global user.email 'autobump@markata.dev'\n          VERSION=`hatch version`\n          # if current version is not already beta then bump minor and beta\n          [ -z \"${b##*`hatch version`*}\" ] \u0026\u0026 hatch version b || hatch version minor,b\n          NEW_VERSION=`hatch version`\n          git add markta/__about__.py\n          git commit -m \"Bump version: $VERSION → $NEW_VERSION\"\n          git tag $VERSION\n          git push\n          git push --tags\n\n      - name: automatically release main branch\n        if: github.ref == 'refs/heads/main'\n        run: |\n          git config --global user.name 'autobump'\n          git config --global user.email 'autobump@markata.dev'\n          VERSION=`hatch version`\n          hatch version release\n          NEW_VERSION=`hatch version`\n          git add markta/__about__.py\n          git commit -m \"Bump version: $VERSION → $NEW_VERSION\"\n          git tag $VERSION\n          git push\n          git push --tags\n\n      - name: build\n        run: |\n          python -m build\n\n      - name: pypi-publish\n        if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main'\n        uses: pypa/gh-action-pypi-publish@v1.1.0\n        with:\n          password: ${{ secrets.pypi_password }}\n```\n\n## Hatch Version Action\n\nI am setting up a github custom action\n[waylonwalker/hatch-version-action](https://github.com/WaylonWalker/hatch-version-action)\nthat will lint, test, bump, and publish for me in one step.  More on that in\nthe future.\n",
      "summary": "Hatch has an amazing versioning cli for python packages that just works. It takes very little config to get going and you can start bumping versions without...",
      "date_published": "2022-09-01T13:19:22Z",
      "date_modified": "2022-09-01T13:19:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/laytan-cloak-nvim/",
      "url": "https://go.waylonwalker.com/laytan-cloak-nvim/",
      "title": "⭐ laytan cloak.nvim",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/laytan/cloak.nvim\" 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\"\u003ecloak.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/laytan\" 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\"\u003elaytan\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eCloak allows you to overlay *’s over defined patterns in defined files.\u003c/p\u003e\n",
      "content_text": "\nJust starred [cloak.nvim](https://github.com/laytan/cloak.nvim) by [laytan](https://github.com/laytan). It's an exciting project with a lot to offer.\n\nCloak allows you to overlay *'s over defined patterns in defined files.\n",
      "summary": "Just starred cloak.nvim by laytan. It's an exciting project with a lot to offer.",
      "date_published": "2022-08-31T14:46:49Z",
      "date_modified": "2022-08-31T14:46:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/from-markdown-to-blog-with-markata/",
      "url": "https://go.waylonwalker.com/from-markdown-to-blog-with-markata/",
      "title": "From Markdown to Blog with Markata | lightning talk | python web conf 2022",
      "content_html": "\u003cp\u003eMarkata is a great python framework that allows you to go from markdown to a\nfull website very quickly.  You can get up and running with nothing more than\nMarkdown.  It is also built on a full plugin architecture, so if there is extra\nfunctionality that you want to add, you can create a plugin to make it behave\nlike you want.\u003c/p\u003e\n\u003cp\u003eFull transparancy… I built markata.\u003c/p\u003e\n\u003ch2 id=\"the-talk\"\u003eThe talk \u003ca href=\"#the-talk\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe talk is live on YouTube.  Make sure you check out the other videos from the\nconference.  There were quite a few quality talks that deserve a watch as well.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://youtu.be/Wq9YBamSgs0\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/youtu.be.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/youtu.be.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://youtu.be/Wq9YBamSgs0\u003c/a\u003e\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000221.1721400243.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000221.1721400243.webp\" alt=\"“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203\"/ data-glightbox=\"description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nMarkata is a great python framework that allows you to go from markdown to a\nfull website very quickly.  You can get up and running with nothing more than\nMarkdown.  It is also built on a full plugin architecture, so if there is extra\nfunctionality that you want to add, you can create a plugin to make it behave\nlike you want.\n\nFull transparancy... I built markata.\n\n## The talk\n\nThe talk is live on YouTube.  Make sure you check out the other videos from the\nconference.  There were quite a few quality talks that deserve a watch as well.\n\nhttps://youtu.be/Wq9YBamSgs0\n\n\n![\"An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art\" -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203](https://stable-diffusion.waylonwalker.com/000221.1721400243.webp)\n",
      "summary": "Markata is a great python framework that allows you to go from markdown to a full website very quickly. You can get up and running with nothing more than...",
      "date_published": "2022-08-31T10:01:09Z",
      "date_modified": "2022-08-31T10:01:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/i-spoke-at-python-web-conf-2022/",
      "url": "https://go.waylonwalker.com/i-spoke-at-python-web-conf-2022/",
      "title": "I spoke at Python Web Conf 2022",
      "content_html": "\u003cp\u003eI spoke at python webconf in March 2022 about how I deploy this blog on a\ncontinuous basis.\u003c/p\u003e\n\u003cp\u003eBuilding this blog has brought me a lot of benefits.  I have\na set of custom curated notes to help describe a problem and how to solve it to\nme.  At theis point it’s not uncommon to google an Issue I am having and\nfinding my own blog with exactly the solution I need at the top.\u003c/p\u003e\n\u003cp\u003eI also bump into people from time to time that recognize me from the blog, its\na nice conversation starter, and street cred.\u003c/p\u003e\n\u003ch2 id=\"the-talk\"\u003eThe Talk \u003ca href=\"#the-talk\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe talk recently released on Youtube, you can watch it without having a ticket\nto the conference for free.  There were a bunch of other talks that you should\ncheck out too!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://youtu.be/JDZVjDCTKHE\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/youtu.be.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/youtu.be.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://youtu.be/JDZVjDCTKHE\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI spoke at python webconf in March 2022 about how I deploy this blog on a\ncontinuous basis.\n\nBuilding this blog has brought me a lot of benefits.  I have\na set of custom curated notes to help describe a problem and how to solve it to\nme.  At theis point it's not uncommon to google an Issue I am having and\nfinding my own blog with exactly the solution I need at the top.\n\nI also bump into people from time to time that recognize me from the blog, its\na nice conversation starter, and street cred.\n\n## The Talk\n\nThe talk recently released on Youtube, you can watch it without having a ticket\nto the conference for free.  There were a bunch of other talks that you should\ncheck out too!\n\nhttps://youtu.be/JDZVjDCTKHE\n",
      "summary": "I spoke at python webconf in March 2022 about how I deploy this blog on a continuous basis.",
      "date_published": "2022-08-30T08:40:22Z",
      "date_modified": "2022-08-30T08:40:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/p3rf-rofi-network-manager/",
      "url": "https://go.waylonwalker.com/p3rf-rofi-network-manager/",
      "title": "⭐ P3rf rofi-network-manager",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/P3rf/rofi-network-manager\" 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\"\u003erofi-network-manager\u003c/a\u003e by \u003ca href=\"https://github.com/P3rf\" 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\"\u003eP3rf\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA manager for network connections using bash, rofi, nmcli,qrencode.\u003c/p\u003e\n",
      "content_text": "\n[rofi-network-manager](https://github.com/P3rf/rofi-network-manager) by [P3rf](https://github.com/P3rf) is a game-changer in its space. Excited to see how it evolves.\n\nA manager for network connections using bash, rofi, nmcli,qrencode.\n",
      "summary": "rofi-network-manager by P3rf is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2022-08-29T14:56:45Z",
      "date_modified": "2022-08-29T14:56:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypi-2fa/",
      "url": "https://go.waylonwalker.com/pypi-2fa/",
      "title": "I turned on 2FA for all of my pypi packages",
      "content_html": "\u003cp\u003eI got all the pypi packages that I own behind 2 factor authentication. 💪\u003c/p\u003e\n\u003cp\u003eRecently this really made it’s rounds in the python news since pypi was\nrequiring critical package maintainers to have 2FA on and even offering them\nhardware tokens to help them turn this on.\u003c/p\u003e\n\u003cp\u003eI feel like this caused a bit of confusion as turning on 2FA does not mean that\nyou need to do anything different to deploy a package, and it \u003cstrong\u003eDOES NOT\u003c/strong\u003e\nrequire a hardware token.  You can continue using your favorite 2FA app.\u003c/p\u003e\n\u003cp\u003eYou might wonder what this means for my projects. It means that to edit any\n\u003cem\u003esensitive content\u003c/em\u003e such as pull a new api token, add/remove maintainers, or\ndeleting a release I need to use a TOPT (time based one time password)\napplication such as Google Authenticator, Microsoft Authenticator, Authy, or\nFreeOTP.\u003c/p\u003e\n\u003cp\u003eThis has very little change to my overall workflow as my CI system still\nautomatically deploys for me with the same api token as before.\u003c/p\u003e\n\u003cp\u003eThis is one small thing that maintainers can do to prevent supply chain attacks\non their projects that they put so much work into.\u003c/p\u003e\n\u003ch2 id=\"login\"\u003eLogin \u003ca href=\"#login\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen I log in I now get this extra screen asking for an auth token.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/ba6d1b7b-ea84-4b03-b53f-53ef7b1e9174.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/ba6d1b7b-ea84-4b03-b53f-53ef7b1e9174.webp\" alt=\"pypi-2fa-code.webp\"/ data-glightbox=\"description: pypi-2fa-code.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"my-packages\"\u003eMy packages \u003ca href=\"#my-packages\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce I turned on 2FA for my account I could then turn on 2FA requirement for\neach project.  I am not sure how much safety there is in pypi, it might require\nall maintainers to have it turned on before it allows packages to have it\nturned on.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/8a8c66d5-61a0-4a89-a23c-09976b8e95ae.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/8a8c66d5-61a0-4a89-a23c-09976b8e95ae.webp\" alt=\"my-pypi-packages-aug-2022.webp\"/ data-glightbox=\"description: my-pypi-packages-aug-2022.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eOnce turned on it requires anyone who maintains the project to have 2FA on to\nbe able to edit any sensitive content.\u003c/p\u003e\n",
      "content_text": "\nI got all the pypi packages that I own behind 2 factor authentication. 💪\n\nRecently this really made it's rounds in the python news since pypi was\nrequiring critical package maintainers to have 2FA on and even offering them\nhardware tokens to help them turn this on.\n\nI feel like this caused a bit of confusion as turning on 2FA does not mean that\nyou need to do anything different to deploy a package, and it **DOES NOT**\nrequire a hardware token.  You can continue using your favorite 2FA app.\n\nYou might wonder what this means for my projects. It means that to edit any\n_sensitive content_ such as pull a new api token, add/remove maintainers, or\ndeleting a release I need to use a TOPT (time based one time password)\napplication such as Google Authenticator, Microsoft Authenticator, Authy, or\nFreeOTP.\n\nThis has very little change to my overall workflow as my CI system still\nautomatically deploys for me with the same api token as before.\n\nThis is one small thing that maintainers can do to prevent supply chain attacks\non their projects that they put so much work into.\n\n## Login\n\nWhen I log in I now get this extra screen asking for an auth token.\n\n![pypi-2fa-code.webp](https://dropper.waylonwalker.com/api/file/ba6d1b7b-ea84-4b03-b53f-53ef7b1e9174.webp)\n\n## My packages\n\nOnce I turned on 2FA for my account I could then turn on 2FA requirement for\neach project.  I am not sure how much safety there is in pypi, it might require\nall maintainers to have it turned on before it allows packages to have it\nturned on.\n\n![my-pypi-packages-aug-2022.webp](https://dropper.waylonwalker.com/api/file/8a8c66d5-61a0-4a89-a23c-09976b8e95ae.webp)\n\nOnce turned on it requires anyone who maintains the project to have 2FA on to\nbe able to edit any sensitive content.\n",
      "summary": "I got all the pypi packages that I own behind 2 factor authentication. 💪",
      "date_published": "2022-08-29T07:51:54Z",
      "date_modified": "2022-08-29T07:51:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypa-build/",
      "url": "https://go.waylonwalker.com/pypa-build/",
      "title": "⭐ pypa build",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/pypa/build\" 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\"\u003ebuild\u003c/a\u003e by \u003ca href=\"https://github.com/pypa\" 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\"\u003epypa\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA simple, correct Python build frontend\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [build](https://github.com/pypa/build) by [pypa](https://github.com/pypa).\n\nA simple, correct Python build frontend\n",
      "summary": "Looking for inspiration? build by pypa.",
      "date_published": "2022-08-28T19:57:27Z",
      "date_modified": "2022-08-28T19:57:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/squidfunk-mkdocs-material/",
      "url": "https://go.waylonwalker.com/squidfunk-mkdocs-material/",
      "title": "⭐ squidfunk mkdocs-material",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/squidfunk\" 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\"\u003esquidfunk\u003c/a\u003e and their project \u003ca href=\"https://github.com/squidfunk/mkdocs-material\" 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\"\u003emkdocs-material\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDocumentation that simply works\u003c/p\u003e\n",
      "content_text": "\nCheck out [squidfunk](https://github.com/squidfunk) and their project [mkdocs-material](https://github.com/squidfunk/mkdocs-material).\n\nDocumentation that simply works\n",
      "summary": "Check out squidfunk and their project mkdocs-material.",
      "date_published": "2022-08-25T23:50:45Z",
      "date_modified": "2022-08-25T23:50:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-sort-u/",
      "url": "https://go.waylonwalker.com/vim-sort-u/",
      "title": "use vim to remove duplicates",
      "content_html": "\u003cp\u003eI just love how some features of vim are so discoverable and memorable once you\nreally start to grasp it.  Sorting and uniqing your files or ranges is one of\nthose examples for me.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; sort the file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003esort\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; sort the file only keeping unique lines\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003esort\u003c/span\u003e \u003cspan class=\"nx\"\u003eu\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; sort a range\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;,\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nx\"\u003esort\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; sort a range only keeping unique lines\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;,\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nx\"\u003esort\u003c/span\u003e \u003cspan class=\"nx\"\u003eu\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI recently used this to dedupe my autogenerated links section for\n\u003ca href=\"https://waylonwalker.com/rich-syntax-range-style/\" 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\"\u003erich-syntax-range-style\u003c/a\u003e.\nMore often I am using it to sort and uniqify objects like arrays and lists.\u003c/p\u003e\n\u003cp\u003eHere is what the markdown looks like.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003epy-tree-sitter\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/tree-sitter/py-tree-sitter\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003erich\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/Textualize/rich\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003e@textualizeio\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://twitter.com/textualizeio\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003erich\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/Textualize/rich\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003eanother post\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://waylonwalker.com/designing-kedro-router\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003eprint-register-pipelines\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/print-register-pipelines.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003erich\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/Textualize/rich\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003econsole-print-register-pipelines\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/console-print-register-pipelines.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003erich\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/Textualize/rich\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003esyntax-print-register-pipelines\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/syntax-print-register-pipelines.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003erich\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/Textualize/rich\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003esyntax-print-register-pipelines-highlight-line\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/syntax-print-register-pipelines-highlight-line.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003epy-tree-sitter\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/tree-sitter/py-tree-sitter\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen typing \u003ccode\u003evap:sort u\u003c/code\u003e yields a uniqly sorted list of links.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003e@textualizeio\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://twitter.com/textualizeio\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003eanother post\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://waylonwalker.com/designing-kedro-router\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003econsole-print-register-pipelines\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/console-print-register-pipelines.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003eprint-register-pipelines\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/print-register-pipelines.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003epy-tree-sitter\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/tree-sitter/py-tree-sitter\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003erich\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/Textualize/rich\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003esyntax-print-register-pipelines-highlight-line\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/syntax-print-register-pipelines-highlight-line.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e*\u003c/span\u003e [\u003cspan class=\"nt\"\u003esyntax-print-register-pipelines\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://screenshots.waylonwalker.com/syntax-print-register-pipelines.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cvideo controls=\"\" muted=\"\" autoplay=\"\" playsinline=\"\" loop=\"true\" width=\"100%\"\u003e\n    \u003csource src=\"https://images.waylonwalker.com/vim-sort-u.webm\" type=\"video/webm\"/\u003e\n    Sorry, your browser doesn\u0026#39;t support embedded videos.\n\u003c/video\u003e\n\u003cdiv class=\"speed-control\"\u003e\n    \u003cbutton onclick=\"change_speed(.25)\"\u003e\n        speed up\n    \u003c/button\u003e\n    \u003cbutton onclick=\"change_speed(-.25)\"\u003e\n        slow down\n    \u003c/button\u003e\n\u003c/div\u003e\n",
      "content_text": "\n\nI just love how some features of vim are so discoverable and memorable once you\nreally start to grasp it.  Sorting and uniqing your files or ranges is one of\nthose examples for me.\n\n\n``` vim\n\" sort the file\n:sort\n\" sort the file only keeping unique lines\n:sort u\n\n\n\" sort a range\n:'\u003c,'\u003e sort\n\" sort a range only keeping unique lines\n:'\u003c,'\u003e sort u\n```\n\nI recently used this to dedupe my autogenerated links section for\n[rich-syntax-range-style](https://waylonwalker.com/rich-syntax-range-style/).\nMore often I am using it to sort and uniqify objects like arrays and lists.\n\nHere is what the markdown looks like.\n\n``` markdown\n* [py-tree-sitter](https://github.com/tree-sitter/py-tree-sitter)\n* [rich](https://github.com/Textualize/rich)\n* [@textualizeio](https://twitter.com/textualizeio)\n* [rich](https://github.com/Textualize/rich)\n* [another post](https://waylonwalker.com/designing-kedro-router)\n* [print-register-pipelines](https://screenshots.waylonwalker.com/print-register-pipelines.webp)\n* [rich](https://github.com/Textualize/rich)\n* [console-print-register-pipelines](https://screenshots.waylonwalker.com/console-print-register-pipelines.webp)\n* [rich](https://github.com/Textualize/rich)\n* [syntax-print-register-pipelines](https://screenshots.waylonwalker.com/syntax-print-register-pipelines.webp)\n* [rich](https://github.com/Textualize/rich)\n* [syntax-print-register-pipelines-highlight-line](https://screenshots.waylonwalker.com/syntax-print-register-pipelines-highlight-line.webp)\n* [py-tree-sitter](https://github.com/tree-sitter/py-tree-sitter)\n```\n\nThen typing `vap:sort u` yields a uniqly sorted list of links.\n\n``` markdown\n* [@textualizeio](https://twitter.com/textualizeio)\n* [another post](https://waylonwalker.com/designing-kedro-router)\n* [console-print-register-pipelines](https://screenshots.waylonwalker.com/console-print-register-pipelines.webp)\n* [print-register-pipelines](https://screenshots.waylonwalker.com/print-register-pipelines.webp)\n* [py-tree-sitter](https://github.com/tree-sitter/py-tree-sitter)\n* [rich](https://github.com/Textualize/rich)\n* [syntax-print-register-pipelines-highlight-line](https://screenshots.waylonwalker.com/syntax-print-register-pipelines-highlight-line.webp)\n* [syntax-print-register-pipelines](https://screenshots.waylonwalker.com/syntax-print-register-pipelines.webp)\n```\n\n\n\u003cvideo controls muted autoplay playsinline loop=true width=\"100%\"\u003e\n    \u003csource src=\"https://images.waylonwalker.com/vim-sort-u.webm\"\n            type=\"video/webm\"\u003e\n    Sorry, your browser doesn't support embedded videos.\n\u003c/video\u003e\n\n\u003cdiv class='speed-control'\u003e\n    \u003cbutton onclick=\"change_speed(.25)\" \u003e\n        speed up\n    \u003c/button\u003e\n    \u003cbutton onclick=\"change_speed(-.25)\" \u003e\n        slow down\n    \u003c/button\u003e\n\u003c/div\u003e\n",
      "summary": "I just love how some features of vim are so discoverable and memorable once you really start to grasp it. Sorting and uniqing your files or ranges is one of...",
      "date_published": "2022-08-25T06:50:32Z",
      "date_modified": "2022-08-25T06:50:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rich-syntax-range-style/",
      "url": "https://go.waylonwalker.com/rich-syntax-range-style/",
      "title": "Highlighting text ranges with Rich | python",
      "content_html": "\u003cp\u003eToday I’ve been playing with\n\u003ca href=\"https://github.com/tree-sitter/py-tree-sitter\" 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\"\u003epy-tree-sitter\u003c/a\u003e a bit and I\nwanted to highlight match ranges, but was unable to figure out how to do it\nwith \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e, so I reached out to\n\u003ca href=\"https://twitter.com/textualizeio\"\u003e@textualizeio\u003c/a\u003e for help.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/_WaylonWalker/status/1562469770766589952\"\u003ehttps://twitter.com/_WaylonWalker/status/1562469770766589952\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWhile waiting for that reply let’s show how we got this far.\u003c/p\u003e\n\u003ch2 id=\"imports\"\u003eimports \u003ca href=\"#imports\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLets import all the classes that we need from \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e and setup a console to print\nto.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.console\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.syntax\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eSyntax\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.style\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eStyle\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eConsole\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"some-code\"\u003esome code \u003ca href=\"#some-code\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we need some code to highlight. I am going to rip my \u003ccode\u003eregister_pipeline\u003c/code\u003e\nfrom \u003ca href=\"https://waylonwalker.com/designing-kedro-router\" 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\"\u003eanother post\u003c/a\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecode\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003efrom find_kedro import find_kedro\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003edef register_pipelines(self) -\u0026gt; Dict[str, Pipeline]:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e    \u0026#34;\u0026#34;\u0026#34;Register the project\u0026#39;s pipeline.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e    Returns:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e        A mapping from a pipeline name to a ``Pipeline`` object.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e    \u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e    return find_kedro()\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"print\"\u003eprint \u003ca href=\"#print\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWe could simply print out the code we have as a variable, but thats a bit hard\nto read.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/765c471d-990f-4c7c-9c99-7a039c4db900.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/765c471d-990f-4c7c-9c99-7a039c4db900.webp\" alt=\"print-register-pipelines.webp\"/ data-glightbox=\"description: print-register-pipelines.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"consoleprint\"\u003econsole.print \u003ca href=\"#consoleprint\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eprinting with \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e’s console makes it a little better, but not much by default.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/b946c8b4-c1f0-4d58-8709-90c8f95a1f77.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/b946c8b4-c1f0-4d58-8709-90c8f95a1f77.webp\" alt=\"console-print-register-pipelines.webp\"/ data-glightbox=\"description: console-print-register-pipelines.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"syntax\"\u003eSyntax \u003ca href=\"#syntax\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWe can pull from \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e’s syntax module to really pretty this up.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eSyntax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecode\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline_numbers\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/f9329423-c0f5-4263-b241-b8f470fc758c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/f9329423-c0f5-4263-b241-b8f470fc758c.webp\" alt=\"syntax-print-register-pipelines.webp\"/ data-glightbox=\"description: syntax-print-register-pipelines.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eNow we are getting some really impressive print outs right in the terminal!\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003enote that I have ipython set to use \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e, you will need to console.print() in scripts\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"highlight-lines\"\u003ehighlight lines \u003ca href=\"#highlight-lines\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we can start highlighting lines right when we initialize our \u003ccode\u003eSyntax\u003c/code\u003e\ninstance.  It looks ok.  It’s not super visible, but more importantly its not\ngranular enough.  I want to highlight specific ranges like the word\nregister_pipelines.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eSyntax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecode\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline_numbers\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehighlight_lines\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/20b4564e-3a08-4e5a-9bed-cda07779c8fb.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/20b4564e-3a08-4e5a-9bed-cda07779c8fb.webp\" alt=\"syntax-print-register-pipelines-highlight-line.webp\"/ data-glightbox=\"description: syntax-print-register-pipelines-highlight-line.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis hows the line, but still is not very accurate.\u003c/p\u003e\n\u003ch2 id=\"highlight-text\"\u003ehighlight text \u003ca href=\"#highlight-text\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e[@textualizeio] got back to me, let’s see if What we can do with stylize_range!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/textualizeio/status/1562487302274043904\"\u003ehttps://twitter.com/textualizeio/status/1562487302274043904\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eSyntax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecode\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline_numbers\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eStyle\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebgcolor\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;deep_pink4\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estylize_range\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econsole\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esyntax\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis gives us the final result we are looking for, we can easily see what is\nbeing targeted here.  In this case the function name \u003ccode\u003eregister_pipelines\u003c/code\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/b5f27c34-6ffe-425c-b2df-8ade7c5b6f8b.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/b5f27c34-6ffe-425c-b2df-8ade7c5b6f8b.webp\" alt=\"syntax-highlight-range-register-pipelines.webp\"/ data-glightbox=\"description: syntax-highlight-range-register-pipelines.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eThis turns out to be exacly what I am looking for.  Now I have an easy way to\nprint out highlighted code wtih my\n\u003ca href=\"https://github.com/tree-sitter/py-tree-sitter\" 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\"\u003epy-tree-sitter\u003c/a\u003e query results.\u003c/p\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://twitter.com/textualizeio\"\u003e@textualizeio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/designing-kedro-router\" 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\"\u003eanother post\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tree-sitter/py-tree-sitter\" 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\"\u003epy-tree-sitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nToday I've been playing with\n[py-tree-sitter](https://github.com/tree-sitter/py-tree-sitter) a bit and I\nwanted to highlight match ranges, but was unable to figure out how to do it\nwith [rich](https://github.com/Textualize/rich), so I reached out to\n[@textualizeio](https://twitter.com/textualizeio) for help.\n\nhttps://twitter.com/_WaylonWalker/status/1562469770766589952\n\nWhile waiting for that reply let's show how we got this far.\n\n## imports\n\nLets import all the classes that we need from [rich](https://github.com/Textualize/rich) and setup a console to print\nto.\n\n``` python\nfrom rich.console import Console\nfrom rich.syntax import Syntax\nfrom rich.style import Style\n\nconsole = Console()\n```\n\n## some code\n\nNow we need some code to highlight. I am going to rip my `register_pipeline`\nfrom [another post](https://waylonwalker.com/designing-kedro-router).\n\n``` python\ncode = '''\nfrom find_kedro import find_kedro\n\ndef register_pipelines(self) -\u003e Dict[str, Pipeline]:\n    \"\"\"Register the project's pipeline.\n    Returns:\n        A mapping from a pipeline name to a ``Pipeline`` object.\n    \"\"\"\n    return find_kedro()\n'''\n```\n\n## print\n\nWe could simply print out the code we have as a variable, but thats a bit hard\nto read.\n\n![print-register-pipelines.webp](https://dropper.waylonwalker.com/api/file/765c471d-990f-4c7c-9c99-7a039c4db900.webp)\n\n## console.print\n\nprinting with [rich](https://github.com/Textualize/rich)'s console makes it a little better, but not much by default.\n\n![console-print-register-pipelines.webp](https://dropper.waylonwalker.com/api/file/b946c8b4-c1f0-4d58-8709-90c8f95a1f77.webp)\n\n## Syntax\n\nWe can pull from [rich](https://github.com/Textualize/rich)'s syntax module to really pretty this up.\n\n``` python\nsyntax = Syntax(code, 'python', line_numbers=True)\nconsole.print(syntax)\n```\n\n![syntax-print-register-pipelines.webp](https://dropper.waylonwalker.com/api/file/f9329423-c0f5-4263-b241-b8f470fc758c.webp)\n\nNow we are getting some really impressive print outs right in the terminal!\n\n\u003e note that I have ipython set to use [rich](https://github.com/Textualize/rich), you will need to console.print() in scripts\n\n## highlight lines\n\nNow we can start highlighting lines right when we initialize our `Syntax`\ninstance.  It looks ok.  It's not super visible, but more importantly its not\ngranular enough.  I want to highlight specific ranges like the word\nregister_pipelines.\n\n``` python\nsyntax = Syntax(code, 'python', line_numbers=True, highlight_lines=[4])\nconsole.print(syntax)\n```\n\n![syntax-print-register-pipelines-highlight-line.webp](https://dropper.waylonwalker.com/api/file/20b4564e-3a08-4e5a-9bed-cda07779c8fb.webp)\n\nThis hows the line, but still is not very accurate.\n\n## highlight text\n\n[@textualizeio] got back to me, let's see if What we can do with stylize_range!\n\nhttps://twitter.com/textualizeio/status/1562487302274043904\n\n``` python\nsyntax = Syntax(code, 'python', line_numbers=True)\nstyle = Style(bgcolor='deep_pink4')\nsyntax.stylize_range(style, (4, 4), (4, 22))\nconsole.print(syntax)\n```\n\nThis gives us the final result we are looking for, we can easily see what is\nbeing targeted here.  In this case the function name `register_pipelines`.\n\n![syntax-highlight-range-register-pipelines.webp](https://dropper.waylonwalker.com/api/file/b5f27c34-6ffe-425c-b2df-8ade7c5b6f8b.webp)\n\nThis turns out to be exacly what I am looking for.  Now I have an easy way to\nprint out highlighted code wtih my\n[py-tree-sitter](https://github.com/tree-sitter/py-tree-sitter) query results.\n\n## Links\n\n* [@textualizeio](https://twitter.com/textualizeio)\n* [another post](https://waylonwalker.com/designing-kedro-router)\n* [py-tree-sitter](https://github.com/tree-sitter/py-tree-sitter)\n* [rich](https://github.com/Textualize/rich)\n",
      "summary": "Today I've been playing with py-tree-sitter a bit and I wanted to highlight match ranges, but was unable to figure out how to do it with rich, so I reached...",
      "date_published": "2022-08-24T20:06:34Z",
      "date_modified": "2022-08-24T20:06:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/year/",
      "url": "https://go.waylonwalker.com/year/",
      "title": "Highlighting text ranges with Rich | python",
      "content_html": "\u003cp\u003e{% for year in markata.map(“date.year”, filter=‘published’)|unique %}\u003c/p\u003e\n\u003ch2 id=\"-year-\"\u003e{{ year }} \u003ca href=\"#-year-\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e{% for post in markata.map(‘post’, filter=“published and date.year == “+year|string, sort=‘date’) %}\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[{{ post.title }} - {{ post.date.month }}/{{ post.date.day }}](/{{ post.slug }})\n{% endfor %}\n{% endfor %}\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\n{% for year in markata.map(\"date.year\", filter='published')|unique %}\n\n## {{ year }}\n\n{% for post in markata.map('post', filter=\"published and date.year == \"+year|string, sort='date') %}\n\n- [{{ post.title }} - {{ post.date.month }}/{{ post.date.day }}](/{{ post.slug }})\n  {% endfor %}\n  {% endfor %}\n",
      "date_published": "2022-08-24T20:06:34Z",
      "date_modified": "2022-08-24T20:06:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vimgrep-open-buffers/",
      "url": "https://go.waylonwalker.com/vimgrep-open-buffers/",
      "title": "vimgrep open buffers",
      "content_html": "\u003cp\u003eHow to vimgrep over hidden files.\u003c/p\u003e\n\u003cp\u003eI needed to delete all build pipeline steps that were named \u003ccode\u003eupload docs\u003c/code\u003e.  I\ncurrently have about 60 projects running from the same template all running\nvery similar builds.  In the past I’ve scripted out migrations for large\nchanges like this, they involved writing a python script that would load the\nyaml file into a dictionary, find the corresponding steps make the change and\nwrite it back out.\u003c/p\u003e\n\u003cp\u003eToday’s job was much simplar, just delete the step, were all steps are\nsurrounded by newlines.  My first thought was to just open all files in vim and\nrun \u003ccode\u003edap\u003c/code\u003e.  I just needed to get these files:positions into my quickfix.  My\nissue is that all the builds reside within hidden directories by convention.\u003c/p\u003e\n\u003ch2 id=\"the-issue\"\u003eThe issue \u003ca href=\"#the-issue\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003evariability\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAfter searching through all the projects it was clear that all the steps were\nin their own paragraph, though I was not 100% confident enough to completely\nautomate it, and the word \u003ccode\u003eupload docs\u003c/code\u003e was in the paragraph.\u003c/p\u003e\n\u003cp\u003esome were a two liner\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupload docs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eaws s3 ...\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSome had a variation in the name\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupload docs to s3\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eaws s3 ...\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003esome were more than 2 lines.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupload docs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    aws s3 ...\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003esome used a different command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupload docs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    python ...\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"templates-are-great\"\u003eTemplates are great \u003ca href=\"#templates-are-great\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ebut they change\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eTemplates are amazing, and tools like cookiecutter and copier are essential in\nmy workflow, but those templates change over time. Some things are a constant,\nand others like this one are an ever evolving beast until they are tamed into\nsomething the team is happy with.\u003c/p\u003e\n\u003ch2 id=\"vimgrep-over-hidden-files\"\u003evimgrep over hidden files \u003ca href=\"#vimgrep-over-hidden-files\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI know all the files that I care to search for are called build.yml, and they\nare in a hidden directory.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e:args `fd -H build.yml`\n:vimgrep /upload docs/ ##\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOnce opened as a buffer by using args, and a handy fd command I can vimgrep\nover all the open buffers using \u003ccode\u003e##\u003c/code\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eOpen buffers are represented by ##\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNow I can just \u003ccode\u003edap\u003c/code\u003e and \u003ccode\u003e:cnext\u003c/code\u003e my way through the list of changes that I\nhave, and know that I hit every one of them when I am at the end of my list.\nAnd can double check this in about 10s by scrolling back through the quickfix\nlist.\u003c/p\u003e\n\u003ch2 id=\"vim-points-achieved\"\u003eVim points achieved \u003ca href=\"#vim-points-achieved\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou’re not a true vim enthusiast until you have spent 10 minutes writing a blog\npost about how vim saved you 5 minutes.  Check out all the other times this has\nhappened to me in the \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\"\u003evim\u003c/a\u003e tag.\u003c/p\u003e\n",
      "content_text": "\nHow to vimgrep over hidden files.\n\nI needed to delete all build pipeline steps that were named `upload docs`.  I\ncurrently have about 60 projects running from the same template all running\nvery similar builds.  In the past I've scripted out migrations for large\nchanges like this, they involved writing a python script that would load the\nyaml file into a dictionary, find the corresponding steps make the change and\nwrite it back out.\n\nToday's job was much simplar, just delete the step, were all steps are\nsurrounded by newlines.  My first thought was to just open all files in vim and\nrun `dap`.  I just needed to get these files:positions into my quickfix.  My\nissue is that all the builds reside within hidden directories by convention.\n\n## The issue\n_variability_\n\nAfter searching through all the projects it was clear that all the steps were\nin their own paragraph, though I was not 100% confident enough to completely\nautomate it, and the word `upload docs` was in the paragraph.\n\nsome were a two liner\n\n``` yaml\n- name: upload docs\n  script: aws s3 ...\n```\n\nSome had a variation in the name\n\n``` yaml\n- name: upload docs to s3\n  script: aws s3 ...\n```\n\nsome were more than 2 lines.\n\n\n``` yaml\n- name: upload docs\n  script: |\n    aws s3 ...\n```\n\nsome used a different command.\n\n``` yaml\n- name: upload docs\n  script: |\n    python ...\n```\n\n## Templates are great\n_but they change_\n\nTemplates are amazing, and tools like cookiecutter and copier are essential in\nmy workflow, but those templates change over time. Some things are a constant,\nand others like this one are an ever evolving beast until they are tamed into\nsomething the team is happy with.\n\n## vimgrep over hidden files ##\n\nI know all the files that I care to search for are called build.yml, and they\nare in a hidden directory.\n\n```\n:args `fd -H build.yml`\n:vimgrep /upload docs/ ##\n```\n\nOnce opened as a buffer by using args, and a handy fd command I can vimgrep\nover all the open buffers using `##`\n\n\u003e Open buffers are represented by ##\n\nNow I can just `dap` and `:cnext` my way through the list of changes that I\nhave, and know that I hit every one of them when I am at the end of my list.\nAnd can double check this in about 10s by scrolling back through the quickfix\nlist.\n\n## Vim points achieved\n\nYou're not a true vim enthusiast until you have spent 10 minutes writing a blog\npost about how vim saved you 5 minutes.  Check out all the other times this has\nhappened to me in the [vim](https://waylonwalker.com/vim/) tag.\n",
      "summary": "How to vimgrep over hidden files.",
      "date_published": "2022-08-22T13:17:32Z",
      "date_modified": "2022-08-22T13:17:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-0-3-0/",
      "url": "https://go.waylonwalker.com/markata-0-3-0/",
      "title": "markata 0.3.0 is 15-20% faster",
      "content_html": "\u003cp\u003e\u003ca href=\"https://images.waylonwalker.com/DALL%C2%B7E%202022-08-21%2015.03.04%20-%20An%20expressive%20oil%20painting%20of%20a%20sprinter%20edging%20out%20their%20component%20at%20the%20finish%20line,%20depicted%20as%20an%20explosion%20of%20a%20nebula.png\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://images.waylonwalker.com/DALL%C2%B7E%202022-08-21%2015.03.04%20-%20An%20expressive%20oil%20painting%20of%20a%20sprinter%20edging%20out%20their%20component%20at%20the%20finish%20line,%20depicted%20as%20an%20explosion%20of%20a%20nebula.png\" alt=\"image from Dall-e\" class=\"more-cinematic glightbox\"/ data-glightbox=\"description: image from Dall-e\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ea sprinter edging out his opponent by Dall-e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIt’s about time to release Markata 0.3.0.  I’ve had 8 pre-releases since the\nlast release, but more importantly it has about 3 months of updates.  Many of\nwhich are just cleaning up bad practices that were showing up as hot spots on\nmy \u003ccode\u003epyinstrument\u003c/code\u003e reports\u003c/p\u003e\n\u003cp\u003eMarkata started off partly as a python developer frustrated with using nodejs\nfor everything, and a desire to learn how to make frameworks in pluggy. Little\ndid I know how flexible pluggy would make it.  It started out just as my blog\ngenerator, but has turned into quite a bit more.\u003c/p\u003e\n\u003cp\u003eOver time this side project has grown some warts and some of them were now\nbecoming a big enough issue it was time to cut them out.\u003c/p\u003e\n\u003ch2 id=\"lets-compare\"\u003eLet’s compare \u003ca href=\"#lets-compare\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI like to use my tils articles for examples and tests like this as there are\nenough articles for a good test, but they are pretty short and quick to render.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir ~/git/tils/tils\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp  ~/git/waylonwalker.com/pages/til/ ~/tils/tils -r\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/git/tils/tils\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"running-tils-on-020\"\u003erunning tils on 0.2.0 \u003ca href=\"#running-tils-on-020\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAt the time of writing this is the current version of markata, so just make a\nnew venv and run it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m venv .venv --prompt \u003cspan class=\"k\"\u003e$(\u003c/span\u003ebasename \u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install markata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emarkata clean\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emarkata build\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ecold tils: 14.523\nwarm tils:  1.028\u003c/p\u003e\n\u003ch2 id=\"running-tils-on-030b8\"\u003erunning tils on 0.3.0b8 \u003ca href=\"#running-tils-on-030b8\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m venv .venv --prompt \u003cspan class=\"k\"\u003e$(\u003c/span\u003ebasename \u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# --pre installs pre-releases that include a b in their version name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install markata --pre\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emarkata clean\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emarkata build\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ecold tils: 11.551 (+20%)\nwarm tils:  0.860 (+16%)\u003c/p\u003e\n\u003ch2 id=\"pyinstrument\"\u003epyinstrument \u003ca href=\"#pyinstrument\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese measurements were taken with pyinstrument mostly out of convenience since\nthere is already a pyinstrument hook built in, but also because I like\npyinstrument.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/4dca6bd0-8b81-4260-a303-b062f7152a8c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/4dca6bd0-8b81-4260-a303-b062f7152a8c.webp\" alt=\"pyinstrument-markata==0.3.0b8-tils-hot.webp\"/ data-glightbox=\"description: pyinstrument-markata==0.3.0b8-tils-hot.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eHere is the pyinstrument report from the last run.\u003c/p\u003e\n\u003ch2 id=\"my-machine\"\u003eMy Machine \u003ca href=\"#my-machine\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis comparison was not very exhaustive. It was ran on my pretty new to me\nRyzen 5 3600 machine.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/80cd2f7a-8cf0-42ae-a235-d537478d00a7.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/80cd2f7a-8cf0-42ae-a235-d537478d00a7.webp\" alt=\"neofetch-8-21-2022.webp\"/ data-glightbox=\"description: neofetch-8-21-2022.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"the-changes\"\u003eThe changes \u003ca href=\"#the-changes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMost of these changes revolve in how the lifecycle is ran.  It was trying to be\nextra cautious and run previous steps for you if it thought it might be\nneedes, in reality it was rerunning a few steps multiple times no matter what.\u003c/p\u003e\n\u003cp\u003eThe other thing I turned off by default, but can be opted into, is\nbeautifulasoup’s prettify.  That was one of the slower steps ran on my site.\u003c/p\u003e\n\u003ch2 id=\"030\"\u003e0.3.0 \u003ca href=\"#030\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt should be out by the time you see this, I wanted to compare the changes I\nhad made and make sure that it was still making forward progress and thought I\nwould share the results.\u003c/p\u003e\n",
      "content_text": "\n![image from Dall-e](https://images.waylonwalker.com/DALL%C2%B7E%202022-08-21%2015.03.04%20-%20An%20expressive%20oil%20painting%20of%20a%20sprinter%20edging%20out%20their%20component%20at%20the%20finish%20line,%20depicted%20as%20an%20explosion%20of%20a%20nebula.png){.more-cinematic}\n\n\u003e a sprinter edging out his opponent by Dall-e\n\nIt's about time to release Markata 0.3.0.  I've had 8 pre-releases since the\nlast release, but more importantly it has about 3 months of updates.  Many of\nwhich are just cleaning up bad practices that were showing up as hot spots on\nmy `pyinstrument` reports\n\nMarkata started off partly as a python developer frustrated with using nodejs\nfor everything, and a desire to learn how to make frameworks in pluggy. Little\ndid I know how flexible pluggy would make it.  It started out just as my blog\ngenerator, but has turned into quite a bit more.\n\nOver time this side project has grown some warts and some of them were now\nbecoming a big enough issue it was time to cut them out.\n\n## Let's compare\n\nI like to use my tils articles for examples and tests like this as there are\nenough articles for a good test, but they are pretty short and quick to render.\n\n``` bash\nmkdir ~/git/tils/tils\ncp  ~/git/waylonwalker.com/pages/til/ ~/tils/tils -r\ncd ~/git/tils/tils\n```\n\n## running tils on 0.2.0\n\nAt the time of writing this is the current version of markata, so just make a\nnew venv and run it.\n\n``` bash\npython3 -m venv .venv --prompt $(basename $PWD)\npip install markata\nmarkata clean\nmarkata build\n```\n\ncold tils: 14.523\nwarm tils:  1.028\n\n## running tils on 0.3.0b8\n\n``` bash\npython3 -m venv .venv --prompt $(basename $PWD)\n# --pre installs pre-releases that include a b in their version name\npip install markata --pre\nmarkata clean\nmarkata build\n```\n\ncold tils: 11.551 (+20%)\nwarm tils:  0.860 (+16%)\n\n## pyinstrument\n\nThese measurements were taken with pyinstrument mostly out of convenience since\nthere is already a pyinstrument hook built in, but also because I like\npyinstrument.\n\n![pyinstrument-markata==0.3.0b8-tils-hot.webp](https://dropper.waylonwalker.com/api/file/4dca6bd0-8b81-4260-a303-b062f7152a8c.webp)\n\nHere is the pyinstrument report from the last run.\n\n## My Machine\n\nThis comparison was not very exhaustive. It was ran on my pretty new to me\nRyzen 5 3600 machine.\n\n![neofetch-8-21-2022.webp](https://dropper.waylonwalker.com/api/file/80cd2f7a-8cf0-42ae-a235-d537478d00a7.webp)\n\n## The changes\n\nMost of these changes revolve in how the lifecycle is ran.  It was trying to be\nextra cautious and run previous steps for you if it thought it might be\nneedes, in reality it was rerunning a few steps multiple times no matter what.\n\nThe other thing I turned off by default, but can be opted into, is\nbeautifulasoup's prettify.  That was one of the slower steps ran on my site.\n\n## 0.3.0\n\nIt should be out by the time you see this, I wanted to compare the changes I\nhad made and make sure that it was still making forward progress and thought I\nwould share the results.\n",
      "date_published": "2022-08-21T13:53:20Z",
      "date_modified": "2022-08-21T13:53:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/compvis-stable-diffusion/",
      "url": "https://go.waylonwalker.com/compvis-stable-diffusion/",
      "title": "⭐ CompVis stable-diffusion",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/CompVis/stable-diffusion\" 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\"\u003estable-diffusion\u003c/a\u003e by \u003ca href=\"https://github.com/CompVis\" 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\"\u003eCompVis\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA latent text-to-image diffusion model\u003c/p\u003e\n",
      "content_text": "\nCheck out [stable-diffusion](https://github.com/CompVis/stable-diffusion) by [CompVis](https://github.com/CompVis). It's a well-crafted project with great potential.\n\nA latent text-to-image diffusion model\n",
      "summary": "Check out stable-diffusion by CompVis. It's a well-crafted project with great potential.",
      "date_published": "2022-08-20T18:39:09Z",
      "date_modified": "2022-08-20T18:39:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-disable-hook/",
      "url": "https://go.waylonwalker.com/kedro-disable-hook/",
      "title": "How to Disable Kedro Viz | or any kedro hook",
      "date_published": "2022-08-08T21:01:03Z",
      "date_modified": "2022-08-08T21:01:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/name-it-claim-it-aim-it/",
      "url": "https://go.waylonwalker.com/name-it-claim-it-aim-it/",
      "title": "name it claim it aim it",
      "content_html": "\u003ch2 id=\"deliberative\"\u003eDeliberative \u003ca href=\"#deliberative\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003ePeople exceptionally talented in the Deliberative theme are best described by\nthe serious care they take in making decisions or choices. They anticipate\nobstacles.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI am risk-adverse.  I want everything well thought out and calculated before I\nmake any sort of change.  I have never gambled in my life and just the thought\nof it makes me anxious.\u003c/p\u003e\n\u003ch2 id=\"aim-it\"\u003eAim it \u003ca href=\"#aim-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI can use this as a strength to plan out potential issues and prevent them.  I\ndo this quite often with my role in infrastructure.\u003c/p\u003e\n\u003cp\u003eI need to make sure that I use deadlines to keep this as a strength and not\nhinderence.\u003c/p\u003e\n\u003ch2 id=\"automation\"\u003eAutomation \u003ca href=\"#automation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOne of the biggest ways that I utilize this skill is automation.  I am all\nabout automating things, not just because I don’t want to do the manual work,\nbut I am not sure when I am going to need to do something again.\u003c/p\u003e\n",
      "content_text": "\n\n## Deliberative\n\n\u003e People exceptionally talented in the Deliberative theme are best described by\n\u003e the serious care they take in making decisions or choices. They anticipate\n\u003e obstacles.\n\nI am risk-adverse.  I want everything well thought out and calculated before I\nmake any sort of change.  I have never gambled in my life and just the thought\nof it makes me anxious.\n\n## Aim it\n\nI can use this as a strength to plan out potential issues and prevent them.  I\ndo this quite often with my role in infrastructure.  \n\nI need to make sure that I use deadlines to keep this as a strength and not\nhinderence.\n\n## Automation\n\nOne of the biggest ways that I utilize this skill is automation.  I am all\nabout automating things, not just because I don't want to do the manual work,\nbut I am not sure when I am going to need to do something again.\n",
      "summary": "People exceptionally talented in the Deliberative theme are best described by \u003e the serious care they take in making decisions or choices. They anticipate \u003e...",
      "date_published": "2022-08-04T14:28:30Z",
      "date_modified": "2022-08-04T14:28:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/polybar-gpu-stats/",
      "url": "https://go.waylonwalker.com/polybar-gpu-stats/",
      "title": "Gpu Stats in my linux statusbar",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/polybar-gpu-stat.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/polybar-gpu-stat.png\" alt=\"polybar gpu stats\"/ data-glightbox=\"description: polybar gpu stats\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\n![polybar gpu stats](https://images.waylonwalker.com/polybar-gpu-stat.png)\n",
      "date_published": "2022-08-03T21:25:56Z",
      "date_modified": "2022-08-03T21:25:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/archlinux-aur/",
      "url": "https://go.waylonwalker.com/archlinux-aur/",
      "title": "⭐ archlinux aur",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/archlinux\" 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\"\u003earchlinux\u003c/a\u003e and their project \u003ca href=\"https://github.com/archlinux/aur\" 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\"\u003eaur\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e⚠️⚠️Experimental \u003ca href=\"/aur/\" class=\"glossary-term\" title=\"Arch User Repository, a collection of community maintained packages for archlinux.\"\u003eaur\u003c/a\u003e.\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e mirror⚠️⚠️ (read-only mirror)\u003c/p\u003e\n",
      "content_text": "\nCheck out [archlinux](https://github.com/archlinux) and their project [aur](https://github.com/archlinux/aur).\n\n⚠️⚠️Experimental aur.git mirror⚠️⚠️ (read-only mirror)\n",
      "summary": "Check out archlinux and their project aur.",
      "date_published": "2022-07-30T03:13:41Z",
      "date_modified": "2022-07-30T03:13:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/get-python-package-versions/",
      "url": "https://go.waylonwalker.com/get-python-package-versions/",
      "title": "get the version of any python package | python api",
      "content_html": "\u003cp\u003eA common meta thing that I need in python is to find the version of a package.\nMost of the time I reach for \u003ccode\u003epackage_name.__version__\u003c/code\u003e, but that does not\nalways work.\u003c/p\u003e\n\u003ch2 id=\"but-not-all-projects-have-a---version--\"\u003ebut not all projects have a \u003ccode\u003e__version__\u003c/code\u003e \u003ca href=\"#but-not-all-projects-have-a---version--\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn searching the internet for an answer nearly every one of them pointed me to\n\u003ccode\u003e__version__\u003c/code\u003e.  This works for most projects, but is simply a convention, its\nnot required.  Not all projects implement a \u003ccode\u003e__version__\u003c/code\u003e, but most do.  I’ve\nnever seen it lie to me, but there is nothing stopping someone from shipping\nmismatched versions.\u003c/p\u003e\n\u003ch2 id=\"if-you-maintain-a-project-ship-a---version--\"\u003eIf you maintain a project ship a \u003ccode\u003e__version__\u003c/code\u003e \u003ca href=\"#if-you-maintain-a-project-ship-a---version--\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eI appreciate it\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eWhile its not required its super handy and easy for anyone to remember off the\ntop of their head.  It makes it easy to start debugging differences between\nwhat you have vs what you see somewhere else. You can do this by dropping a\n\u003ccode\u003e__version__\u003c/code\u003e variable inside your  \u003ccode\u003e__init__.py\u003c/code\u003e file.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e## __init__.py\n__version__ = 1.0.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"so\"\u003eSO \u003ca href=\"#so\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003estack overflow saves the day\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to this\n\u003ca href=\"https://stackoverflow.com/questions/20180543/how-do-i-check-the-versions-of-python-modules/32965521#32965521\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eStack Overflow post\u003c/a\u003e\nfor answering this question for me.\u003c/p\u003e\n\u003ch2 id=\"so-what-do-you-do\"\u003eSo what do you do… \u003ca href=\"#so-what-do-you-do\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eimportlib\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eYour next option is to reach into the package metadata of the package that you\nare interested in, and this has changed over time as highlighted in the stack\noverflow post.\u003c/p\u003e\n\u003cp\u003efor Python \u0026gt;= 3.8:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efrom importlib.metadata import version\n\nversion(\u0026#39;markata\u0026#39;)\n# `0.3.0.b4`\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eI only really use python \u0026gt;= 3.8 these days, but if you need to implement it for\nan older version check out the stack overflow post.\u003c/p\u003e\n\u003ch2 id=\"another-option\"\u003eAnother option.. \u003ca href=\"#another-option\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003euse the command line\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAnother common option uses pip at the command line.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ pip show markata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eName: markata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eVersion: 0.3.0b4\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSummary: Static site generator plugins all the way down.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHome-page: https://markata.dev\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAuthor: Waylon Walker\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAuthor-email: waylon@waylonwalker.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLicense: MIT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLocation: /home/waylon/git/waylonwalker.com/.venv/lib/python3.11/site-packages\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRequires: anyconfig, beautifulsoup4, checksumdir, diskcache, feedgen, jinja2, more-itertools, pathspec, pillow, pluggy, pymdown-extensions, python-frontmatter, pytz, rich, textual, toml, typer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRequired-by:\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd if the package implements a command line its common to ship a version\ncommand such as \u003ccode\u003e--version\u003c/code\u003e or \u003ccode\u003e-V\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ markata --version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMarkata CLI Version: 0.3.0.b4\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"why-did-i-need-to-do-this\"\u003eWhy did I need to do this? \u003ca href=\"#why-did-i-need-to-do-this\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWell we have a cli tool that wraps around piptools and we wanted to include the\nversion of piptools in the comments that it produces dynamically.  This is why\nI wanted to dynamically grab the version inside python without shelling out to\n\u003ccode\u003epip show\u003c/code\u003e.  Now along with the version of our internal tool you will get the\nversion of \u003ccode\u003epiptools\u003c/code\u003e even though \u003ccode\u003epiptools\u003c/code\u003e does not ship a \u003ccode\u003e__version__\u003c/code\u003e\nvariable.\u003c/p\u003e\n\u003ch2 id=\"fin\"\u003eFin \u003ca href=\"#fin\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn the end, I am glad I learned that its so easy to use the more accurate\npackage metadata, but still appreciate packages shipping \u003ccode\u003e__version__\u003c/code\u003e for all\nof us n00b’s out here.\u003c/p\u003e\n",
      "content_text": "\nA common meta thing that I need in python is to find the version of a package.\nMost of the time I reach for `package_name.__version__`, but that does not\nalways work.\n\n## but not all projects have a `__version__`\n\nIn searching the internet for an answer nearly every one of them pointed me to\n`__version__`.  This works for most projects, but is simply a convention, its\nnot required.  Not all projects implement a `__version__`, but most do.  I've\nnever seen it lie to me, but there is nothing stopping someone from shipping\nmismatched versions.\n\n## If you maintain a project ship a `__version__`\n_I appreciate it_\n\nWhile its not required its super handy and easy for anyone to remember off the\ntop of their head.  It makes it easy to start debugging differences between\nwhat you have vs what you see somewhere else. You can do this by dropping a\n`__version__` variable inside your  `__init__.py` file.\n\n```\n## __init__.py\n__version__ = 1.0.0\n```\n\n## SO\n_stack overflow saves the day_\n\nSpecial thanks to this\n[Stack Overflow post](https://stackoverflow.com/questions/20180543/how-do-i-check-the-versions-of-python-modules/32965521#32965521)\nfor answering this question for me.\n\n## So what do you do...\n_importlib_\n\nYour next option is to reach into the package metadata of the package that you\nare interested in, and this has changed over time as highlighted in the stack\noverflow post.\n\nfor Python \u003e= 3.8:\n\n```\nfrom importlib.metadata import version\n\nversion('markata')\n# `0.3.0.b4`\n```\n\nI only really use python \u003e= 3.8 these days, but if you need to implement it for\nan older version check out the stack overflow post.\n\n## Another option..\n_use the command line_\n\nAnother common option uses pip at the command line.\n\n```bash\n❯ pip show markata\nName: markata\nVersion: 0.3.0b4\nSummary: Static site generator plugins all the way down.\nHome-page: https://markata.dev\nAuthor: Waylon Walker\nAuthor-email: waylon@waylonwalker.com\nLicense: MIT\nLocation: /home/waylon/git/waylonwalker.com/.venv/lib/python3.11/site-packages\nRequires: anyconfig, beautifulsoup4, checksumdir, diskcache, feedgen, jinja2, more-itertools, pathspec, pillow, pluggy, pymdown-extensions, python-frontmatter, pytz, rich, textual, toml, typer\nRequired-by:\n```\n\nAnd if the package implements a command line its common to ship a version\ncommand such as `--version` or `-V`.\n\n``` bash\n❯ markata --version\nMarkata CLI Version: 0.3.0.b4\n```\n\n## Why did I need to do this?\n\nWell we have a cli tool that wraps around piptools and we wanted to include the\nversion of piptools in the comments that it produces dynamically.  This is why\nI wanted to dynamically grab the version inside python without shelling out to\n`pip show`.  Now along with the version of our internal tool you will get the\nversion of `piptools` even though `piptools` does not ship a `__version__`\nvariable.\n\n## Fin\n\nIn the end, I am glad I learned that its so easy to use the more accurate\npackage metadata, but still appreciate packages shipping `__version__` for all\nof us n00b's out here.\n",
      "summary": "A common meta thing that I need in python is to find the version of a package. Most of the time I reach for , but that does not always work.",
      "date_published": "2022-07-29T15:48:36Z",
      "date_modified": "2022-07-29T15:48:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-gum/",
      "url": "https://go.waylonwalker.com/charmbracelet-gum/",
      "title": "⭐ charmbracelet gum",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/charmbracelet/gum\" 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\"\u003egum\u003c/a\u003e by \u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA tool for glamorous shell scripts 🎀\u003c/p\u003e\n",
      "content_text": "\nCheck out [gum](https://github.com/charmbracelet/gum) by [charmbracelet](https://github.com/charmbracelet). It's a well-crafted project with great potential.\n\nA tool for glamorous shell scripts 🎀\n",
      "summary": "Check out gum by charmbracelet. It's a well-crafted project with great potential.",
      "date_published": "2022-07-28T16:11:45Z",
      "date_modified": "2022-07-28T16:11:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mr-destructive-crossposter/",
      "url": "https://go.waylonwalker.com/mr-destructive-crossposter/",
      "title": "⭐ Mr-Destructive crossposter",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Mr-Destructive/crossposter\" 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\"\u003ecrossposter\u003c/a\u003e by \u003ca href=\"https://github.com/Mr-Destructive\" 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\"\u003eMr-Destructive\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eCrosspost your articles to dev.to, codenewbie.org, medium.com and hashnode.com with a single shellscript / python package\u003c/p\u003e\n",
      "content_text": "\nCheck out [crossposter](https://github.com/Mr-Destructive/crossposter) by [Mr-Destructive](https://github.com/Mr-Destructive). It's a well-crafted project with great potential.\n\nCrosspost your articles to dev.to, codenewbie.org, medium.com and hashnode.com with a single shellscript / python package\n",
      "summary": "Check out crossposter by Mr-Destructive. It's a well-crafted project with great potential.",
      "date_published": "2022-07-23T14:42:46Z",
      "date_modified": "2022-07-23T14:42:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/moonlight-stream-moonlight-qt/",
      "url": "https://go.waylonwalker.com/moonlight-stream-moonlight-qt/",
      "title": "⭐ moonlight-stream moonlight-qt",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/moonlight-stream/moonlight-qt\" 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\"\u003emoonlight-qt\u003c/a\u003e by \u003ca href=\"https://github.com/moonlight-stream\" 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\"\u003emoonlight-stream\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eGameStream client for PCs (Windows, Mac, Linux, and Steam Link)\u003c/p\u003e\n",
      "content_text": "\nJust starred [moonlight-qt](https://github.com/moonlight-stream/moonlight-qt) by [moonlight-stream](https://github.com/moonlight-stream). It's an exciting project with a lot to offer.\n\nGameStream client for PCs (Windows, Mac, Linux, and Steam Link)\n",
      "summary": "Just starred moonlight-qt by moonlight-stream. It's an exciting project with a lot to offer.",
      "date_published": "2022-07-20T14:29:13Z",
      "date_modified": "2022-07-20T14:29:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/moonlight-stream-moonlight-docs/",
      "url": "https://go.waylonwalker.com/moonlight-stream-moonlight-docs/",
      "title": "⭐ moonlight-stream moonlight-docs",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/moonlight-stream/moonlight-docs\" 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\"\u003emoonlight-docs\u003c/a\u003e by \u003ca href=\"https://github.com/moonlight-stream\" 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\"\u003emoonlight-stream\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eMoonlight Documentation\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [moonlight-docs](https://github.com/moonlight-stream/moonlight-docs) by [moonlight-stream](https://github.com/moonlight-stream), and it's truly impressive.\n\nMoonlight Documentation\n",
      "summary": "I recently discovered moonlight-docs by moonlight-stream, and it's truly impressive.",
      "date_published": "2022-07-20T14:29:01Z",
      "date_modified": "2022-07-20T14:29:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/arch-fonts/",
      "url": "https://go.waylonwalker.com/arch-fonts/",
      "title": "arch Fonts",
      "content_html": "\u003cp\u003e\u003ca href=\"https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gist.github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gist.github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nhttps://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7\n",
      "summary": "https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7",
      "date_published": "2022-07-17T10:59:59Z",
      "date_modified": "2022-07-17T10:59:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/xrandr-manager/",
      "url": "https://go.waylonwalker.com/xrandr-manager/",
      "title": "Manage your displays with xrandr manager",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/9cd8d65495366b8d57d805ca0faf5fd5.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/9cd8d65495366b8d57d805ca0faf5fd5.webp\" alt=\"a stable diffusion done with a111 web ui\"/ data-glightbox=\"description: a stable diffusion done with a111 web ui\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003exrandr is a great cli to manage your windows in a linux distro using x11, which\nis most of them. The issue is that I can never remember all the flags to the\ncommand, and if you are using it with something like a laptop using a dock the\nnames of all the displays tend to change every time you redock. This makes it\nreally hard to make scripts that work right every time.\u003c/p\u003e\n\u003ch2 id=\"homepage\"\u003eHomepage \u003ca href=\"#homepage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCheck out the\n\u003ca href=\"https://github.com/deresmos/xrandr-manager\" 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\"\u003ederesmos/xrandr-manager\u003c/a\u003e for more\ndetails on it.\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003einstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003exrander-manager is a python cli application that is simply a nice interface\ninto xrandr. So you must have xrandr already installed, which is generally\njust there on any x11 window manager, I’ve never had to install it.\u003c/p\u003e\n\u003cp\u003eAs with any python cli that is indended to be used as a global/system level cli\napplication I always install them with pipx. This automates the process of\ncreating a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e for xrandr-manager for me, and does not clutter\nup my system packages with its dependencies that may eventually clash with\nanother that I want to use.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e# prereqs (xrandr, pipx)\npipx install xrandr-manager\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"set-main-monitor\"\u003eset main monitor \u003ca href=\"#set-main-monitor\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFirst if your main display is not set to the correct monitor set your main\ndisplay first.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003exrandr-manager -m HDMI-0\nxrandr-manager -m DP-0\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"prompt-mode\"\u003eprompt mode \u003ca href=\"#prompt-mode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you dont know the name of your monitors and and don’t want to dig through\nxrandr, you can just run \u003ccode\u003e--prompt\u003c/code\u003e and tab complete to fill set your main\ndisplay.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003exrandr-manager --prompt\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"direction\"\u003edirection \u003ca href=\"#direction\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is what I most often use xrandr-manager for. Once you have the main\ndisplay set you can tell it where to put the other monitor. I’ve only tried\nthis with two monitors, I have no idea what happens with more monitors.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003exrandr-manager -d right\nxrandr-manager -d left\nxrandr-manager -d above\nxrandr-manager -d below\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"mirror\"\u003emirror \u003ca href=\"#mirror\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOne thing that I always need to jump through hoops to do is mirror.\nOccasionally I want to mirror so that more people can see the screen while we\nare split screen gaming. This has seemed like a pain in any other xrandr\nutility, but trivial in xrandr-manager.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003exrandr-manager --mirror\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"it-logs-out-the-xrandr-command\"\u003eIt logs out the xrandr command \u003ca href=\"#it-logs-out-the-xrandr-command\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOne nice thing about xrandr-manager is that it echos out the xrandr command\nthat it’s running. This is nice because you can toss this behind a hotkey or an\ninit script.\u003c/p\u003e\n\u003ch2 id=\"guis\"\u003eGuis \u003ca href=\"#guis\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYa there are guis that do this. I’ve had good luck with arandr. It’s more\nintuitive to drag windows around like what you would do in windows. Every once\nin awhile it messes up and my polybar overlaps my windows, or my windows end up\nonly on half the screen.\u003c/p\u003e\n\u003cp\u003eThere are also graphics card specific utilities, Ive used nvidia x server\nsettings and it mostly works similar to arandr.\u003c/p\u003e\n",
      "content_text": "\n![a stable diffusion done with a111 web ui](https://images.waylonwalker.com/9cd8d65495366b8d57d805ca0faf5fd5.webp)\n\nxrandr is a great cli to manage your windows in a linux distro using x11, which\nis most of them. The issue is that I can never remember all the flags to the\ncommand, and if you are using it with something like a laptop using a dock the\nnames of all the displays tend to change every time you redock. This makes it\nreally hard to make scripts that work right every time.\n\n## Homepage\n\nCheck out the\n[deresmos/xrandr-manager](https://github.com/deresmos/xrandr-manager) for more\ndetails on it.\n\n## installation\n\nxrander-manager is a python cli application that is simply a nice interface\ninto xrandr. So you must have xrandr already installed, which is generally\njust there on any x11 window manager, I've never had to install it.\n\nAs with any python cli that is indended to be used as a global/system level cli\napplication I always install them with pipx. This automates the process of\ncreating a virtual environment for xrandr-manager for me, and does not clutter\nup my system packages with its dependencies that may eventually clash with\nanother that I want to use.\n\n```\n# prereqs (xrandr, pipx)\npipx install xrandr-manager\n```\n\n## set main monitor\n\nFirst if your main display is not set to the correct monitor set your main\ndisplay first.\n\n```\nxrandr-manager -m HDMI-0\nxrandr-manager -m DP-0\n```\n\n## prompt mode\n\nIf you dont know the name of your monitors and and don't want to dig through\nxrandr, you can just run `--prompt` and tab complete to fill set your main\ndisplay.\n\n```\nxrandr-manager --prompt\n```\n\n## direction\n\nThis is what I most often use xrandr-manager for. Once you have the main\ndisplay set you can tell it where to put the other monitor. I've only tried\nthis with two monitors, I have no idea what happens with more monitors.\n\n```\nxrandr-manager -d right\nxrandr-manager -d left\nxrandr-manager -d above\nxrandr-manager -d below\n```\n\n## mirror\n\nOne thing that I always need to jump through hoops to do is mirror.\nOccasionally I want to mirror so that more people can see the screen while we\nare split screen gaming. This has seemed like a pain in any other xrandr\nutility, but trivial in xrandr-manager.\n\n```\nxrandr-manager --mirror\n```\n\n## It logs out the xrandr command\n\nOne nice thing about xrandr-manager is that it echos out the xrandr command\nthat it's running. This is nice because you can toss this behind a hotkey or an\ninit script.\n\n## Guis\n\nYa there are guis that do this. I've had good luck with arandr. It's more\nintuitive to drag windows around like what you would do in windows. Every once\nin awhile it messes up and my polybar overlaps my windows, or my windows end up\nonly on half the screen.\n\nThere are also graphics card specific utilities, Ive used nvidia x server\nsettings and it mostly works similar to arandr.\n",
      "summary": "xrandr is a great cli to manage your windows in a linux distro using x11, which is most of them. The issue is that I can never remember all the flags to the...",
      "date_published": "2022-07-16T08:43:17Z",
      "date_modified": "2022-07-16T08:43:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ijq/",
      "url": "https://go.waylonwalker.com/ijq/",
      "title": "Get better at jq interactively | ijq",
      "content_html": "\u003cp\u003e\u003ccode\u003ejq\u003c/code\u003e has some syntax that will sneak up on you with complexity. It looks so good,\nand so understandable, but everytime I go to use it myself, I don’t get it.\n\u003ccode\u003eijq\u003c/code\u003e is an interactive alternative to \u003ccode\u003ejq\u003c/code\u003e that gives you and nice repl that you\ncan iterate on queries quickly.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparu -Syu ijq\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere are some other articles, I decided to link at the time of writing this article.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/jut/\" class=\"wikilink\" data-title=\"JUT | Read Notebooks in the Terminal\" data-description=\"Trying to read a .ipynb file without starting a jupyter server? jut has you covered.\" data-date=\"2021-11-20\" data-preview=\"Trying to read a .ipynb file without starting a jupyter server? jut has you covered.\"\u003eJUT | Read Notebooks in the Terminal\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/kedro-node/\" class=\"wikilink\" data-title=\"Comprehensive guide to creating kedro nodes\" data-description=\"The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...\" data-date=\"2021-06-03\" data-preview=\"The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...\"\u003eComprehensive guide to creating kedro nodes\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/kedro-pickle/\" class=\"wikilink\" data-title=\"Kedro - My Data Is Not A Table\" data-description=\"In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.\" data-date=\"2021-01-14\" data-preview=\"In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.\"\u003eKedro - My Data Is Not A Table\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\n`jq` has some syntax that will sneak up on you with complexity. It looks so good,\nand so understandable, but everytime I go to use it myself, I don't get it.\n`ijq` is an interactive alternative to `jq` that gives you and nice repl that you\ncan iterate on queries quickly.\n\n```bash\nparu -Syu ijq\n```\n\nHere are some other articles, I decided to link at the time of writing this article.\n\n\u003ca href=\"/jut/\" class=\"wikilink\" data-title=\"JUT | Read Notebooks in the Terminal\" data-description=\"Trying to read a .ipynb file without starting a jupyter server? jut has you covered.\" data-date=\"2021-11-20\"\u003eJUT | Read Notebooks in the Terminal\u003c/a\u003e\n\n\u003ca href=\"/kedro-node/\" class=\"wikilink\" data-title=\"Comprehensive guide to creating kedro nodes\" data-description=\"The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...\" data-date=\"2021-06-03\"\u003eComprehensive guide to creating kedro nodes\u003c/a\u003e\n\n\u003ca href=\"/kedro-pickle/\" class=\"wikilink\" data-title=\"Kedro - My Data Is Not A Table\" data-description=\"In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.\" data-date=\"2021-01-14\"\u003eKedro - My Data Is Not A Table\u003c/a\u003e\n",
      "summary": "has some syntax that will sneak up on you with complexity. It looks so good, and so understandable, but everytime I go to use it myself, I don't get it. is...",
      "date_published": "2022-07-15T21:09:35Z",
      "date_modified": "2022-07-15T21:09:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/deresmos-xrandr-manager/",
      "url": "https://go.waylonwalker.com/deresmos-xrandr-manager/",
      "title": "⭐ deresmos xrandr-manager",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/deresmos\" 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\"\u003ederesmos’s\u003c/a\u003e project \u003ca href=\"https://github.com/deresmos/xrandr-manager\" 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\"\u003exrandr-manager\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eManage dual display  on Linux\u003c/p\u003e\n",
      "content_text": "\nI like [deresmos's](https://github.com/deresmos) project [xrandr-manager](https://github.com/deresmos/xrandr-manager).\n\nManage dual display  on Linux\n",
      "summary": "I like deresmos's project xrandr-manager.",
      "date_published": "2022-07-12T17:09:12Z",
      "date_modified": "2022-07-12T17:09:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/atar-axis-xpadneo/",
      "url": "https://go.waylonwalker.com/atar-axis-xpadneo/",
      "title": "⭐ atar-axis xpadneo",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/atar-axis/xpadneo\" 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\"\u003expadneo\u003c/a\u003e, created by \u003ca href=\"https://github.com/atar-axis\" 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\"\u003eatar-axis\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAdvanced Linux Driver for Xbox One Wireless Controller (shipped with Xbox One S)\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [xpadneo](https://github.com/atar-axis/xpadneo), created by [atar-axis](https://github.com/atar-axis).\n\nAdvanced Linux Driver for Xbox One Wireless Controller (shipped with Xbox One S)\n",
      "summary": "If you're into interesting projects, don't miss out on xpadneo, created by atar-axis.",
      "date_published": "2022-07-05T15:22:20Z",
      "date_modified": "2022-07-05T15:22:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/shaybox-launcher-curseforge/",
      "url": "https://go.waylonwalker.com/shaybox-launcher-curseforge/",
      "title": "⭐ ShayBox Launcher-Curseforge",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/ShayBox/Launcher-Curseforge\" 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\"\u003eLauncher-Curseforge\u003c/a\u003e from \u003ca href=\"https://github.com/ShayBox\" 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\"\u003eShayBox\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eIntegrates the CF Modpack install button to any MMC based launcher\u003c/p\u003e\n",
      "content_text": "\nI came across [Launcher-Curseforge](https://github.com/ShayBox/Launcher-Curseforge) from [ShayBox](https://github.com/ShayBox), and it's packed with great features and ideas.\n\nIntegrates the CF Modpack install button to any MMC based launcher\n",
      "summary": "I came across Launcher-Curseforge from ShayBox, and it's packed with great features and ideas.",
      "date_published": "2022-07-05T00:40:27Z",
      "date_modified": "2022-07-05T00:40:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/two-new-aliases-for-git/",
      "url": "https://go.waylonwalker.com/two-new-aliases-for-git/",
      "title": "Two new shell aliases for git",
      "content_html": "\u003cfigure\u003e\n\u003ca href=\"https://stable-diffusion.waylonwalker.com/000172.3260819219.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://stable-diffusion.waylonwalker.com/000172.3260819219.webp\" alt=\"Astronaut doing a mic drop with explosion\"/ data-glightbox=\"description: Astronaut doing a mic drop with explosion\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eRecently I added two new bash/zsh aliases to make my \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e experience just a tad\nbetter.\u003c/p\u003e\n\u003ch2 id=\"trackme\"\u003etrackme \u003ca href=\"#trackme\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMost of our work repos were recently migrated to new remote urls, we scriped\nout the update to all of the repos, but I was left with a tracking error for\nall of my open branches.  To easily resolve this I just made an alias so that I\ncan just run \u003ccode\u003etrackme\u003c/code\u003e anytime I see this error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThere is no tracking information for the current branch.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Please specify which branch you want to merge with.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    See git-pull(1) for details\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    git pull \u0026lt;remote\u0026gt; \u0026lt;branch\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIf you wish to set tracking information for this branch you can do so with:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    git branch --set-upstream develop origin/\u0026lt;branch\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"getting-the-branch\"\u003egetting the branch \u003ca href=\"#getting-the-branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe following command will always return the currently checked out branch name.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit symbolic-ref --short HEAD\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInjecting this into the suggested \u003ccode\u003egit\u003c/code\u003e command as a subshell gives us this\nalias that when ran with \u003ccode\u003etrackme\u003c/code\u003e will automatically fix tracking for my\nbranch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003etrackme\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"rebasemain\"\u003erebasemain \u003ca href=\"#rebasemain\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI sometimes get a bit lazy at checking main for changes before submitting any\nprs, so again I made a quick shell alias that will rebase main into my branch\nbefore I open a pr.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003erebasemain\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;git pull origin main --rebase\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"the-aliases\"\u003eThe Aliases \u003ca href=\"#the-aliases\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are both of the alias’s, feel free to steal and modify them into your\ndotfiles.  If you are uniniatiated a common starting place to put these is\neither in your \u003ccode\u003e~/.bashrch\u003c/code\u003e or \u003ccode\u003e~/.zshrc\u003c/code\u003e depending on your shell of choice.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003etrackme\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003erebasemain\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;git pull origin main --rebase\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n![Astronaut doing a mic drop with explosion](https://stable-diffusion.waylonwalker.com/000172.3260819219.webp)\n\nRecently I added two new bash/zsh aliases to make my git experience just a tad\nbetter.\n\n## trackme\n\nMost of our work repos were recently migrated to new remote urls, we scriped\nout the update to all of the repos, but I was left with a tracking error for\nall of my open branches.  To easily resolve this I just made an alias so that I\ncan just run `trackme` anytime I see this error.\n\n```txt\nThere is no tracking information for the current branch.\n    Please specify which branch you want to merge with.\n    See git-pull(1) for details\n\n    git pull \u003cremote\u003e \u003cbranch\u003e\n\nIf you wish to set tracking information for this branch you can do so with:\n\n    git branch --set-upstream develop origin/\u003cbranch\u003e\n```\n\n### getting the branch\n\nThe following command will always return the currently checked out branch name.\n\n``` bash\ngit symbolic-ref --short HEAD\n```\n\nInjecting this into the suggested `git` command as a subshell gives us this\nalias that when ran with `trackme` will automatically fix tracking for my\nbranch.\n\n``` bash\nalias trackme='git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)'\n```\n\n## rebasemain\n\nI sometimes get a bit lazy at checking main for changes before submitting any\nprs, so again I made a quick shell alias that will rebase main into my branch\nbefore I open a pr.\n\n``` bash\nalias rebasemain='git pull origin main --rebase'\n```\n\n## The Aliases\n\nHere are both of the alias's, feel free to steal and modify them into your\ndotfiles.  If you are uniniatiated a common starting place to put these is\neither in your `~/.bashrch` or `~/.zshrc` depending on your shell of choice.\n\n``` bash\nalias trackme='git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)'\nalias rebasemain='git pull origin main --rebase'\n```\n",
      "summary": "Recently I added two new bash/zsh aliases to make my git experience just a tad better.",
      "date_published": "2022-06-28T12:31:10Z",
      "date_modified": "2022-06-28T12:31:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jazzband-pip-tools/",
      "url": "https://go.waylonwalker.com/jazzband-pip-tools/",
      "title": "⭐ jazzband pip-tools",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/jazzband/pip-tools\" 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\"\u003epip-tools\u003c/a\u003e by \u003ca href=\"https://github.com/jazzband\" 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\"\u003ejazzband\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA set of tools to keep your pinned Python dependencies fresh.\u003c/p\u003e\n",
      "content_text": "\nCheck out [pip-tools](https://github.com/jazzband/pip-tools) by [jazzband](https://github.com/jazzband). It's a well-crafted project with great potential.\n\nA set of tools to keep your pinned Python dependencies fresh.\n",
      "summary": "Check out pip-tools by jazzband. It's a well-crafted project with great potential.",
      "date_published": "2022-06-17T14:39:30Z",
      "date_modified": "2022-06-17T14:39:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ipython-q-exit/",
      "url": "https://go.waylonwalker.com/ipython-q-exit/",
      "title": "IPython q to exit",
      "content_html": "\u003cp\u003eSo many terminal applications bind \u003ccode\u003eq\u003c/code\u003e to exit, even the python debugger, its\nmuscle memory for me. But to exit ipython I have to type out \u003ccode\u003eexit\u0026lt;ENTER\u0026gt;\u003c/code\u003e.\nThis is fine, but since q is muscle memory for me I get this error a few times\nper day.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮\n│ \u0026lt;ipython-input-1-2b66fd261ee5\u0026gt;:1 in \u0026lt;module\u0026gt;                                                     │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\nNameError: name \u0026#39;q\u0026#39; is not defined\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eAfter digging way too deep into how IPython implements its \u003ccode\u003eExitAutoCall\u003c/code\u003e I\nrealized there was a very simple solution here. \u003ccode\u003eIPython\u003c/code\u003e automatically\nimports all the scripts you put in your profile directory, all I needed was to\ncreate \u003ccode\u003e~/.ipython/profile_default/startup/q.py\u003c/code\u003e with the following.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eq = exit\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIt was that simple. This is not a game changer by any means, but I will now\nsee one less error in my workflow. I just press \u003ccode\u003eq\u0026lt;Enter\u0026gt;\u003c/code\u003e and I am out,\nwithout error.\u003c/p\u003e\n",
      "content_text": "\nSo many terminal applications bind `q` to exit, even the python debugger, its\nmuscle memory for me. But to exit ipython I have to type out `exit\u003cENTER\u003e`.\nThis is fine, but since q is muscle memory for me I get this error a few times\nper day.\n\n```\n╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮\n│ \u003cipython-input-1-2b66fd261ee5\u003e:1 in \u003cmodule\u003e                                                     │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\nNameError: name 'q' is not defined\n```\n\nAfter digging way too deep into how IPython implements its `ExitAutoCall` I\nrealized there was a very simple solution here. `IPython` automatically\nimports all the scripts you put in your profile directory, all I needed was to\ncreate `~/.ipython/profile_default/startup/q.py` with the following.\n\n```\nq = exit\n```\n\nIt was that simple. This is not a game changer by any means, but I will now\nsee one less error in my workflow. I just press `q\u003cEnter\u003e` and I am out,\nwithout error.\n",
      "summary": "So many terminal applications bind to exit, even the python debugger, its muscle memory for me. But to exit ipython I have to type out . This is fine, but...",
      "date_published": "2022-06-13T10:10:34Z",
      "date_modified": "2022-06-13T10:10:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier-slugify/",
      "url": "https://go.waylonwalker.com/copier-slugify/",
      "title": "Copier Slugify | python templating | using cookiecutter",
      "content_html": "\u003cp\u003eIt’s no secret that I love automation, and lately my templating framework of\nchoice has been copier.  One hiccup I recently ran into was having spaces in my\ntemplated directory names.  This makes it harder to run commands against as you\nneed to escape them, and if they end up in a url you end up with ugly \u003ccode\u003e%20\u003c/code\u003e all\nover.\u003c/p\u003e\n\u003ch2 id=\"cookiecutter-has-the-solution\"\u003eCookiecutter has the solution \u003ca href=\"#cookiecutter-has-the-solution\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYes the solution comes from a competing templating framework.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI install copier with pipx, so I need to inject cookiecutter in to my copier\nenvironment to use the slugify filter.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx inject copier cookiecutter\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you are using a normal \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e you can just pip install it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install copier cookiecutter\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"add-the-extension-to-your-template\"\u003eadd the extension to your template \u003ca href=\"#add-the-extension-to-your-template\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ecopier.yml\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNow to enable the extension you need to declare it in your \u003ccode\u003ecopier.yml\u003c/code\u003e file in\nyour template.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003e_jinja_extensions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"l\"\u003ecookiecutter.extensions.SlugifyExtension\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"use-it--slugify\"\u003eUse it | slugify \u003ca href=\"#use-it--slugify\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003euse-it\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNow to use it, anywhere that you want to slugify a variable, you just pipe it\ninto slugify.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── copier.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── \u003cspan class=\"o\"\u003e{{\u003c/span\u003e site_name\u003cspan class=\"p\"\u003e|\u003c/span\u003eslugify \u003cspan class=\"o\"\u003e}}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    └── markata.toml.jinja\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e directory, \u003cspan class=\"m\"\u003e3\u003c/span\u003e files\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere is a slimmed down version of what the \u003ccode\u003ecopier.yml\u003c/code\u003e looks like.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003esite_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003estr\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ehelp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eWhat is the name of your site, this shows in seo description and the site title.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDin Djarin\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_jinja_extensions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"l\"\u003ecookiecutter.extensions.SlugifyExtension\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"results\"\u003eResults \u003ca href=\"#results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRunning the template looks a bit like this.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/ffd34b52-cef7-4de8-b451-4426989fb70c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/ffd34b52-cef7-4de8-b451-4426989fb70c.webp\" alt=\"copier-cookiecutter-slugify.webp\"/ data-glightbox=\"description: copier-cookiecutter-slugify.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003chr/\u003e\n\u003ch2 id=\"straight-from-their-docs\"\u003estraight from their docs \u003ca href=\"#straight-from-their-docs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe next section is straight from the \u003ca href=\"https://cookiecutter.readthedocs.io/en/latest/advanced/template_extensions.html#slugify-extension\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/cookiecutter.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/cookiecutter.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003ecookiecutter docs\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"slugify-extension\"\u003eSlugify extension \u003ca href=\"#slugify-extension\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe \u003ccode\u003ecookiecutter.extensions.SlugifyExtension\u003c/code\u003e extension provides a \u003ccode\u003eslugify\u003c/code\u003e\nfilter in templates that converts string into its dashed (“slugified”) version:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"x\"\u003e{% \u0026#34;It\u0026#39;s a random version\u0026#34; | slugify %}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWould output:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eit-s-a-random-version\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIt is different from a mere replace of spaces since it also treats some special\ncharacters differently such as \u003ccode\u003e\u0026#39;\u003c/code\u003e in the example above. The function accepts\nall arguments that can be passed to the \u003ccode\u003eslugify\u003c/code\u003e function of\n\u003ccode\u003epython-slugify\u003c/code\u003e_. For example to change the output from\n\u003ccode\u003eit-s-a-random-version\u003c/code\u003e to \u003ccode\u003eit_s_a_random_version\u003c/code\u003e, the \u003ccode\u003eseparator\u003c/code\u003e parameter\nwould be passed: \u003ccode\u003eslugify(separator=\u0026#39;_\u0026#39;)\u003c/code\u003e.\u003c/p\u003e\n",
      "content_text": "\nIt's no secret that I love automation, and lately my templating framework of\nchoice has been copier.  One hiccup I recently ran into was having spaces in my\ntemplated directory names.  This makes it harder to run commands against as you\nneed to escape them, and if they end up in a url you end up with ugly `%20` all\nover.\n\n## Cookiecutter has the solution\n\n\u003e Yes the solution comes from a competing templating framework.\n\nI install copier with pipx, so I need to inject cookiecutter in to my copier\nenvironment to use the slugify filter.\n\n``` bash\npipx inject copier cookiecutter\n```\n\nIf you are using a normal virtual environment you can just pip install it.\n\n``` bash\npip install copier cookiecutter\n```\n\n## add the extension to your template\n\n_copier.yml_\n\nNow to enable the extension you need to declare it in your `copier.yml` file in\nyour template.\n\n``` yaml\n_jinja_extensions:\n    - cookiecutter.extensions.SlugifyExtension\n```\n\n## Use it | slugify\n\n_use-it_\n\nNow to use it, anywhere that you want to slugify a variable, you just pipe it\ninto slugify.\n\n``` bash\n❯ tree .\n.\n├── copier.yml\n├── README.md\n└── {{ site_name|slugify }}\n    └── markata.toml.jinja\n\n1 directory, 3 files\n```\n\nHere is a slimmed down version of what the `copier.yml` looks like.\n\n``` yml\nsite_name:\n  type: str\n  help: What is the name of your site, this shows in seo description and the site title.\n  default: Din Djarin\n\n_jinja_extensions:\n    - cookiecutter.extensions.SlugifyExtension\n```\n\n## Results\n\nRunning the template looks a bit like this.\n\n![copier-cookiecutter-slugify.webp](https://dropper.waylonwalker.com/api/file/ffd34b52-cef7-4de8-b451-4426989fb70c.webp)\n\n---\n\n## straight from their docs\n\nThe next section is straight from the [cookiecutter docs](\nhttps://cookiecutter.readthedocs.io/en/latest/advanced/template_extensions.html#slugify-extension)\n\n### Slugify extension\n\nThe `cookiecutter.extensions.SlugifyExtension` extension provides a `slugify`\nfilter in templates that converts string into its dashed (\"slugified\") version:\n\n``` jinja\n{% \"It's a random version\" | slugify %}\n```\n\nWould output:\n\n```\nit-s-a-random-version\n```\n\nIt is different from a mere replace of spaces since it also treats some special\ncharacters differently such as `'` in the example above. The function accepts\nall arguments that can be passed to the `slugify` function of\n`python-slugify`_. For example to change the output from\n`it-s-a-random-version` to `it_s_a_random_version`, the `separator` parameter\nwould be passed: `slugify(separator='_')`.\n",
      "summary": "It's no secret that I love automation, and lately my templating framework of choice has been copier. One hiccup I recently ran into was having spaces in my...",
      "date_published": "2022-06-11T12:37:50Z",
      "date_modified": "2022-06-11T12:37:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/box-cli-maker-box-cli-maker/",
      "url": "https://go.waylonwalker.com/box-cli-maker-box-cli-maker/",
      "title": "⭐ box-cli-maker box-cli-maker",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/box-cli-maker/box-cli-maker\" 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\"\u003ebox-cli-maker\u003c/a\u003e from \u003ca href=\"https://github.com/box-cli-maker\" 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\"\u003ebox-cli-maker\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eRender highly customizable boxes in the terminal\u003c/p\u003e\n",
      "content_text": "\nI came across [box-cli-maker](https://github.com/box-cli-maker/box-cli-maker) from [box-cli-maker](https://github.com/box-cli-maker), and it's packed with great features and ideas.\n\nRender highly customizable boxes in the terminal\n",
      "summary": "I came across box-cli-maker from box-cli-maker, and it's packed with great features and ideas.",
      "date_published": "2022-06-10T17:48:47Z",
      "date_modified": "2022-06-10T17:48:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/delta456-box-cli-maker/",
      "url": "https://go.waylonwalker.com/delta456-box-cli-maker/",
      "title": "⭐ Delta456 box-cli-maker",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Delta456/box-cli-maker\" 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\"\u003ebox-cli-maker\u003c/a\u003e by \u003ca href=\"https://github.com/Delta456\" 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\"\u003eDelta456\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eMake Highly Customized Boxes for CLI\u003c/p\u003e\n",
      "content_text": "\n[box-cli-maker](https://github.com/Delta456/box-cli-maker) by [Delta456](https://github.com/Delta456) is a game-changer in its space. Excited to see how it evolves.\n\nMake Highly Customized Boxes for CLI\n",
      "summary": "box-cli-maker by Delta456 is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2022-06-10T17:48:47Z",
      "date_modified": "2022-06-10T17:48:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gh-repo-create/",
      "url": "https://go.waylonwalker.com/gh-repo-create/",
      "title": "gh repo create",
      "content_html": "\u003cp\u003eI love getting faster in my workflow, something I have recently added in is\ncreating GitHub repos with the cli.  I often create little examples of\nprojects, but they just end up on my machine and not anywhere that someone else\ncan see, mostly because it takes more effort to go create a repo.  TIL you can\ncreate a repo right from the command line and push to it immediately.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh repo create waylonwalker-cli\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/3a889b2a-d83f-4f42-a849-1c34b8e6365c.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/3a889b2a-d83f-4f42-a849-1c34b8e6365c.webp\" alt=\"gh-repo-create.webp\"/ data-glightbox=\"description: gh-repo-create.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"want-to-see-what-this-repo-i-created-is-about\"\u003ewant to see what this repo I created is about? \u003ca href=\"#want-to-see-what-this-repo-i-created-is-about\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCheck out what I created here.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epipx run waylonwalker\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nI love getting faster in my workflow, something I have recently added in is\ncreating GitHub repos with the cli.  I often create little examples of\nprojects, but they just end up on my machine and not anywhere that someone else\ncan see, mostly because it takes more effort to go create a repo.  TIL you can\ncreate a repo right from the command line and push to it immediately.\n\n``` bash\ngh repo create waylonwalker-cli\n```\n\n![gh-repo-create.webp](https://dropper.waylonwalker.com/api/file/3a889b2a-d83f-4f42-a849-1c34b8e6365c.webp)\n\n## want to see what this repo I created is about?\n\nCheck out what I created here.\n\n```\npipx run waylonwalker\n```\n",
      "summary": "I love getting faster in my workflow, something I have recently added in is creating GitHub repos with the cli. I often create little examples of projects,...",
      "date_published": "2022-06-10T11:53:32Z",
      "date_modified": "2022-06-10T11:53:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textual-has-devtools/",
      "url": "https://go.waylonwalker.com/textual-has-devtools/",
      "title": "Textual has devtools",
      "content_html": "\u003cp\u003eTextual has devtools in the upcoming css branch, and its pretty awesome!\u003c/p\u003e\n\u003ch2 id=\"its-still-early\"\u003eIt’s still early \u003ca href=\"#its-still-early\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTextual is still very early and not really ready for prime time, but it’s quite\namazing how easy some things such as creating keybindings is. The docs are\ncoming, but missing right now so if you want to use textual be ready for\nreading source code and examples.\u003c/p\u003e\n\u003ch2 id=\"on-to-the-devtools\"\u003eOn to the devtools \u003ca href=\"#on-to-the-devtools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAs \u003ca href=\"https://twitter.com/willmcgugan\"\u003e@willmcgugan\u003c/a\u003e shows in this tweet it’s\npretty easy to setup, it requires having two terminals open, or using tmux, and\ncurrently you have to use the css branch.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/willmcgugan/status/1531294412696956930\" class=\"hoverlink\"\u003ehttps://twitter.com/willmcgugan/status/1531294412696956930\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"why-does-textual-need-its-own-devtools\"\u003eWhy does textual need its own devtools \u003ca href=\"#why-does-textual-need-its-own-devtools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTextual is a tui application framework. Unlike when you are building cli\napplications, when the tui takes over the terminal in full screen there is no\nwhere to print statement debug, and breakpoints don’t work.\u003c/p\u003e\n\u003ch2 id=\"getting-the-css-branch\"\u003egetting the css branch \u003ca href=\"#getting-the-css-branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn the future it will likely be in main and not need this, but for now you need\nto get the css branch to get devtools.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/Textualize/textual\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit fetch --alll\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout css\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"install-in-a-virtual-environment\"\u003einstall in a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e \u003ca href=\"#install-in-a-virtual-environment\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow you can create a virtual environment, feel free to use whatever virtual\nenvironment tool you want, venv is built in to most python distributions\nthough, and should just be there.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m venv .venv --prompt textual\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e .venv/bin/activate\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"now-that-we-have-textual-installed\"\u003eNow that we have textual installed \u003ca href=\"#now-that-we-have-textual-installed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce textual is installed you can open up the devtools by running textual console.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etextual console\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/9a528fd8-7f06-4a6d-b46e-26165e4a0e93.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/9a528fd8-7f06-4a6d-b46e-26165e4a0e93.webp\" alt=\"textual-console.webp\"/ data-glightbox=\"description: textual-console.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nTextual has devtools in the upcoming css branch, and its pretty awesome!\n\n## It's still early\n\nTextual is still very early and not really ready for prime time, but it's quite\namazing how easy some things such as creating keybindings is. The docs are\ncoming, but missing right now so if you want to use textual be ready for\nreading source code and examples.\n\n## On to the devtools\n\nAs [@willmcgugan](https://twitter.com/willmcgugan) shows in this tweet it's\npretty easy to setup, it requires having two terminals open, or using tmux, and\ncurrently you have to use the css branch.\n\n[https://twitter.com/willmcgugan/status/1531294412696956930](https://twitter.com/willmcgugan/status/1531294412696956930){.hoverlink}\n\n## Why does textual need its own devtools\n\nTextual is a tui application framework. Unlike when you are building cli\napplications, when the tui takes over the terminal in full screen there is no\nwhere to print statement debug, and breakpoints don't work.\n\n## getting the css branch\n\nIn the future it will likely be in main and not need this, but for now you need\nto get the css branch to get devtools.\n\n```bash\ngit clone https://github.com/Textualize/textual\ngit fetch --alll\ngit checkout css\n```\n\n## install in a virtual environment\n\nNow you can create a virtual environment, feel free to use whatever virtual\nenvironment tool you want, venv is built in to most python distributions\nthough, and should just be there.\n\n```bash\npython3 -m venv .venv --prompt textual\nsource .venv/bin/activate\npip install .\n```\n\n## Now that we have textual installed\n\nOnce textual is installed you can open up the devtools by running textual console.\n\n```bash\ntextual console\n```\n\n![textual-console.webp](https://dropper.waylonwalker.com/api/file/9a528fd8-7f06-4a6d-b46e-26165e4a0e93.webp)\n",
      "summary": "Textual has devtools in the upcoming css branch, and its pretty awesome!",
      "date_published": "2022-06-09T21:21:11Z",
      "date_modified": "2022-06-09T21:21:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/notunlikethewaves-minesweeper/",
      "url": "https://go.waylonwalker.com/notunlikethewaves-minesweeper/",
      "title": "⭐ NotUnlikeTheWaves minesweeper",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/NotUnlikeTheWaves/minesweeper\" 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\"\u003eminesweeper\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/NotUnlikeTheWaves\" 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\"\u003eNotUnlikeTheWaves\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA minesweeper in the terminal written in Golang with Bubbletea\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [minesweeper](https://github.com/NotUnlikeTheWaves/minesweeper), an amazing project by [NotUnlikeTheWaves](https://github.com/NotUnlikeTheWaves). It's worth exploring!\n\nA minesweeper in the terminal written in Golang with Bubbletea\n",
      "summary": "I'm really excited about minesweeper, an amazing project by NotUnlikeTheWaves. It's worth exploring!",
      "date_published": "2022-06-07T17:53:27Z",
      "date_modified": "2022-06-07T17:53:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jrnxf-gh-eco/",
      "url": "https://go.waylonwalker.com/jrnxf-gh-eco/",
      "title": "⭐ jrnxf gh-eco",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/jrnxf/gh-eco\" 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\"\u003egh-eco\u003c/a\u003e by \u003ca href=\"https://github.com/jrnxf\" 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\"\u003ejrnxf\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🦎 gh cli extension to explore the ecosystem\u003c/p\u003e\n",
      "content_text": "\nThe work on [gh-eco](https://github.com/jrnxf/gh-eco) by [jrnxf](https://github.com/jrnxf).\n\n🦎 gh cli extension to explore the ecosystem\n",
      "summary": "The work on gh-eco by jrnxf.",
      "date_published": "2022-06-04T16:44:49Z",
      "date_modified": "2022-06-04T16:44:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-atexit/",
      "url": "https://go.waylonwalker.com/python-atexit/",
      "title": "Python atexit",
      "content_html": "\u003cblockquote\u003e\n\u003cp\u003etotally guessed at this post’s date\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI’m still trying to understand this one, but this is how you force a\npython object to stop atexit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eatexit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eServer\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eauto_restart\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003ebool\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnion\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Path\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e8000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003edirectory\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emarkata\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003em\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003edirectory\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003em\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;output_dir\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efind_port\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estart_server\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eatexit\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ekill\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003estart_server\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esubprocess\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;python\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;-m\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;http.server\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;--directory\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estderr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePIPE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePIPE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estart_time\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ekill\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eauto_restart\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ekill\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003e__rich__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epoll\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[green]serving on port: [gold1]\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e [green]using pid: [gold1]\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epid\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e [green]uptime: [gold1]\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003euptime\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e [green]link: [gold1] http://localhost:\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e[/]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eborder_style\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;blue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;server\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eauto_restart\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estart_server\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[red]server died\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;server\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eborder_style\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;red\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\u003e totally guessed at this post's date\n\nI'm still trying to understand this one, but this is how you force a\npython object to stop atexit.\n\n```python\nimport atexit\n\nclass Server:\n    def __init__(\n        self,\n        auto_restart: bool = True,\n        directory: Union[str, \"Path\"] = None,\n        port: int = 8000,\n    ):\n        if directory is None:\n            from markata import Markata\n\n            m = Markata()\n            directory = m.config[\"output_dir\"]\n\n        self.directory = directory\n        self.port = find_port(port=port)\n        self.start_server()\n        atexit.register(self.kill)\n\n    def start_server(self):\n        import subprocess\n\n        self.cmd = [\n            \"python\",\n            \"-m\",\n            \"http.server\",\n            str(self.port),\n            \"--directory\",\n            self.directory,\n        ]\n\n        self.proc = subprocess.Popen(\n            self.cmd,\n            stderr=subprocess.PIPE,\n            stdout=subprocess.PIPE,\n        )\n        self.start_time = time.time()\n\n\n    def kill(self):\n        self.auto_restart = False\n        self.proc.kill()\n\n    def __rich__(self) -\u003e Panel:\n        if not self.proc.poll():\n            return Panel(\n                f\"[green]serving on port: [gold1]{self.port} [green]using pid: [gold1]{self.proc.pid} [green]uptime: [gold1]{self.uptime} [green]link: [gold1] http://localhost:{self.port}[/]\",\n                border_style=\"blue\",\n                title=\"server\",\n            )\n\n        else:\n            if self.auto_restart:\n                self.start_server()\n\n            return Panel(f\"[red]server died\", title=\"server\", border_style=\"red\")\n```\n",
      "summary": "totally guessed at this post's date",
      "date_published": "2022-06-02T23:45:55Z",
      "date_modified": "2022-06-02T23:45:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pip-require-virtualenv/",
      "url": "https://go.waylonwalker.com/pip-require-virtualenv/",
      "title": "The one pip config you need to have",
      "content_html": "\u003cp\u003eWhenever you are installing python packages, you should always use a virtual\nenvironment.  pip makes this easy to follow by adding some configuration to\npip.\u003c/p\u003e\n\u003ch2 id=\"require-virtualenv\"\u003erequire-virtualenv \u003ca href=\"#require-virtualenv\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePip is the pacakage tool for python.  It installs third-party packages and is\nconfigurable.  One of the configuration settings that I highly reccommend\neveryone to add is \u003ccode\u003erequire-virtualenv\u003c/code\u003e.  This will stop pip from installing\nany packages if you have not activated a virtualenv.\u003c/p\u003e\n\u003ch2 id=\"why\"\u003ewhy \u003ca href=\"#why\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003epython packages often require many different dependencies, sometimes packages\nare up to date and sometimes they require different versions of dependencies.\nIf you install everything in one environment its easy to end up with version\nconflict issues that are really hard to resolve, especially since your system\nenvironment cannot easily be restarted.\u003c/p\u003e\n\u003ch2 id=\"pipx-my-one-exception\"\u003ePIPX my one exception \u003ca href=\"#pipx-my-one-exception\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMy one exception that I put in my system level packages is \u003ccode\u003epipx\u003c/code\u003e.  \u003ccode\u003epipx\u003c/code\u003e is\nvery handy as it manages virtual environments for you and is intended for\ncommand line utilities that would end up in your system env or require you to\nmanually manage virtual environments without it.\u003c/p\u003e\n\u003ch2 id=\"pip-config\"\u003epip config \u003ca href=\"#pip-config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYour pip config might be found in either \u003ccode\u003e~/.pip/pip.conf\u003c/code\u003e or\n\u003ccode\u003e~/.config/pip/pip.conf\u003c/code\u003e.  You can either use the \u003ccode\u003epip config set\u003c/code\u003e command or\nedit one of these files manually.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip config \u003cspan class=\"nb\"\u003eset\u003c/span\u003e global.require-virtualenv True\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow you sould see this in your \u003ccode\u003e~/.config/pip/pip.conf\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eglobal\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003erequire-virtualenv\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"pip-config-debug\"\u003epip config debug \u003ca href=\"#pip-config-debug\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want to know where pip is looking for configuration on your system, and\nwhat files are setting a certain config you can use \u003ccode\u003epip config debug\u003c/code\u003e to find\nit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ pip config debug\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eenv_var:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eenv:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eglobal:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /etc/xdg/xdg-awesome/pip/pip.conf, exists: False\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /etc/xdg/pip/pip.conf, exists: False\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /etc/pip.conf, exists: False\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esite:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /home/waylon/git/waylonwalker.com/.venv/pip.conf, exists: False\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euser:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /home/waylon/.pip/pip.conf, exists: False\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /home/waylon/.config/pip/pip.conf, exists: True\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    global.require-virtualenv: True\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"saved-my-bacon\"\u003esaved my bacon \u003ca href=\"#saved-my-bacon\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis setting recently saved me when I modified my \u003ccode\u003e.envrc\u003c/code\u003e file my virtual\nenvironment deactivated, so when I went to pip install something it gave me an\nerror that it was not active.  Situations like this are an easy way to pollute\nyour system with packages that it does not need installed.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/fdb3d2bc-fd70-4b5b-acaa-aedc91c528b0.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/fdb3d2bc-fd70-4b5b-acaa-aedc91c528b0.webp\" alt=\"pip-require-virtualenv-direnv-error.webp\"/ data-glightbox=\"description: pip-require-virtualenv-direnv-error.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"tldr\"\u003eTLDR \u003ca href=\"#tldr\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRun this at your command line to avoid polluting your system environment by\nmistake before running any pip command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip config \u003cspan class=\"nb\"\u003eset\u003c/span\u003e global.require-virtualenv True\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nWhenever you are installing python packages, you should always use a virtual\nenvironment.  pip makes this easy to follow by adding some configuration to\npip.\n\n## require-virtualenv\n\nPip is the pacakage tool for python.  It installs third-party packages and is\nconfigurable.  One of the configuration settings that I highly reccommend\neveryone to add is `require-virtualenv`.  This will stop pip from installing\nany packages if you have not activated a virtualenv.\n\n## why\n\npython packages often require many different dependencies, sometimes packages\nare up to date and sometimes they require different versions of dependencies.\nIf you install everything in one environment its easy to end up with version\nconflict issues that are really hard to resolve, especially since your system\nenvironment cannot easily be restarted.\n\n## PIPX my one exception\n\nMy one exception that I put in my system level packages is `pipx`.  `pipx` is\nvery handy as it manages virtual environments for you and is intended for\ncommand line utilities that would end up in your system env or require you to\nmanually manage virtual environments without it.\n\n## pip config\n\nYour pip config might be found in either `~/.pip/pip.conf` or\n`~/.config/pip/pip.conf`.  You can either use the `pip config set` command or\nedit one of these files manually.\n\n```bash\npip config set global.require-virtualenv True\n```\n\nNow you sould see this in your `~/.config/pip/pip.conf`\n\n``` toml\n[global]\nrequire-virtualenv = True\n```\n\n## pip config debug\n\nIf you want to know where pip is looking for configuration on your system, and\nwhat files are setting a certain config you can use `pip config debug` to find\nit.\n\n``` bash\n❯ pip config debug\n\nenv_var:\nenv:\nglobal:\n  /etc/xdg/xdg-awesome/pip/pip.conf, exists: False\n  /etc/xdg/pip/pip.conf, exists: False\n  /etc/pip.conf, exists: False\nsite:\n  /home/waylon/git/waylonwalker.com/.venv/pip.conf, exists: False\nuser:\n  /home/waylon/.pip/pip.conf, exists: False\n  /home/waylon/.config/pip/pip.conf, exists: True\n    global.require-virtualenv: True\n```\n\n## saved my bacon\n\nThis setting recently saved me when I modified my `.envrc` file my virtual\nenvironment deactivated, so when I went to pip install something it gave me an\nerror that it was not active.  Situations like this are an easy way to pollute\nyour system with packages that it does not need installed.\n\n![pip-require-virtualenv-direnv-error.webp](https://dropper.waylonwalker.com/api/file/fdb3d2bc-fd70-4b5b-acaa-aedc91c528b0.webp)\n\n## TLDR\n\nRun this at your command line to avoid polluting your system environment by\nmistake before running any pip command.\n\n```bash\npip config set global.require-virtualenv True\n```\n",
      "summary": "Whenever you are installing python packages, you should always use a virtual environment. pip makes this easy to follow by adding some configuration to pip.",
      "date_published": "2022-06-01T10:31:09Z",
      "date_modified": "2022-06-01T10:31:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pyenv-no-sqlite3/",
      "url": "https://go.waylonwalker.com/pyenv-no-sqlite3/",
      "title": "pyenv no module named '_sqlite3'",
      "content_html": "\u003cp\u003eI’ve been trying to adopt pyenv for a few months, but have been completely\nblocked by this issue on one of the main machines I use.  Whenever I start up\nipython I get the following error.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eImportError: No module named \u0026#39;_sqlite3\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eI talked about why and how to use pyenv along with my first impressions in\n\u003ca href=\"/til/pyenv-first-impressions\"\u003ethis post\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"pyenvissues678\"\u003epyenv/issues/678 \u003ca href=\"#pyenvissues678\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAccording to \u003ca href=\"https://github.com/pyenv/pyenv/issues/678\" 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\"\u003e#678\u003c/a\u003e I need to\ninstall \u003ccode\u003elibsqlite3-dev\u003c/code\u003e on ubuntu to resolve this issue.\u003c/p\u003e\n\u003ch2 id=\"install-libsqlite3-dev\"\u003einstall libsqlite3-dev \u003ca href=\"#install-libsqlite3-dev\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003elibsqlite3-dev\u003c/code\u003e can be installed using apt\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install libsqlite3-dev\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"but-wait\"\u003eBut wait…. \u003ca href=\"#but-wait\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen I make a fresh env and install ipython I still get the same error and I am\nstill not able to use ipython with pyenv.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eImportError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003emodule\u003c/span\u003e \u003cspan class=\"n\"\u003enamed\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;_sqlite3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"re-install-python\"\u003ere-install python \u003ca href=\"#re-install-python\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAfter having this issue for awhile an coming back to\n\u003ca href=\"https://github.com/pyenv/pyenv/issues/678\" 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\"\u003e#678\u003c/a\u003e several times I realized that\n\u003ccode\u003elibsqlite3-dev\u003c/code\u003e needs to be installed while during install.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epyenv install 3.8.13\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI think I had tried this several times, but was missing the \u003ccode\u003e-y\u003c/code\u003e option each\ntime.  You gotta read errors like this, I am really good at glossing over them.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/api/file/017121e2-1f51-4910-bfce-86813a7f90a3.webp\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://dropper.waylonwalker.com/api/file/017121e2-1f51-4910-bfce-86813a7f90a3.webp\" alt=\"pyenv-install-exists.webp\"/ data-glightbox=\"description: pyenv-install-exists.webp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"lets-never-have-this-issue-again\"\u003eLet’s never have this issue again. \u003ca href=\"#lets-never-have-this-issue-again\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen you spend months living with little errors like this and finally fix it,\nits good to make sure that it never happens again.  Whenever I start a new\nubuntu machine I run an ansible playbook that does all the setup for me.  I\nadded \u003ccode\u003elibsqlite3-dev\u003c/code\u003e to my core install in\n\u003ca href=\"https://github.com/WaylonWalker/devtainer/commit/64c85ca1b38eefe95dfc8723c1e83e8e334cf4dc\" 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\"\u003e64c85ca\u003c/a\u003e\nnow it will be on all of my machines and not break again.\u003c/p\u003e\n",
      "content_text": "\nI've been trying to adopt pyenv for a few months, but have been completely\nblocked by this issue on one of the main machines I use.  Whenever I start up\nipython I get the following error.\n\n```\nImportError: No module named '_sqlite3\n```\n\nI talked about why and how to use pyenv along with my first impressions in\n[this post](/til/pyenv-first-impressions)\n\n## pyenv/issues/678\n\nAccording to [#678](https://github.com/pyenv/pyenv/issues/678) I need to\ninstall `libsqlite3-dev` on ubuntu to resolve this issue.\n\n## install libsqlite3-dev\n\n`libsqlite3-dev` can be installed using apt\n\n```bash\nsudo apt install libsqlite3-dev\n```\n\n## But wait....\n\nWhen I make a fresh env and install ipython I still get the same error and I am\nstill not able to use ipython with pyenv.\n\n```python\nImportError: No module named '_sqlite3\n```\n\n## re-install python\n\nAfter having this issue for awhile an coming back to\n[#678](https://github.com/pyenv/pyenv/issues/678) several times I realized that\n`libsqlite3-dev` needs to be installed while during install.\n\n```bash\npyenv install 3.8.13\n```\n\nI think I had tried this several times, but was missing the `-y` option each\ntime.  You gotta read errors like this, I am really good at glossing over them.\n\n![pyenv-install-exists.webp](https://dropper.waylonwalker.com/api/file/017121e2-1f51-4910-bfce-86813a7f90a3.webp)\n\n## Let's never have this issue again.\n\nWhen you spend months living with little errors like this and finally fix it,\nits good to make sure that it never happens again.  Whenever I start a new\nubuntu machine I run an ansible playbook that does all the setup for me.  I\nadded `libsqlite3-dev` to my core install in\n[64c85ca](https://github.com/WaylonWalker/devtainer/commit/64c85ca1b38eefe95dfc8723c1e83e8e334cf4dc)\nnow it will be on all of my machines and not break again.\n",
      "summary": "I've been trying to adopt pyenv for a few months, but have been completely blocked by this issue on one of the main machines I use. Whenever I start up...",
      "date_published": "2022-05-31T14:18:52Z",
      "date_modified": "2022-05-31T14:18:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-merge-ours/",
      "url": "https://go.waylonwalker.com/git-merge-ours/",
      "title": "git merge ours",
      "content_html": "\u003cp\u003eSometimes you have a pretty old branch you are trying to merge into and you are\nabsolutely sure what you have is what you want, and therefore you don’t want to\ndeal with any sort of merge conflicts, you would rather just tell \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e to use my\nversion and move on.\u003c/p\u003e\n\u003ch2 id=\"update-main\"\u003eupdate main \u003ca href=\"#update-main\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe first step is to make sure your local copy of the branch you are moving\ninto is up to date.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit pull\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"update-your-feature-branch\"\u003eupdate your feature branch \u003ca href=\"#update-your-feature-branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt’s also worth updating your feature branch before doing the merge. Maybe you\nhave teammates that have updated the repo, or you popped in a quick change from\nthe web ui. It’s simple and worth checking.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout my-feature\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit pull\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"start-the-merge\"\u003estart the merge \u003ca href=\"#start-the-merge\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMerge the changes from main into \u003ccode\u003emy-feature\u003c/code\u003e branch.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egit merge main\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eNow is where the merge conflict may have started. If you are completely sure\nthat your copy is correct you can \u003ccode\u003e--ours\u003c/code\u003e, if you are completely sure that\n\u003ccode\u003emain\u003c/code\u003e is correct, you can \u003ccode\u003e--theirs\u003c/code\u003e.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egit checkout --ours .\ngit merge --continue\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis will pop open your configured \u003ccode\u003egit.core.editor\u003c/code\u003e or \u003ccode\u003e$EDTIOR\u003c/code\u003e. If you have\nnot configured your editor, it will default to vim.  Close vim with \u003ccode\u003e\u0026lt;escape\u0026gt;:x\u003c/code\u003e, accepting the\nmerge message.\u003c/p\u003e\n\u003cp\u003eNow push your changes that do not clash with main and finish your pr.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egit push\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nSometimes you have a pretty old branch you are trying to merge into and you are\nabsolutely sure what you have is what you want, and therefore you don't want to\ndeal with any sort of merge conflicts, you would rather just tell git to use my\nversion and move on.\n\n## update main\n\nThe first step is to make sure your local copy of the branch you are moving\ninto is up to date.\n\n``` bash\ngit checkout main\ngit pull\n```\n\n## update your feature branch\n\nIt's also worth updating your feature branch before doing the merge. Maybe you\nhave teammates that have updated the repo, or you popped in a quick change from\nthe web ui. It's simple and worth checking.\n\n``` bash\ngit checkout my-feature\ngit pull\n```\n\n## start the merge\n\nMerge the changes from main into `my-feature` branch.\n\n```\ngit merge main\n```\n\nNow is where the merge conflict may have started. If you are completely sure\nthat your copy is correct you can `--ours`, if you are completely sure that\n`main` is correct, you can `--theirs`.\n\n```\ngit checkout --ours .\ngit merge --continue\n```\n\nThis will pop open your configured `git.core.editor` or `$EDTIOR`. If you have\nnot configured your editor, it will default to vim.  Close vim with `\u003cescape\u003e:x`, accepting the\nmerge message.\n\nNow push your changes that do not clash with main and finish your pr.\n\n```\ngit push\n```\n",
      "summary": "Sometimes you have a pretty old branch you are trying to merge into and you are absolutely sure what you have is what you want, and therefore you don't want...",
      "date_published": "2022-05-24T12:12:09Z",
      "date_modified": "2022-05-24T12:12:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cveinnt-liveterm/",
      "url": "https://go.waylonwalker.com/cveinnt-liveterm/",
      "title": "⭐ Cveinnt LiveTerm",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Cveinnt\" 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\"\u003eCveinnt\u003c/a\u003e and their project \u003ca href=\"https://github.com/Cveinnt/LiveTerm\" 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\"\u003eLiveTerm\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e💻 Build terminal styled websites in minutes!\u003c/p\u003e\n",
      "content_text": "\nCheck out [Cveinnt](https://github.com/Cveinnt) and their project [LiveTerm](https://github.com/Cveinnt/LiveTerm).\n\n💻 Build terminal styled websites in minutes!\n",
      "summary": "Check out Cveinnt and their project LiveTerm.",
      "date_published": "2022-05-17T23:51:29Z",
      "date_modified": "2022-05-17T23:51:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/curl-curl/",
      "url": "https://go.waylonwalker.com/curl-curl/",
      "title": "⭐ curl curl",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/curl\" 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\"\u003ecurl\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/curl/curl\" 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\"\u003ecurl\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features\u003c/p\u003e\n",
      "content_text": "\n[curl](https://github.com/curl) has done a fantastic job with [curl](https://github.com/curl/curl). Highly recommend taking a look.\n\nA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features\n",
      "summary": "curl has done a fantastic job with curl. Highly recommend taking a look.",
      "date_published": "2022-05-16T13:55:22Z",
      "date_modified": "2022-05-16T13:55:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-plugged-snapshot/",
      "url": "https://go.waylonwalker.com/vim-plugged-snapshot/",
      "title": "vim plugged snapshot",
      "content_html": "\u003cp\u003eA few of my friends and I all just borked our neovim configs during a plug\nupdate, and because none of us were using \u003ccode\u003e:PlugSnapshot\u003c/code\u003e it was painful to\nrecover from.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/pypeaday/status/1524882893914398732\"\u003ehttps://twitter.com/pypeaday/status/1524882893914398732\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLucky for me I did it on a home machine that I only occasionally edit from,\nso I could still take the snapshot from a working machine before taking the\nplunge into fixing everying.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"why-snapshot\"\u003eWhy snapshot \u003ca href=\"#why-snapshot\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSnapshotting ensures that you install the same \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e sha on every single plugin.\nThis way when you have multiple machines running your same vim config, they are\nall on the same sha of each plugin, and you dont end up with weird things\nhappening on one machine.  And then you get to decide when you are ready to\nupdate, rather than when it breaks.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esame config everywhere\u003c/li\u003e\n\u003cli\u003eyou control the update\u003c/li\u003e\n\u003cli\u003ein case of a borked update you have a good working place to rever to\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"lets-snapshot\"\u003eLet’s snapshot \u003ca href=\"#lets-snapshot\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRunning \u003ccode\u003e:PlugSnapshot\u003c/code\u003e will generate the following content in a buffer that\nyou can save.  I chose to save mine in \u003ccode\u003e~/.config/nvim/snapshot.vim\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; Generated by vim-plug\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; Fri 13 May 2022 08:01:39 PM CDT\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; :source this file in vim to restore the snapshot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; or execute: vim -S snapshot.vim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;Telegraph.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;92e472f4e83acd60eb3766168e66d02718bfefe0\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;black\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8ed3e3d07ea3e6d62e3e533e69f96a0ff148cd5d\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;bufutils.vim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;4634feb1312fd73fab66cfaa860e7af3abde935b\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;cmp-buffer\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d66c4c2d376e5be99db68d2362cd94d250987525\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;cmp-calc\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;970fd5f97b4bd363260365b217f694dd6a1182cb\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;cmp-nvim-lsp\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ebdfc204afb87f15ce3d3d3f5df0b8181443b5ba\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;cmp-path\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;466b6b8270f7ba89abd59f402c73f63c7331ff6e\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;cmp-rg\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;fd92d70ff36b30924401b0cf7d4ce7344c8235f7\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;cmp-vsnip\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;0abfa1860f5e095a07c477da940cfcb0d273b700\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;colorbuddy.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;cdb5b0654d3cafe61d2a845e15b2b4b0e78e752a\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;compe-tmux\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;3c16f7e73abee43b3ea3e919e8b34c24427d9530\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;coverage-highlight.vim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;864e03679ea4168661501246147893cc82020917\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;diffurcate.vim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;b804675072220ff7c7ebcd24a028aa4aa35f09cc\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;friendly-snippets\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;5fd8b920a3497dec9a3ef939595186b362d041b4\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;fzf\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a91a67668e0830a8cf9a792c4949e03b4189f097\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;fzf.vim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d5f1f8641b24c0fd5b10a299824362a2a1b20ae0\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;gitsigns.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ead0d48df801431b990d6b91fa210f7efa30ac38\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;gruvbox-flat.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;756dbdd3dfd3ed84acb2f9649724df19ae41f904\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;harpoon\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;28762aa04d6395538e26e1efff5213b26720e68f\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;impatient.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;2337df7d778e17a58d8709f651653b9039946d8d\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;instant.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;c02d72267b12130609b7ad39b76cf7f4a3bc9554\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;lsp_extensions.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;4011f4aec61ba59c734f5dbf52e91f258b99d985\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;lsp_signature.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a351509512687293fd659ba4ee7e34412c3a8f70\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;lspsaga.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;cb0e35d2e594ff7a9c408d2e382945d56336c040\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;lualine.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;18a07f790ed7ed1f11d1b130c02782e9dfd8dd7d\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-cmp\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;433af3dffce64cbd3f99bdac9734768a6cc41951\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-compe\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d186d739c54823e0b010feb205c6f97792322c08\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-dap\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d6d8317ce9e096029150bc5844916347a9af6f45\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-dap-python\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;4c7ea25f8ff6de6fa00bf5625d2e76753cced70f\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-lspconfig\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ad9903c66bac88f344890acb6532f63f1cd4dac3\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-lspinstall\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;79ec2425d6b39cdcb69d379f3e56847f49be73eb\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-lsputils\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ae1a4a62449863ad82c70713d5b6108f3a07917c\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-spectre\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;345e5dd57773e2b4b425a2515c831108b9808a0f\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-tree.lua\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ce463a53ae269544697c3dedd3d5beae05937405\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-treesitter\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;3c50297eca950b4b1a7c07b28e586b0576c0a796\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;nvim-web-devicons\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;4febe73506268a02ff15a240abcd7bf3eb9234da\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;onebuddy\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;7e16006e7dde15e3cb72889f736c49409db6ff42\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;onedark.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;e520a0c81a5a1997ecffd846ccd9c6e63b7859c6\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;playground\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;13e2d2d63ce7bc5d875e8bdf89cb070bc8cc7a00\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;plenary.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;9069d14a120cadb4f6825f76821533f2babcab92\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;popfix\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ea262861ce3905b90c2c203b74a7be2539f1aba4\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;popup.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;b7404d35d5d3548a82149238289fa71f7f6de4ac\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;refactoring.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;94eaa199ad892f26d2c8594dbbc5656314cf5bdb\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;stylua-nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8bd7fa127367178dddb9ee06fdce1d7c622d2feb\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;targets.vim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8d6ff2984cdfaebe5b7a6eee8f226a6dd1226f2d\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;telescope-dap.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;b4134fff5cbaf3b876e6011212ed60646e56f060\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;telescope.nvim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8b02088743c07c2f82aec2772fbd2b3774195448\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;termopen.vim\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;3194a991a18a9be2fd9fcf8c4c55fe990c04b2bd\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;undotree\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;08e259be24d4476c1ee745dc735eefd44f90efdc\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-be-good\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;bc499a06c14c729b22a6cc7e730a9fbc44d4e737\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-commentary\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;3654775824337f466109f00eaf6759760f65be34\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-dispatch\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;00e77d90452e3c710014b26dc61ea919bc895e92\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-doge\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;88d8dfacc3a5f3dfce82ef5221e5e6943e627d85\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-floaterm\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;6244d1739aad6682c6c1d5db18c846c342af6e3e\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-fugitive\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;b5bbd0d181ebc3cea5c42bdaed13141850432ba1\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-indent-object\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;5c5b24c959478929b54a9e831a8e2e651a465965\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-ipython-cell\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f0548d9a8d5e31d5c7f73e8729b55e8eb402852f\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-log-highlighting\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;1037e26f3120e6a6a2c0c33b14a84336dee2a78f\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-quicklink\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;021167741588555501594e1fc31f130b16acefa0\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-repeat\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;24afe922e6a05891756ecf331f39a1f6743d3d5a\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-signify\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;69498f6d49f3eeac06870012416dd9bf867b84f3\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-slime\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;0ea9b35882155996171fd15a5227e673ce2d2c60\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-sneak\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;94c2de47ab301d476a2baec9ffda07367046bec9\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-surround\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;81fc0ec460dd8b25a76346e09aecdbca2677f1a7\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-test\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;2240d7a4b868cb594b7d83544e1b6db4df806e5e\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-tmux-runner\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;54767911fd5e6e2d8e493847149e315ac2e6531a\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-ultest\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a99eb0bdf7d901d538b5dd724e2ab3a958c1799c\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-visualstar\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a18cd0e7a03311ac709595c1d261ed44b45c9098\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"k\"\u003elet\u003c/span\u003e \u003cspan class=\"nx\"\u003eg\u003c/span\u003e:\u003cspan class=\"nx\"\u003eplugs\u003c/span\u003e[\u003cspan class=\"s1\"\u003e\u0026#39;vim-vsnip\u0026#39;\u003c/span\u003e].\u003cspan class=\"nx\"\u003ecommit\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8f199ef690ed26dcbb8973d9a6760d1332449ac9\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlugUpdate\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNOTE! the \u003ccode\u003ePlugUpdate!\u003c/code\u003e at the end.  I did not catch this at first, if you\nare like me and automatically source \u003ccode\u003e*.vim\u003c/code\u003e files on save, this will\nimmediately run the update when you save it.  If you just took the snapshot\nthough I don’t think it will actually do anything.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"lets-update\"\u003eLet’s Update \u003ca href=\"#lets-update\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow without the snapshot sourced, I will not have any of my plugins pinned.\nWhen I run \u003ccode\u003e:PlugUpdate\u003c/code\u003e it will update all of my plugins to the latest\nversions.  Then I can \u003ccode\u003e:PlugSnapshot\u003c/code\u003e again, and this will kick out an updated\nlist of sha’s.  I will yank this file \u003ccode\u003eyyG\u003c/code\u003e and paste it into my snapshot.vim\nfile \u003ccode\u003evGp\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"look-at-these-updates\"\u003eLook at these updates \u003ca href=\"#look-at-these-updates\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWe can see these updates with a little \u003ccode\u003e:G diff %\u003c/code\u003e on the file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003ediff --git a/nvim/.config/nvim/snapshot.vim b/nvim/.config/nvim/snapshot.vim\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003eindex 88db2b0..837c8e4 100644\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e\u003c/span\u003e\u003cspan class=\"gd\"\u003e--- a/nvim/.config/nvim/snapshot.vim\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+++ b/nvim/.config/nvim/snapshot.vim\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e\u003cspan class=\"gu\"\u003e@@ -1,14 +1,14 @@\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e \u0026#34; Generated by vim-plug\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-\u0026#34; Fri 13 May 2022 08:01:39 PM CDT\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+\u0026#34; Fri 13 May 2022 08:22:17 PM CDT\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e \u0026#34; :source this file in vim to restore the snapshot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u0026#34; or execute: vim -S snapshot.vim\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;Telegraph.nvim\u0026#39;].commit = \u0026#39;92e472f4e83acd60eb3766168e66d02718bfefe0\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;black\u0026#39;].commit = \u0026#39;8ed3e3d07ea3e6d62e3e533e69f96a0ff148cd5d\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;black\u0026#39;].commit = \u0026#39;7f033136ac5e0e5bf6cf322dd60b4a92050eedc4\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;bufutils.vim\u0026#39;].commit = \u0026#39;4634feb1312fd73fab66cfaa860e7af3abde935b\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;cmp-buffer\u0026#39;].commit = \u0026#39;d66c4c2d376e5be99db68d2362cd94d250987525\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;cmp-calc\u0026#39;].commit = \u0026#39;970fd5f97b4bd363260365b217f694dd6a1182cb\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;cmp-nvim-lsp\u0026#39;].commit = \u0026#39;ebdfc204afb87f15ce3d3d3f5df0b8181443b5ba\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;cmp-buffer\u0026#39;].commit = \u0026#39;12463cfcd9b14052f9effccbf1d84caa7a2d57f0\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;cmp-calc\u0026#39;].commit = \u0026#39;f7efc20768603bd9f9ae0ed073b1c129f63eb312\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;cmp-nvim-lsp\u0026#39;].commit = \u0026#39;e6b5feb2e6560b61f31c756fb9231a0d7b10c73d\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;cmp-path\u0026#39;].commit = \u0026#39;466b6b8270f7ba89abd59f402c73f63c7331ff6e\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;cmp-rg\u0026#39;].commit = \u0026#39;fd92d70ff36b30924401b0cf7d4ce7344c8235f7\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;cmp-vsnip\u0026#39;].commit = \u0026#39;0abfa1860f5e095a07c477da940cfcb0d273b700\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e@@ -16,60 +16,60 @@ silent! let g:plugs[\u0026#39;colorbuddy.nvim\u0026#39;].commit = \u0026#39;cdb5b0654d3cafe61d2a845e15b2b4b\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;compe-tmux\u0026#39;].commit = \u0026#39;3c16f7e73abee43b3ea3e919e8b34c24427d9530\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;coverage-highlight.vim\u0026#39;].commit = \u0026#39;864e03679ea4168661501246147893cc82020917\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;diffurcate.vim\u0026#39;].commit = \u0026#39;b804675072220ff7c7ebcd24a028aa4aa35f09cc\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;friendly-snippets\u0026#39;].commit = \u0026#39;5fd8b920a3497dec9a3ef939595186b362d041b4\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;fzf\u0026#39;].commit = \u0026#39;a91a67668e0830a8cf9a792c4949e03b4189f097\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;friendly-snippets\u0026#39;].commit = \u0026#39;627dea2ff1ee8d8a7e6ad365acb3e335c8b25574\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;fzf\u0026#39;].commit = \u0026#39;6dcf5c3d7d6c321b17e6a5673f1533d6e8350462\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;fzf.vim\u0026#39;].commit = \u0026#39;d5f1f8641b24c0fd5b10a299824362a2a1b20ae0\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;gitsigns.nvim\u0026#39;].commit = \u0026#39;ead0d48df801431b990d6b91fa210f7efa30ac38\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;gitsigns.nvim\u0026#39;].commit = \u0026#39;ffd06e36f6067935d8cb9793905dd2e84e291310\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;gruvbox-flat.nvim\u0026#39;].commit = \u0026#39;756dbdd3dfd3ed84acb2f9649724df19ae41f904\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;harpoon\u0026#39;].commit = \u0026#39;28762aa04d6395538e26e1efff5213b26720e68f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;harpoon\u0026#39;].commit = \u0026#39;d3d3d22b6207f46f8ca64946f4d781e975aec0fc\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;impatient.nvim\u0026#39;].commit = \u0026#39;2337df7d778e17a58d8709f651653b9039946d8d\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;instant.nvim\u0026#39;].commit = \u0026#39;c02d72267b12130609b7ad39b76cf7f4a3bc9554\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;lsp_extensions.nvim\u0026#39;].commit = \u0026#39;4011f4aec61ba59c734f5dbf52e91f258b99d985\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;lsp_signature.nvim\u0026#39;].commit = \u0026#39;a351509512687293fd659ba4ee7e34412c3a8f70\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;lsp_signature.nvim\u0026#39;].commit = \u0026#39;db324e2ada5bb795d0016ec0ef2b4ae7f11d8904\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;lspsaga.nvim\u0026#39;].commit = \u0026#39;cb0e35d2e594ff7a9c408d2e382945d56336c040\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;lualine.nvim\u0026#39;].commit = \u0026#39;18a07f790ed7ed1f11d1b130c02782e9dfd8dd7d\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-cmp\u0026#39;].commit = \u0026#39;433af3dffce64cbd3f99bdac9734768a6cc41951\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;lualine.nvim\u0026#39;].commit = \u0026#39;a4e4517ac32441dd92ba869944741f0b5f468531\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-cmp\u0026#39;].commit = \u0026#39;9a0c639ac2324e6e9ecc54dc22b1d32bb6c42ab9\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;nvim-compe\u0026#39;].commit = \u0026#39;d186d739c54823e0b010feb205c6f97792322c08\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-dap\u0026#39;].commit = \u0026#39;d6d8317ce9e096029150bc5844916347a9af6f45\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-dap-python\u0026#39;].commit = \u0026#39;4c7ea25f8ff6de6fa00bf5625d2e76753cced70f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-lspconfig\u0026#39;].commit = \u0026#39;ad9903c66bac88f344890acb6532f63f1cd4dac3\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-dap\u0026#39;].commit = \u0026#39;2249fcfd09cdc27c08e9d2f3be5268ba81db3378\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-dap-python\u0026#39;].commit = \u0026#39;d96bcbf3803283456c900cf25ab0995e8d2f00c0\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-lspconfig\u0026#39;].commit = \u0026#39;9ff2a06cebd4c8c3af5259d713959ab310125bec\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;nvim-lspinstall\u0026#39;].commit = \u0026#39;79ec2425d6b39cdcb69d379f3e56847f49be73eb\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;nvim-lsputils\u0026#39;].commit = \u0026#39;ae1a4a62449863ad82c70713d5b6108f3a07917c\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;nvim-spectre\u0026#39;].commit = \u0026#39;345e5dd57773e2b4b425a2515c831108b9808a0f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-tree.lua\u0026#39;].commit = \u0026#39;ce463a53ae269544697c3dedd3d5beae05937405\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-treesitter\u0026#39;].commit = \u0026#39;3c50297eca950b4b1a7c07b28e586b0576c0a796\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;nvim-web-devicons\u0026#39;].commit = \u0026#39;4febe73506268a02ff15a240abcd7bf3eb9234da\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-tree.lua\u0026#39;].commit = \u0026#39;82ec79aac5557c05728d88195fb0d008cacbf565\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-treesitter\u0026#39;].commit = \u0026#39;f1373051e554cc4642cda719c8023e4e8508eb2d\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;nvim-web-devicons\u0026#39;].commit = \u0026#39;bdd43421437f2ef037e0dafeaaaa62b31d35ef2f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;onebuddy\u0026#39;].commit = \u0026#39;7e16006e7dde15e3cb72889f736c49409db6ff42\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;onedark.nvim\u0026#39;].commit = \u0026#39;e520a0c81a5a1997ecffd846ccd9c6e63b7859c6\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;playground\u0026#39;].commit = \u0026#39;13e2d2d63ce7bc5d875e8bdf89cb070bc8cc7a00\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;plenary.nvim\u0026#39;].commit = \u0026#39;9069d14a120cadb4f6825f76821533f2babcab92\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;onedark.nvim\u0026#39;].commit = \u0026#39;08cde8acf181b3278dafb9c8284726104a11cc0f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;playground\u0026#39;].commit = \u0026#39;71b00a3c665298e5155ad64a9020135808d4e3e8\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;plenary.nvim\u0026#39;].commit = \u0026#39;0a907364b5cd6e3438e230df7add8b9bb5ef6fd3\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;popfix\u0026#39;].commit = \u0026#39;ea262861ce3905b90c2c203b74a7be2539f1aba4\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;popup.nvim\u0026#39;].commit = \u0026#39;b7404d35d5d3548a82149238289fa71f7f6de4ac\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;refactoring.nvim\u0026#39;].commit = \u0026#39;94eaa199ad892f26d2c8594dbbc5656314cf5bdb\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;stylua-nvim\u0026#39;].commit = \u0026#39;8bd7fa127367178dddb9ee06fdce1d7c622d2feb\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;refactoring.nvim\u0026#39;].commit = \u0026#39;33ac6f3bcfe97447037ded20291d40de34d8912c\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;stylua-nvim\u0026#39;].commit = \u0026#39;ce59a353f02938cba3e0285e662fcd3901cd270f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;targets.vim\u0026#39;].commit = \u0026#39;8d6ff2984cdfaebe5b7a6eee8f226a6dd1226f2d\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;telescope-dap.nvim\u0026#39;].commit = \u0026#39;b4134fff5cbaf3b876e6011212ed60646e56f060\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;telescope.nvim\u0026#39;].commit = \u0026#39;8b02088743c07c2f82aec2772fbd2b3774195448\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;telescope.nvim\u0026#39;].commit = \u0026#39;39b12d84e86f5054e2ed98829b367598ae53ab41\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;termopen.vim\u0026#39;].commit = \u0026#39;3194a991a18a9be2fd9fcf8c4c55fe990c04b2bd\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;undotree\u0026#39;].commit = \u0026#39;08e259be24d4476c1ee745dc735eefd44f90efdc\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-be-good\u0026#39;].commit = \u0026#39;bc499a06c14c729b22a6cc7e730a9fbc44d4e737\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-commentary\u0026#39;].commit = \u0026#39;3654775824337f466109f00eaf6759760f65be34\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-dispatch\u0026#39;].commit = \u0026#39;00e77d90452e3c710014b26dc61ea919bc895e92\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;vim-doge\u0026#39;].commit = \u0026#39;88d8dfacc3a5f3dfce82ef5221e5e6943e627d85\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;vim-floaterm\u0026#39;].commit = \u0026#39;6244d1739aad6682c6c1d5db18c846c342af6e3e\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;vim-fugitive\u0026#39;].commit = \u0026#39;b5bbd0d181ebc3cea5c42bdaed13141850432ba1\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;vim-doge\u0026#39;].commit = \u0026#39;d5b08d01f64396557d9912b3830717d45671764b\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;vim-floaterm\u0026#39;].commit = \u0026#39;ab7876f86c05c1935eb23a193f4f276132902ac1\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;vim-fugitive\u0026#39;].commit = \u0026#39;a8139d37b242c5bc5ceeddc4fcd7dddf2b2c2650\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;vim-indent-object\u0026#39;].commit = \u0026#39;5c5b24c959478929b54a9e831a8e2e651a465965\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-ipython-cell\u0026#39;].commit = \u0026#39;f0548d9a8d5e31d5c7f73e8729b55e8eb402852f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-log-highlighting\u0026#39;].commit = \u0026#39;1037e26f3120e6a6a2c0c33b14a84336dee2a78f\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-quicklink\u0026#39;].commit = \u0026#39;021167741588555501594e1fc31f130b16acefa0\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-repeat\u0026#39;].commit = \u0026#39;24afe922e6a05891756ecf331f39a1f6743d3d5a\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-signify\u0026#39;].commit = \u0026#39;69498f6d49f3eeac06870012416dd9bf867b84f3\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;vim-slime\u0026#39;].commit = \u0026#39;0ea9b35882155996171fd15a5227e673ce2d2c60\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;vim-slime\u0026#39;].commit = \u0026#39;6e4b81303968f37346925d6907b96ef07788cc82\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;vim-sneak\u0026#39;].commit = \u0026#39;94c2de47ab301d476a2baec9ffda07367046bec9\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;vim-surround\u0026#39;].commit = \u0026#39;81fc0ec460dd8b25a76346e09aecdbca2677f1a7\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;vim-surround\u0026#39;].commit = \u0026#39;bf3480dc9ae7bea34c78fbba4c65b4548b5b1fea\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;vim-test\u0026#39;].commit = \u0026#39;2240d7a4b868cb594b7d83544e1b6db4df806e5e\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-tmux-runner\u0026#39;].commit = \u0026#39;54767911fd5e6e2d8e493847149e315ac2e6531a\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e-silent! let g:plugs[\u0026#39;vim-ultest\u0026#39;].commit = \u0026#39;a99eb0bdf7d901d538b5dd724e2ab3a958c1799c\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e\u003c/span\u003e\u003cspan class=\"gi\"\u003e+silent! let g:plugs[\u0026#39;vim-ultest\u0026#39;].commit = \u0026#39;6978fd32e3ca2c1c5591884eea0d57a7ee43d212\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e\u003c/span\u003e silent! let g:plugs[\u0026#39;vim-visualstar\u0026#39;].commit = \u0026#39;a18cd0e7a03311ac709595c1d261ed44b45c9098\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e silent! let g:plugs[\u0026#39;vim-vsnip\u0026#39;].commit = \u0026#39;8f199ef690ed26dcbb8973d9a6760d1332449ac9\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"commits\"\u003eCommits \u003ca href=\"#commits\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow I can look through all the versions of my \u003ccode\u003esnapshot.vim\u003c/code\u003e by opening it,\nrunning \u003ccode\u003e:0Gclog\u003c/code\u003e and navigating the quickfix list with \u003ccode\u003e:cnext\u003c/code\u003e and \u003ccode\u003e:cprev\u003c/code\u003e.\nIf I want to install one of the old versions while its open in a buffer, all I\nneed to do is run \u003ccode\u003e:source %\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"log\"\u003eLog \u003ca href=\"#log\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow the log of my \u003ccode\u003esnapshots.vim\u003c/code\u003e looks like this.  I saved the working\nversion, and successfully updated to the latest versions of all plugins, with a\nsave point I can revert back to.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-log\"\u003ecommit 20e901196b0d9633a42176f1fe1757e45f709fd3\nAuthor: Waylon S. Walker \u0026lt;waylon@waylonwalker.com\u0026gt;\nDate:   Fri May 13 20:37:03 2022 -0500\n\n    plugupdate\n\ncommit f9d76368697b4c4427c0fa8ccd5e2449b6e5a9ff\nAuthor: Waylon S. Walker \u0026lt;waylon@waylonwalker.com\u0026gt;\nDate:   Fri May 13 20:16:11 2022 -0500\n\n    commit my plugin snapshot\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nA few of my friends and I all just borked our neovim configs during a plug\nupdate, and because none of us were using `:PlugSnapshot` it was painful to\nrecover from.\n\nhttps://twitter.com/pypeaday/status/1524882893914398732\n\n\u003e Lucky for me I did it on a home machine that I only occasionally edit from,\n\u003e so I could still take the snapshot from a working machine before taking the\n\u003e plunge into fixing everying.\n\n## Why snapshot\n\nSnapshotting ensures that you install the same git sha on every single plugin.\nThis way when you have multiple machines running your same vim config, they are\nall on the same sha of each plugin, and you dont end up with weird things\nhappening on one machine.  And then you get to decide when you are ready to\nupdate, rather than when it breaks.\n\n* same config everywhere\n* you control the update\n* in case of a borked update you have a good working place to rever to\n\n## Let's snapshot\n\nRunning `:PlugSnapshot` will generate the following content in a buffer that\nyou can save.  I chose to save mine in `~/.config/nvim/snapshot.vim`.\n\n``` vim\n\" Generated by vim-plug\n\" Fri 13 May 2022 08:01:39 PM CDT\n\" :source this file in vim to restore the snapshot\n\" or execute: vim -S snapshot.vim\n\nsilent! let g:plugs['Telegraph.nvim'].commit = '92e472f4e83acd60eb3766168e66d02718bfefe0'\nsilent! let g:plugs['black'].commit = '8ed3e3d07ea3e6d62e3e533e69f96a0ff148cd5d'\nsilent! let g:plugs['bufutils.vim'].commit = '4634feb1312fd73fab66cfaa860e7af3abde935b'\nsilent! let g:plugs['cmp-buffer'].commit = 'd66c4c2d376e5be99db68d2362cd94d250987525'\nsilent! let g:plugs['cmp-calc'].commit = '970fd5f97b4bd363260365b217f694dd6a1182cb'\nsilent! let g:plugs['cmp-nvim-lsp'].commit = 'ebdfc204afb87f15ce3d3d3f5df0b8181443b5ba'\nsilent! let g:plugs['cmp-path'].commit = '466b6b8270f7ba89abd59f402c73f63c7331ff6e'\nsilent! let g:plugs['cmp-rg'].commit = 'fd92d70ff36b30924401b0cf7d4ce7344c8235f7'\nsilent! let g:plugs['cmp-vsnip'].commit = '0abfa1860f5e095a07c477da940cfcb0d273b700'\nsilent! let g:plugs['colorbuddy.nvim'].commit = 'cdb5b0654d3cafe61d2a845e15b2b4b0e78e752a'\nsilent! let g:plugs['compe-tmux'].commit = '3c16f7e73abee43b3ea3e919e8b34c24427d9530'\nsilent! let g:plugs['coverage-highlight.vim'].commit = '864e03679ea4168661501246147893cc82020917'\nsilent! let g:plugs['diffurcate.vim'].commit = 'b804675072220ff7c7ebcd24a028aa4aa35f09cc'\nsilent! let g:plugs['friendly-snippets'].commit = '5fd8b920a3497dec9a3ef939595186b362d041b4'\nsilent! let g:plugs['fzf'].commit = 'a91a67668e0830a8cf9a792c4949e03b4189f097'\nsilent! let g:plugs['fzf.vim'].commit = 'd5f1f8641b24c0fd5b10a299824362a2a1b20ae0'\nsilent! let g:plugs['gitsigns.nvim'].commit = 'ead0d48df801431b990d6b91fa210f7efa30ac38'\nsilent! let g:plugs['gruvbox-flat.nvim'].commit = '756dbdd3dfd3ed84acb2f9649724df19ae41f904'\nsilent! let g:plugs['harpoon'].commit = '28762aa04d6395538e26e1efff5213b26720e68f'\nsilent! let g:plugs['impatient.nvim'].commit = '2337df7d778e17a58d8709f651653b9039946d8d'\nsilent! let g:plugs['instant.nvim'].commit = 'c02d72267b12130609b7ad39b76cf7f4a3bc9554'\nsilent! let g:plugs['lsp_extensions.nvim'].commit = '4011f4aec61ba59c734f5dbf52e91f258b99d985'\nsilent! let g:plugs['lsp_signature.nvim'].commit = 'a351509512687293fd659ba4ee7e34412c3a8f70'\nsilent! let g:plugs['lspsaga.nvim'].commit = 'cb0e35d2e594ff7a9c408d2e382945d56336c040'\nsilent! let g:plugs['lualine.nvim'].commit = '18a07f790ed7ed1f11d1b130c02782e9dfd8dd7d'\nsilent! let g:plugs['nvim-cmp'].commit = '433af3dffce64cbd3f99bdac9734768a6cc41951'\nsilent! let g:plugs['nvim-compe'].commit = 'd186d739c54823e0b010feb205c6f97792322c08'\nsilent! let g:plugs['nvim-dap'].commit = 'd6d8317ce9e096029150bc5844916347a9af6f45'\nsilent! let g:plugs['nvim-dap-python'].commit = '4c7ea25f8ff6de6fa00bf5625d2e76753cced70f'\nsilent! let g:plugs['nvim-lspconfig'].commit = 'ad9903c66bac88f344890acb6532f63f1cd4dac3'\nsilent! let g:plugs['nvim-lspinstall'].commit = '79ec2425d6b39cdcb69d379f3e56847f49be73eb'\nsilent! let g:plugs['nvim-lsputils'].commit = 'ae1a4a62449863ad82c70713d5b6108f3a07917c'\nsilent! let g:plugs['nvim-spectre'].commit = '345e5dd57773e2b4b425a2515c831108b9808a0f'\nsilent! let g:plugs['nvim-tree.lua'].commit = 'ce463a53ae269544697c3dedd3d5beae05937405'\nsilent! let g:plugs['nvim-treesitter'].commit = '3c50297eca950b4b1a7c07b28e586b0576c0a796'\nsilent! let g:plugs['nvim-web-devicons'].commit = '4febe73506268a02ff15a240abcd7bf3eb9234da'\nsilent! let g:plugs['onebuddy'].commit = '7e16006e7dde15e3cb72889f736c49409db6ff42'\nsilent! let g:plugs['onedark.nvim'].commit = 'e520a0c81a5a1997ecffd846ccd9c6e63b7859c6'\nsilent! let g:plugs['playground'].commit = '13e2d2d63ce7bc5d875e8bdf89cb070bc8cc7a00'\nsilent! let g:plugs['plenary.nvim'].commit = '9069d14a120cadb4f6825f76821533f2babcab92'\nsilent! let g:plugs['popfix'].commit = 'ea262861ce3905b90c2c203b74a7be2539f1aba4'\nsilent! let g:plugs['popup.nvim'].commit = 'b7404d35d5d3548a82149238289fa71f7f6de4ac'\nsilent! let g:plugs['refactoring.nvim'].commit = '94eaa199ad892f26d2c8594dbbc5656314cf5bdb'\nsilent! let g:plugs['stylua-nvim'].commit = '8bd7fa127367178dddb9ee06fdce1d7c622d2feb'\nsilent! let g:plugs['targets.vim'].commit = '8d6ff2984cdfaebe5b7a6eee8f226a6dd1226f2d'\nsilent! let g:plugs['telescope-dap.nvim'].commit = 'b4134fff5cbaf3b876e6011212ed60646e56f060'\nsilent! let g:plugs['telescope.nvim'].commit = '8b02088743c07c2f82aec2772fbd2b3774195448'\nsilent! let g:plugs['termopen.vim'].commit = '3194a991a18a9be2fd9fcf8c4c55fe990c04b2bd'\nsilent! let g:plugs['undotree'].commit = '08e259be24d4476c1ee745dc735eefd44f90efdc'\nsilent! let g:plugs['vim-be-good'].commit = 'bc499a06c14c729b22a6cc7e730a9fbc44d4e737'\nsilent! let g:plugs['vim-commentary'].commit = '3654775824337f466109f00eaf6759760f65be34'\nsilent! let g:plugs['vim-dispatch'].commit = '00e77d90452e3c710014b26dc61ea919bc895e92'\nsilent! let g:plugs['vim-doge'].commit = '88d8dfacc3a5f3dfce82ef5221e5e6943e627d85'\nsilent! let g:plugs['vim-floaterm'].commit = '6244d1739aad6682c6c1d5db18c846c342af6e3e'\nsilent! let g:plugs['vim-fugitive'].commit = 'b5bbd0d181ebc3cea5c42bdaed13141850432ba1'\nsilent! let g:plugs['vim-indent-object'].commit = '5c5b24c959478929b54a9e831a8e2e651a465965'\nsilent! let g:plugs['vim-ipython-cell'].commit = 'f0548d9a8d5e31d5c7f73e8729b55e8eb402852f'\nsilent! let g:plugs['vim-log-highlighting'].commit = '1037e26f3120e6a6a2c0c33b14a84336dee2a78f'\nsilent! let g:plugs['vim-quicklink'].commit = '021167741588555501594e1fc31f130b16acefa0'\nsilent! let g:plugs['vim-repeat'].commit = '24afe922e6a05891756ecf331f39a1f6743d3d5a'\nsilent! let g:plugs['vim-signify'].commit = '69498f6d49f3eeac06870012416dd9bf867b84f3'\nsilent! let g:plugs['vim-slime'].commit = '0ea9b35882155996171fd15a5227e673ce2d2c60'\nsilent! let g:plugs['vim-sneak'].commit = '94c2de47ab301d476a2baec9ffda07367046bec9'\nsilent! let g:plugs['vim-surround'].commit = '81fc0ec460dd8b25a76346e09aecdbca2677f1a7'\nsilent! let g:plugs['vim-test'].commit = '2240d7a4b868cb594b7d83544e1b6db4df806e5e'\nsilent! let g:plugs['vim-tmux-runner'].commit = '54767911fd5e6e2d8e493847149e315ac2e6531a'\nsilent! let g:plugs['vim-ultest'].commit = 'a99eb0bdf7d901d538b5dd724e2ab3a958c1799c'\nsilent! let g:plugs['vim-visualstar'].commit = 'a18cd0e7a03311ac709595c1d261ed44b45c9098'\nsilent! let g:plugs['vim-vsnip'].commit = '8f199ef690ed26dcbb8973d9a6760d1332449ac9'\n\nPlugUpdate!\n```\n\n\u003e NOTE! the `PlugUpdate!` at the end.  I did not catch this at first, if you\n\u003e are like me and automatically source `*.vim` files on save, this will\n\u003e immediately run the update when you save it.  If you just took the snapshot\n\u003e though I don't think it will actually do anything.\n\n## Let's Update\n\nNow without the snapshot sourced, I will not have any of my plugins pinned.\nWhen I run `:PlugUpdate` it will update all of my plugins to the latest\nversions.  Then I can `:PlugSnapshot` again, and this will kick out an updated\nlist of sha's.  I will yank this file `yyG` and paste it into my snapshot.vim\nfile `vGp`.\n\n## Look at these updates\n\nWe can see these updates with a little `:G diff %` on the file.\n\n```diff\ndiff --git a/nvim/.config/nvim/snapshot.vim b/nvim/.config/nvim/snapshot.vim\nindex 88db2b0..837c8e4 100644\n--- a/nvim/.config/nvim/snapshot.vim\n+++ b/nvim/.config/nvim/snapshot.vim\n@@ -1,14 +1,14 @@\n \" Generated by vim-plug\n-\" Fri 13 May 2022 08:01:39 PM CDT\n+\" Fri 13 May 2022 08:22:17 PM CDT\n \" :source this file in vim to restore the snapshot\n \" or execute: vim -S snapshot.vim\n\n silent! let g:plugs['Telegraph.nvim'].commit = '92e472f4e83acd60eb3766168e66d02718bfefe0'\n-silent! let g:plugs['black'].commit = '8ed3e3d07ea3e6d62e3e533e69f96a0ff148cd5d'\n+silent! let g:plugs['black'].commit = '7f033136ac5e0e5bf6cf322dd60b4a92050eedc4'\n silent! let g:plugs['bufutils.vim'].commit = '4634feb1312fd73fab66cfaa860e7af3abde935b'\n-silent! let g:plugs['cmp-buffer'].commit = 'd66c4c2d376e5be99db68d2362cd94d250987525'\n-silent! let g:plugs['cmp-calc'].commit = '970fd5f97b4bd363260365b217f694dd6a1182cb'\n-silent! let g:plugs['cmp-nvim-lsp'].commit = 'ebdfc204afb87f15ce3d3d3f5df0b8181443b5ba'\n+silent! let g:plugs['cmp-buffer'].commit = '12463cfcd9b14052f9effccbf1d84caa7a2d57f0'\n+silent! let g:plugs['cmp-calc'].commit = 'f7efc20768603bd9f9ae0ed073b1c129f63eb312'\n+silent! let g:plugs['cmp-nvim-lsp'].commit = 'e6b5feb2e6560b61f31c756fb9231a0d7b10c73d'\n silent! let g:plugs['cmp-path'].commit = '466b6b8270f7ba89abd59f402c73f63c7331ff6e'\n silent! let g:plugs['cmp-rg'].commit = 'fd92d70ff36b30924401b0cf7d4ce7344c8235f7'\n silent! let g:plugs['cmp-vsnip'].commit = '0abfa1860f5e095a07c477da940cfcb0d273b700'\n@@ -16,60 +16,60 @@ silent! let g:plugs['colorbuddy.nvim'].commit = 'cdb5b0654d3cafe61d2a845e15b2b4b\n silent! let g:plugs['compe-tmux'].commit = '3c16f7e73abee43b3ea3e919e8b34c24427d9530'\n silent! let g:plugs['coverage-highlight.vim'].commit = '864e03679ea4168661501246147893cc82020917'\n silent! let g:plugs['diffurcate.vim'].commit = 'b804675072220ff7c7ebcd24a028aa4aa35f09cc'\n-silent! let g:plugs['friendly-snippets'].commit = '5fd8b920a3497dec9a3ef939595186b362d041b4'\n-silent! let g:plugs['fzf'].commit = 'a91a67668e0830a8cf9a792c4949e03b4189f097'\n+silent! let g:plugs['friendly-snippets'].commit = '627dea2ff1ee8d8a7e6ad365acb3e335c8b25574'\n+silent! let g:plugs['fzf'].commit = '6dcf5c3d7d6c321b17e6a5673f1533d6e8350462'\n silent! let g:plugs['fzf.vim'].commit = 'd5f1f8641b24c0fd5b10a299824362a2a1b20ae0'\n-silent! let g:plugs['gitsigns.nvim'].commit = 'ead0d48df801431b990d6b91fa210f7efa30ac38'\n+silent! let g:plugs['gitsigns.nvim'].commit = 'ffd06e36f6067935d8cb9793905dd2e84e291310'\n silent! let g:plugs['gruvbox-flat.nvim'].commit = '756dbdd3dfd3ed84acb2f9649724df19ae41f904'\n-silent! let g:plugs['harpoon'].commit = '28762aa04d6395538e26e1efff5213b26720e68f'\n+silent! let g:plugs['harpoon'].commit = 'd3d3d22b6207f46f8ca64946f4d781e975aec0fc'\n silent! let g:plugs['impatient.nvim'].commit = '2337df7d778e17a58d8709f651653b9039946d8d'\n silent! let g:plugs['instant.nvim'].commit = 'c02d72267b12130609b7ad39b76cf7f4a3bc9554'\n silent! let g:plugs['lsp_extensions.nvim'].commit = '4011f4aec61ba59c734f5dbf52e91f258b99d985'\n-silent! let g:plugs['lsp_signature.nvim'].commit = 'a351509512687293fd659ba4ee7e34412c3a8f70'\n+silent! let g:plugs['lsp_signature.nvim'].commit = 'db324e2ada5bb795d0016ec0ef2b4ae7f11d8904'\n silent! let g:plugs['lspsaga.nvim'].commit = 'cb0e35d2e594ff7a9c408d2e382945d56336c040'\n-silent! let g:plugs['lualine.nvim'].commit = '18a07f790ed7ed1f11d1b130c02782e9dfd8dd7d'\n-silent! let g:plugs['nvim-cmp'].commit = '433af3dffce64cbd3f99bdac9734768a6cc41951'\n+silent! let g:plugs['lualine.nvim'].commit = 'a4e4517ac32441dd92ba869944741f0b5f468531'\n+silent! let g:plugs['nvim-cmp'].commit = '9a0c639ac2324e6e9ecc54dc22b1d32bb6c42ab9'\n silent! let g:plugs['nvim-compe'].commit = 'd186d739c54823e0b010feb205c6f97792322c08'\n-silent! let g:plugs['nvim-dap'].commit = 'd6d8317ce9e096029150bc5844916347a9af6f45'\n-silent! let g:plugs['nvim-dap-python'].commit = '4c7ea25f8ff6de6fa00bf5625d2e76753cced70f'\n-silent! let g:plugs['nvim-lspconfig'].commit = 'ad9903c66bac88f344890acb6532f63f1cd4dac3'\n+silent! let g:plugs['nvim-dap'].commit = '2249fcfd09cdc27c08e9d2f3be5268ba81db3378'\n+silent! let g:plugs['nvim-dap-python'].commit = 'd96bcbf3803283456c900cf25ab0995e8d2f00c0'\n+silent! let g:plugs['nvim-lspconfig'].commit = '9ff2a06cebd4c8c3af5259d713959ab310125bec'\n silent! let g:plugs['nvim-lspinstall'].commit = '79ec2425d6b39cdcb69d379f3e56847f49be73eb'\n silent! let g:plugs['nvim-lsputils'].commit = 'ae1a4a62449863ad82c70713d5b6108f3a07917c'\n silent! let g:plugs['nvim-spectre'].commit = '345e5dd57773e2b4b425a2515c831108b9808a0f'\n-silent! let g:plugs['nvim-tree.lua'].commit = 'ce463a53ae269544697c3dedd3d5beae05937405'\n-silent! let g:plugs['nvim-treesitter'].commit = '3c50297eca950b4b1a7c07b28e586b0576c0a796'\n-silent! let g:plugs['nvim-web-devicons'].commit = '4febe73506268a02ff15a240abcd7bf3eb9234da'\n+silent! let g:plugs['nvim-tree.lua'].commit = '82ec79aac5557c05728d88195fb0d008cacbf565'\n+silent! let g:plugs['nvim-treesitter'].commit = 'f1373051e554cc4642cda719c8023e4e8508eb2d'\n+silent! let g:plugs['nvim-web-devicons'].commit = 'bdd43421437f2ef037e0dafeaaaa62b31d35ef2f'\n silent! let g:plugs['onebuddy'].commit = '7e16006e7dde15e3cb72889f736c49409db6ff42'\n-silent! let g:plugs['onedark.nvim'].commit = 'e520a0c81a5a1997ecffd846ccd9c6e63b7859c6'\n-silent! let g:plugs['playground'].commit = '13e2d2d63ce7bc5d875e8bdf89cb070bc8cc7a00'\n-silent! let g:plugs['plenary.nvim'].commit = '9069d14a120cadb4f6825f76821533f2babcab92'\n+silent! let g:plugs['onedark.nvim'].commit = '08cde8acf181b3278dafb9c8284726104a11cc0f'\n+silent! let g:plugs['playground'].commit = '71b00a3c665298e5155ad64a9020135808d4e3e8'\n+silent! let g:plugs['plenary.nvim'].commit = '0a907364b5cd6e3438e230df7add8b9bb5ef6fd3'\n silent! let g:plugs['popfix'].commit = 'ea262861ce3905b90c2c203b74a7be2539f1aba4'\n silent! let g:plugs['popup.nvim'].commit = 'b7404d35d5d3548a82149238289fa71f7f6de4ac'\n-silent! let g:plugs['refactoring.nvim'].commit = '94eaa199ad892f26d2c8594dbbc5656314cf5bdb'\n-silent! let g:plugs['stylua-nvim'].commit = '8bd7fa127367178dddb9ee06fdce1d7c622d2feb'\n+silent! let g:plugs['refactoring.nvim'].commit = '33ac6f3bcfe97447037ded20291d40de34d8912c'\n+silent! let g:plugs['stylua-nvim'].commit = 'ce59a353f02938cba3e0285e662fcd3901cd270f'\n silent! let g:plugs['targets.vim'].commit = '8d6ff2984cdfaebe5b7a6eee8f226a6dd1226f2d'\n silent! let g:plugs['telescope-dap.nvim'].commit = 'b4134fff5cbaf3b876e6011212ed60646e56f060'\n-silent! let g:plugs['telescope.nvim'].commit = '8b02088743c07c2f82aec2772fbd2b3774195448'\n+silent! let g:plugs['telescope.nvim'].commit = '39b12d84e86f5054e2ed98829b367598ae53ab41'\n silent! let g:plugs['termopen.vim'].commit = '3194a991a18a9be2fd9fcf8c4c55fe990c04b2bd'\n silent! let g:plugs['undotree'].commit = '08e259be24d4476c1ee745dc735eefd44f90efdc'\n silent! let g:plugs['vim-be-good'].commit = 'bc499a06c14c729b22a6cc7e730a9fbc44d4e737'\n silent! let g:plugs['vim-commentary'].commit = '3654775824337f466109f00eaf6759760f65be34'\n silent! let g:plugs['vim-dispatch'].commit = '00e77d90452e3c710014b26dc61ea919bc895e92'\n-silent! let g:plugs['vim-doge'].commit = '88d8dfacc3a5f3dfce82ef5221e5e6943e627d85'\n-silent! let g:plugs['vim-floaterm'].commit = '6244d1739aad6682c6c1d5db18c846c342af6e3e'\n-silent! let g:plugs['vim-fugitive'].commit = 'b5bbd0d181ebc3cea5c42bdaed13141850432ba1'\n+silent! let g:plugs['vim-doge'].commit = 'd5b08d01f64396557d9912b3830717d45671764b'\n+silent! let g:plugs['vim-floaterm'].commit = 'ab7876f86c05c1935eb23a193f4f276132902ac1'\n+silent! let g:plugs['vim-fugitive'].commit = 'a8139d37b242c5bc5ceeddc4fcd7dddf2b2c2650'\n silent! let g:plugs['vim-indent-object'].commit = '5c5b24c959478929b54a9e831a8e2e651a465965'\n silent! let g:plugs['vim-ipython-cell'].commit = 'f0548d9a8d5e31d5c7f73e8729b55e8eb402852f'\n silent! let g:plugs['vim-log-highlighting'].commit = '1037e26f3120e6a6a2c0c33b14a84336dee2a78f'\n silent! let g:plugs['vim-quicklink'].commit = '021167741588555501594e1fc31f130b16acefa0'\n silent! let g:plugs['vim-repeat'].commit = '24afe922e6a05891756ecf331f39a1f6743d3d5a'\n silent! let g:plugs['vim-signify'].commit = '69498f6d49f3eeac06870012416dd9bf867b84f3'\n-silent! let g:plugs['vim-slime'].commit = '0ea9b35882155996171fd15a5227e673ce2d2c60'\n+silent! let g:plugs['vim-slime'].commit = '6e4b81303968f37346925d6907b96ef07788cc82'\n silent! let g:plugs['vim-sneak'].commit = '94c2de47ab301d476a2baec9ffda07367046bec9'\n-silent! let g:plugs['vim-surround'].commit = '81fc0ec460dd8b25a76346e09aecdbca2677f1a7'\n+silent! let g:plugs['vim-surround'].commit = 'bf3480dc9ae7bea34c78fbba4c65b4548b5b1fea'\n silent! let g:plugs['vim-test'].commit = '2240d7a4b868cb594b7d83544e1b6db4df806e5e'\n silent! let g:plugs['vim-tmux-runner'].commit = '54767911fd5e6e2d8e493847149e315ac2e6531a'\n-silent! let g:plugs['vim-ultest'].commit = 'a99eb0bdf7d901d538b5dd724e2ab3a958c1799c'\n+silent! let g:plugs['vim-ultest'].commit = '6978fd32e3ca2c1c5591884eea0d57a7ee43d212'\n silent! let g:plugs['vim-visualstar'].commit = 'a18cd0e7a03311ac709595c1d261ed44b45c9098'\n silent! let g:plugs['vim-vsnip'].commit = '8f199ef690ed26dcbb8973d9a6760d1332449ac9'\n```\n\n## Commits\n\nNow I can look through all the versions of my `snapshot.vim` by opening it,\nrunning `:0Gclog` and navigating the quickfix list with `:cnext` and `:cprev`.\nIf I want to install one of the old versions while its open in a buffer, all I\nneed to do is run `:source %`.\n\n## Log\n\nNow the log of my `snapshots.vim` looks like this.  I saved the working\nversion, and successfully updated to the latest versions of all plugins, with a\nsave point I can revert back to.\n\n``` log\ncommit 20e901196b0d9633a42176f1fe1757e45f709fd3\nAuthor: Waylon S. Walker \u003cwaylon@waylonwalker.com\u003e\nDate:   Fri May 13 20:37:03 2022 -0500\n\n    plugupdate\n\ncommit f9d76368697b4c4427c0fa8ccd5e2449b6e5a9ff\nAuthor: Waylon S. Walker \u003cwaylon@waylonwalker.com\u003e\nDate:   Fri May 13 20:16:11 2022 -0500\n\n    commit my plugin snapshot\n```\n",
      "summary": "A few of my friends and I all just borked our neovim configs during a plug update, and because none of us were using it was painful to recover from.",
      "date_published": "2022-05-13T19:56:38Z",
      "date_modified": "2022-05-13T19:56:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/clean-qutebrowser/",
      "url": "https://go.waylonwalker.com/clean-qutebrowser/",
      "title": "qutebrowser clean up all status bars",
      "content_html": "\u003cp\u003eI really like the super clean look of no status menus, no url bar, no bookmarks\nbar, nothing.  Don’t get me wrong these things are useful, but honestly they\ntake up screen real estate and I RARELY look at them.  What I really want is a\ntoggle hotkey.  I found this one from one of DT’s youtube video’s.  I can now\ntap \u003ccode\u003exx\u003c/code\u003e and both the status bar at the botton and the address bar at the top\ndisappear.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ~/.config/qutebrowser/config.py\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;xb\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;config-cycle statusbar.show always never\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;xt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;config-cycle tabs.show always never\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;xx\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;config-cycle statusbar.show always never;; config-cycle tabs.show always never\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI really like the super clean look of no status menus, no url bar, no bookmarks\nbar, nothing.  Don't get me wrong these things are useful, but honestly they\ntake up screen real estate and I RARELY look at them.  What I really want is a\ntoggle hotkey.  I found this one from one of DT's youtube video's.  I can now\ntap `xx` and both the status bar at the botton and the address bar at the top\ndisappear.\n\n``` python\n# ~/.config/qutebrowser/config.py\n\nconfig.bind(\"xb\", \"config-cycle statusbar.show always never\")\nconfig.bind(\"xt\", \"config-cycle tabs.show always never\")\nconfig.bind(\n    \"xx\",\n    \"config-cycle statusbar.show always never;; config-cycle tabs.show always never\",\n)\n```\n",
      "summary": "I really like the super clean look of no status menus, no url bar, no bookmarks bar, nothing. Don't get me wrong these things are useful, but honestly they...",
      "date_published": "2022-05-11T22:03:30Z",
      "date_modified": "2022-05-11T22:03:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux",
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joshmedeski-fish-lf-icons/",
      "url": "https://go.waylonwalker.com/joshmedeski-fish-lf-icons/",
      "title": "⭐ joshmedeski fish-lf-icons",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/joshmedeski/fish-lf-icons\" 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\"\u003efish-lf-icons\u003c/a\u003e by \u003ca href=\"https://github.com/joshmedeski\" 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\"\u003ejoshmedeski\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFish plugin to add Nerd Font icon support to the lf terminal file manager\u003c/p\u003e\n",
      "content_text": "\nThe work on [fish-lf-icons](https://github.com/joshmedeski/fish-lf-icons) by [joshmedeski](https://github.com/joshmedeski).\n\nFish plugin to add Nerd Font icon support to the lf terminal file manager\n",
      "summary": "The work on fish-lf-icons by joshmedeski.",
      "date_published": "2022-05-11T16:44:26Z",
      "date_modified": "2022-05-11T16:44:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/qutebroswer-write-config-py/",
      "url": "https://go.waylonwalker.com/qutebroswer-write-config-py/",
      "title": "convert your qutebrowser config to config.py",
      "content_html": "\u003cp\u003eWhen you first start qutebrowser It will create some config files in\nyour home directory for you, but they will be empty.\u003c/p\u003e\n\u003ch2 id=\"config\"\u003eConfig \u003ca href=\"#config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAs far as I know qutebrowser will create this default config out of the\nbox for you, if it doesn’t, then somehow it just appeared for me 😁.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree ~/.config/qutebrowser\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/waylon/.config/qutebrowser\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── autoconfig.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── bookmarks\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── urls\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── config.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── greasemonkey\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── quickmarks\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e directories, \u003cspan class=\"m\"\u003e5\u003c/span\u003e files\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"why-convert\"\u003eWhy convert \u003ca href=\"#why-convert\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou might want to confvert if you are more comfortable with the python\nconfig, or if like me you just want config in one place and you are\nstealing configuration options from others who have thiers in config.py.\u003c/p\u003e\n\u003ch2 id=\"convert-to-py\"\u003eConvert to py \u003ca href=\"#convert-to-py\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nWhen you first start qutebrowser It will create some config files in\nyour home directory for you, but they will be empty.\n\n## Config\n\nAs far as I know qutebrowser will create this default config out of the\nbox for you, if it doesn't, then somehow it just appeared for me 😁.\n\n``` bash\n❯ tree ~/.config/qutebrowser\n/home/waylon/.config/qutebrowser\n├── autoconfig.yml\n├── bookmarks\n│   └── urls\n├── config.py\n├── greasemonkey\n└── quickmarks\n\n2 directories, 5 files\n```\n\n## Why convert\n\nYou might want to confvert if you are more comfortable with the python\nconfig, or if like me you just want config in one place and you are\nstealing configuration options from others who have thiers in config.py.\n\n## Convert to py\n\n```\n```\n",
      "summary": "When you first start qutebrowser It will create some config files in your home directory for you, but they will be empty.",
      "date_published": "2022-05-11T07:16:34Z",
      "date_modified": "2022-05-11T07:16:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ewhich/",
      "url": "https://go.waylonwalker.com/ewhich/",
      "title": "Bash function to edit scripts faster",
      "content_html": "\u003cp\u003eI am often editing my own scripts as I develop them. I want to make a better\nworkflow for working with scripts like this.\u003c/p\u003e\n\u003ch2 id=\"currently\"\u003eCurrently \u003ca href=\"#currently\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCurrently I am combining \u003ccode\u003envim\u003c/code\u003e with a \u003ccode\u003ewhich\u003c/code\u003e subshell to etit these files\nlike this.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003efor now lets use my todo command as an example\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim \u003cspan class=\"sb\"\u003e`\u003c/span\u003ewhich todo\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"first-pass\"\u003eFirst pass \u003ca href=\"#first-pass\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOn first pass I made a bash function to do exactly what I have been doing.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eewhich \u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\u003cspan class=\"nv\"\u003e$EDITOR\u003c/span\u003e \u003cspan class=\"sb\"\u003e`\u003c/span\u003ewhich \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe \u003ccode\u003e$1\u003c/code\u003e will pass the first input to the which subshell.  Now we can edit our todo script like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eewich todo\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote, I use bash functions instead of aliases for things that require input.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"final-state\"\u003eFinal State \u003ca href=\"#final-state\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis works fine for commands that are files, but not aliases or shell\nfunctions.  Next I jumped to looking at the output of \u003ccode\u003ecommand -V $1\u003c/code\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eif the command is not found, search for a file\u003c/li\u003e\n\u003cli\u003eif its a builtin, exit\u003c/li\u003e\n\u003cli\u003eif its an alias, open my \u003ccode\u003e~/.alias file to that line\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eif its a function, open my \u003ccode\u003e~/.alias file to that line\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eewhich \u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"nb\"\u003ecommand\u003c/span\u003e -V \u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e not found\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eFILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003efzf --prompt \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e not found searching ...\u0026#34;\u003c/span\u003e --query \u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$FILE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;closing\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nv\"\u003e$EDITOR\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FILE\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"s2\"\u003e\u0026#34;is a shell builtin\u0026#34;\u003c/span\u003e*\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e is a builtin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"s2\"\u003e\u0026#34;is an alias\u0026#34;\u003c/span\u003e*\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003e$EDITOR\u003c/span\u003e ~/.alias +/alias\u003cspan class=\"se\"\u003e\\ \u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"s2\"\u003e\u0026#34;is a shell function\u0026#34;\u003c/span\u003e*\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003e$EDITOR\u003c/span\u003e ~/.alias +/^\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003e$EDITOR\u003c/span\u003e \u003cspan class=\"sb\"\u003e`\u003c/span\u003ewhich \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"a-bit-more-ergo-and-less-readable\"\u003ea bit more ergo, and less readable \u003ca href=\"#a-bit-more-ergo-and-less-readable\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo make it easier to type, at the sacrifice of readability for anyone watching\nI added a single character \u003ccode\u003ee\u003c/code\u003e alias to ewhich.  So when I want to edit\nanything I just use \u003ccode\u003ee\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003ee\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eewhich\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"results\"\u003eResults \u003ca href=\"#results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a quick screencast of how it works.\u003c/p\u003e\n\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\"\u003e\n     \u003csource src=\"https://images.waylonwalker.com/ewhich.webm\" type=\"video/webm\"/\u003e\n     Sorry, your browser doesn\u0026#39;t support embedded videos.\n\u003c/video\u003e\n",
      "content_text": "\nI am often editing my own scripts as I develop them. I want to make a better\nworkflow for working with scripts like this.\n\n## Currently\n\nCurrently I am combining `nvim` with a `which` subshell to etit these files\nlike this.\n\n\u003e for now lets use my todo command as an example\n\n``` bash\nnvim `which todo`\n```\n\n## First pass\n\nOn first pass I made a bash function to do exactly what I have been doing.\n\n```bash\newhich () {$EDITOR `which \"$1\"`}\n```\n\nThe `$1` will pass the first input to the which subshell.  Now we can edit our todo script like this.\n\n```bash\newich todo\n```\n\n\u003e  Note, I use bash functions instead of aliases for things that require input.\n\n## Final State\n\nThis works fine for commands that are files, but not aliases or shell\nfunctions.  Next I jumped to looking at the output of `command -V $1`.\n\n* if the command is not found, search for a file\n* if its a builtin, exit\n* if its an alias, open my `~/.alias file to that line`\n* if its a function, open my `~/.alias file to that line`\n\n``` bash\newhich () {\ncase `command -V $1` in\n    \"$1 not found\")\n        FILE=`fzf --prompt \"$1 not found searching ...\" --query $1`\n        [ -z \"$FILE\" ] \u0026\u0026 echo \"closing\" || $EDITOR $FILE;;\n    *\"is a shell builtin\"*)\n        echo \"$1 is a builtin\";;\n    *\"is an alias\"*)\n        $EDITOR ~/.alias +/alias\\ $1;;\n    *\"is a shell function\"*)\n        $EDITOR ~/.alias +/^$1;;\n    *)\n        $EDITOR `which \"$1\"`;;\nesac\n```\n\n## a bit more ergo, and less readable\n\nTo make it easier to type, at the sacrifice of readability for anyone watching\nI added a single character `e` alias to ewhich.  So when I want to edit\nanything I just use `e`.\n\n```bash\nalias e=ewhich\n```\n\n## Results\n\nHere is a quick screencast of how it works.\n\n\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\"\u003e\n     \u003csource src=\"https://images.waylonwalker.com/ewhich.webm\" type=\"video/webm\"\u003e\n     Sorry, your browser doesn't support embedded videos.\n\u003c/video\u003e\n",
      "summary": "I am often editing my own scripts as I develop them. I want to make a better workflow for working with scripts like this.",
      "date_published": "2022-05-10T14:57:35Z",
      "date_modified": "2022-05-10T14:57:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-python-all-commits/",
      "url": "https://go.waylonwalker.com/git-python-all-commits/",
      "title": "List all git commits with GitPython",
      "content_html": "\u003cp\u003eI am getting ready to do some timeseries analysis on a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo with python, my\nfirst step is to figure out a way to list all of the git commits so that I can\nanalyze each one however I want.  The GitPython library made this almost\ntrivial once I realized how.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003egit\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eRepo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eRepo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;.\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecommits\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiter_commits\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis returns a generator, if you are iterating over them this is likely what\nyou want.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecommits\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u0026lt;generator object Commit._iter_from_process_or_stream at 0x7f3307584510\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe generator will return \u003ccode\u003egit.Commit\u003c/code\u003e objects with lots of information about\neach commit such as \u003ccode\u003ehexsha\u003c/code\u003e, \u003ccode\u003eauthor\u003c/code\u003e, \u003ccode\u003ecommited_datetime\u003c/code\u003e, \u003ccode\u003egpgsig\u003c/code\u003e, and\n\u003ccode\u003emessage\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003enext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecommits\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# \u0026lt;git.Commit \u0026#34;d125317892d0fab10a36638a2d23356ba25c5621\u0026#34;\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI am getting ready to do some timeseries analysis on a git repo with python, my\nfirst step is to figure out a way to list all of the git commits so that I can\nanalyze each one however I want.  The GitPython library made this almost\ntrivial once I realized how.\n\n``` python\nfrom git import Repo\n\nrepo = Repo('.')\ncommits = repo.iter_commits()\n```\n\nThis returns a generator, if you are iterating over them this is likely what\nyou want.\n\n``` python\ncommits\n# \u003cgenerator object Commit._iter_from_process_or_stream at 0x7f3307584510\u003e\n```\n\nThe generator will return `git.Commit` objects with lots of information about\neach commit such as `hexsha`, `author`, `commited_datetime`, `gpgsig`, and\n`message`.\n\n``` python\nnext(commits)\n# \u003cgit.Commit \"d125317892d0fab10a36638a2d23356ba25c5621\"\u003e\n```\n",
      "summary": "I am getting ready to do some timeseries analysis on a git repo with python, my first step is to figure out a way to list all of the git commits so that I...",
      "date_published": "2022-05-09T21:24:12Z",
      "date_modified": "2022-05-09T21:24:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gpg-sign-git-ssh/",
      "url": "https://go.waylonwalker.com/gpg-sign-git-ssh/",
      "title": "GPG signing commits over ssh",
      "content_html": "\u003cp\u003eI was editing some blog posts over ssh, when I ran into\nthis error.  gpg was failing to sign my commits.  I\nrealized that this was because I could not answer to the\ndesktop keyring over ssh, but had no idea how to fix it.\u003c/p\u003e\n\u003ch2 id=\"error\"\u003eError \u003ca href=\"#error\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is the error message I was seeing.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egpg failed to sign the data ssh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"the-fix\"\u003eThe fix \u003ca href=\"#the-fix\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe fix ended up being pretty simple, but quite a ways down this \u003ca href=\"https://stackoverflow.com/questions/41052538/git-error-gpg-failed-to-sign-data/41054093\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\" class=\"has-avatar  has-avatar-before\"\u003estack overflow post\u003c/a\u003e.\nThis environment variable tells gpg that we are not logged\ninto a desktop and it does not try to use the desktop\nkeyring, and asks to unlog the gpgkey right in the\nterminal.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eGPG_TTY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etty\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"the-log-in-menu\"\u003eThe log in menu \u003ca href=\"#the-log-in-menu\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is what it looks like when it asks for the passphrase.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/gpg-passphrase-unlock.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/gpg-passphrase-unlock.png\" alt=\"enter your passphrase to unlock your gpg key\"/ data-glightbox=\"description: enter your passphrase to unlock your gpg key\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"edit-another-way\"\u003eEDIT-another way \u003ca href=\"#edit-another-way\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo this did not fix the issue on Arch BTW, and I have seen it not work for wsl\nusers either.  This did work for me and reported to have worked by a wsl user\non a github issue.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e gpg --clearsign\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis will unlock the gpg key then let you commit.\u003c/p\u003e\n",
      "content_text": "\nI was editing some blog posts over ssh, when I ran into\nthis error.  gpg was failing to sign my commits.  I\nrealized that this was because I could not answer to the\ndesktop keyring over ssh, but had no idea how to fix it.\n\n## Error\n\nThis is the error message I was seeing.\n\n```\ngpg failed to sign the data ssh\n```\n\n## The fix\n\nThe fix ended up being pretty simple, but quite a ways down this [stack overflow post](https://stackoverflow.com/questions/41052538/git-error-gpg-failed-to-sign-data/41054093).\nThis environment variable tells gpg that we are not logged\ninto a desktop and it does not try to use the desktop\nkeyring, and asks to unlog the gpgkey right in the\nterminal.\n\n``` bash\nexport GPG_TTY=$(tty)\n```\n\n## The log in menu\n\nThis is what it looks like when it asks for the passphrase.\n\n![enter your passphrase to unlock your gpg key](https://images.waylonwalker.com/gpg-passphrase-unlock.png)\n\n## EDIT-another way\n\nSo this did not fix the issue on Arch BTW, and I have seen it not work for wsl\nusers either.  This did work for me and reported to have worked by a wsl user\non a github issue.\n\n``` bash\necho '' | gpg --clearsign\n```\n\nThis will unlock the gpg key then let you commit.\n",
      "summary": "I was editing some blog posts over ssh, when I ran into this error. gpg was failing to sign my commits. I realized that this was because I could not answer...",
      "date_published": "2022-05-08T15:09:59Z",
      "date_modified": "2022-05-08T15:09:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-wish-lists/",
      "url": "https://go.waylonwalker.com/pypeaday-wish-lists/",
      "title": "⭐ pypeaday wish-lists",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/pypeaday/wish-lists\" 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\"\u003ewish-lists\u003c/a\u003e, created by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eamazon wish lists replacement\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [wish-lists](https://github.com/pypeaday/wish-lists), created by [pypeaday](https://github.com/pypeaday).\n\namazon wish lists replacement\n",
      "summary": "If you're into interesting projects, don't miss out on wish-lists, created by pypeaday.",
      "date_published": "2022-05-07T14:36:01Z",
      "date_modified": "2022-05-07T14:36:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-typeshed/",
      "url": "https://go.waylonwalker.com/python-typeshed/",
      "title": "⭐ python typeshed",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/python/typeshed\" 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\"\u003etypeshed\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/python\" 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\"\u003epython\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eCollection of library stubs for Python, with static types\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [typeshed](https://github.com/python/typeshed), an amazing project by [python](https://github.com/python). It's worth exploring!\n\nCollection of library stubs for Python, with static types\n",
      "summary": "I'm really excited about typeshed, an amazing project by python. It's worth exploring!",
      "date_published": "2022-05-07T01:31:40Z",
      "date_modified": "2022-05-07T01:31:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-mypy/",
      "url": "https://go.waylonwalker.com/python-mypy/",
      "title": "⭐ python mypy",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/python/mypy\" 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\"\u003emypy\u003c/a\u003e, created by \u003ca href=\"https://github.com/python\" 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\"\u003epython\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eOptional static typing for Python\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [mypy](https://github.com/python/mypy), created by [python](https://github.com/python).\n\nOptional static typing for Python\n",
      "summary": "If you're into interesting projects, don't miss out on mypy, created by python.",
      "date_published": "2022-05-07T01:31:35Z",
      "date_modified": "2022-05-07T01:31:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/review-pull-requests-with-git-worktrees/",
      "url": "https://go.waylonwalker.com/review-pull-requests-with-git-worktrees/",
      "title": "Review Pull Requests with git worktrees",
      "content_html": "\u003cp\u003eSometimes you get a PR on a project, but cannot review it without wrecking your\ncurrent working setup.  This might be because it needs to be compiled, or a new\nset of requirements.  \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e worktrees is a great way to chekout the remote branch\nin a completely separate directory to avoid changing any files in your current\nproject.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# pattern\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# git worktree add -b \u0026lt;branch-name\u0026gt; \u0026lt;PATH\u0026gt; \u0026lt;remote\u0026gt;/\u0026lt;branch-name\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree add -b fix-aws-service-cnsn /tmp/project origin/fix-aws-service-cnsn\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis will create a new directory \u003ccode\u003e/tmp/project\u003c/code\u003e that you can review the branch\n\u003ccode\u003efix-aws-service-cnsn\u003c/code\u003e from the remote \u003ccode\u003eorigin\u003c/code\u003e.  If you have setup different remotes locally you can check for the name of it with \u003ccode\u003egit remote -v\u003c/code\u003e\u003c/p\u003e\n",
      "content_text": "\nSometimes you get a PR on a project, but cannot review it without wrecking your\ncurrent working setup.  This might be because it needs to be compiled, or a new\nset of requirements.  Git worktrees is a great way to chekout the remote branch\nin a completely separate directory to avoid changing any files in your current\nproject.\n\n``` bash\n# pattern\n# git worktree add -b \u003cbranch-name\u003e \u003cPATH\u003e \u003cremote\u003e/\u003cbranch-name\u003e\ngit worktree add -b fix-aws-service-cnsn /tmp/project origin/fix-aws-service-cnsn\n```\n\nThis will create a new directory `/tmp/project` that you can review the branch\n`fix-aws-service-cnsn` from the remote `origin`.  If you have setup different remotes locally you can check for the name of it with `git remote -v`\n",
      "summary": "Sometimes you get a PR on a project, but cannot review it without wrecking your current working setup. This might be because it needs to be compiled, or a...",
      "date_published": "2022-05-04T14:31:05Z",
      "date_modified": "2022-05-04T14:31:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/numtide-devshell/",
      "url": "https://go.waylonwalker.com/numtide-devshell/",
      "title": "⭐ numtide devshell",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/numtide/devshell\" 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\"\u003edevshell\u003c/a\u003e from \u003ca href=\"https://github.com/numtide\" 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\"\u003enumtide\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePer project developer environments\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [devshell](https://github.com/numtide/devshell) from [numtide](https://github.com/numtide).\n\nPer project developer environments\n",
      "summary": "I'm impressed by devshell from numtide.",
      "date_published": "2022-05-03T12:06:20Z",
      "date_modified": "2022-05-03T12:06:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pyscript-pyscript/",
      "url": "https://go.waylonwalker.com/pyscript-pyscript/",
      "title": "⭐ pyscript pyscript",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/pyscript/pyscript\" 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\"\u003epyscript\u003c/a\u003e by \u003ca href=\"https://github.com/pyscript\" 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\"\u003epyscript\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePyScript is an open source platform for Python in the browser. Try PyScript: \u003ca href=\"https://pyscript.com\"\u003ehttps://pyscript.com\u003c/a\u003e  Examples: \u003ca href=\"https://tinyurl.com/pyscript-examples\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/tinyurl.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/tinyurl.com.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://tinyurl.com/pyscript-examples\u003c/a\u003e  Community: \u003ca href=\"https://discord.gg/HxvBtukrg2\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/discord.gg.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/discord.gg.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://discord.gg/HxvBtukrg2\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nThe work on [pyscript](https://github.com/pyscript/pyscript) by [pyscript](https://github.com/pyscript).\n\nPyScript is an open source platform for Python in the browser. Try PyScript: https://pyscript.com  Examples: https://tinyurl.com/pyscript-examples  Community: https://discord.gg/HxvBtukrg2\n",
      "summary": "The work on pyscript by pyscript.",
      "date_published": "2022-05-03T03:32:30Z",
      "date_modified": "2022-05-03T03:32:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-tdarr/",
      "url": "https://go.waylonwalker.com/pypeaday-tdarr/",
      "title": "⭐ pypeaday tdarr",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e and their project \u003ca href=\"https://github.com/pypeaday/tdarr\" 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\"\u003etdarr\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003etdarr setup\u003c/p\u003e\n",
      "content_text": "\nCheck out [pypeaday](https://github.com/pypeaday) and their project [tdarr](https://github.com/pypeaday/tdarr).\n\ntdarr setup\n",
      "summary": "Check out pypeaday and their project tdarr.",
      "date_published": "2022-05-02T13:04:29Z",
      "date_modified": "2022-05-02T13:04:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/koaning-skedulord/",
      "url": "https://go.waylonwalker.com/koaning-skedulord/",
      "title": "⭐ koaning skedulord",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/koaning/skedulord\" 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\"\u003eskedulord\u003c/a\u003e, created by \u003ca href=\"https://github.com/koaning\" 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\"\u003ekoaning\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ecaptures logs and makes cron more fun\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [skedulord](https://github.com/koaning/skedulord), created by [koaning](https://github.com/koaning).\n\ncaptures logs and makes cron more fun\n",
      "summary": "If you're into interesting projects, don't miss out on skedulord, created by koaning.",
      "date_published": "2022-05-01T16:52:45Z",
      "date_modified": "2022-05-01T16:52:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-git/",
      "url": "https://go.waylonwalker.com/python-git/",
      "title": "Using Git from Python",
      "content_html": "\u003cp\u003e\u003ccode\u003eGitPython\u003c/code\u003e is a python api for your \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repos, it can be quite handy when you\nneed to work with git from python.\u003c/p\u003e\n\u003ch2 id=\"use-case\"\u003eUse Case \u003ca href=\"#use-case\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI recently made myself a handy tool for making screenshots in python and it\nneed to do a git commit and push from within the script.  For this I reached\nfor \u003ccode\u003eGitPython\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/screenshot-to-blog/\" class=\"wikilink\" data-title=\"How I Quickly Capture Screenshots directly into My Blog\" data-description=\"When I am creating blog posts it\u0026#39;s often helpful to add screenshots to them to illustrate what I see on my screen. Sometimes I lack good screenshots in my...\" data-date=\"2022-04-30\" data-preview=\"When I am creating blog posts it\u0026#39;s often helpful to add screenshots to them to illustrate what I see on my screen. Sometimes I lack good screenshots in my...\"\u003eHow I Quickly Capture Screenshots directly into My Blog\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eGitPython\u003c/code\u003e is a python library hosted on pypi that we will want to install\ninto our virtual environments using pip.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003eGitPython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"create-a-repo-object\"\u003eCreate a Repo Object \u003ca href=\"#create-a-repo-object\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eImport Repo from the git library and create an instance of the \u003ccode\u003eRepo\u003c/code\u003e object by\ngiving it a path to the directory containing your \u003ccode\u003e.git\u003c/code\u003e directory.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003egit\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eRepo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eRepo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;~/git/waylonwalker.com/\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"two-interfaces\"\u003eTwo interfaces \u003ca href=\"#two-interfaces\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003efrom the docs\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt provides abstractions of git objects for easy access of repository data,\nand additionally allows you to access the git repository more directly using\neither a pure python implementation, or the faster, but more resource\nintensive git command implementation.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI only needed to use the more intensive but familar to me git command\nimplementation to get me project off the ground.  There is a good\n\u003ca href=\"https://gitpython.readthedocs.io/en/stable/tutorial.html#tutorial-label\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/gitpython.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/gitpython.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003etutorial\u003c/a\u003e\nto get you started with their pure python implementation in their docs.\u003c/p\u003e\n\u003ch2 id=\"status\"\u003eStatus \u003ca href=\"#status\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRequesting the git status can be done as follows.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003enote I have prefixed my commands with »\u0026gt; to distinguish between the command\nI entered and the output.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; print(repo.git.status())\n\nOn branch main\nYour branch is ahead of \u0026#39;origin/main\u0026#39; by 1 commit.\n  (use \u0026#34;git push\u0026#34; to publish your local commits)\n\nUntracked files:\n  (use \u0026#34;git add \u0026lt;file\u0026gt;...\u0026#34; to include in what will be committed)\n        blog/\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can even pass in flags that you would pass into the cli.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; print(repo.git.status(\u0026#34;-s\u0026#34;))\n?? blog/\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"log\"\u003elog \u003ca href=\"#log\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eExample of using the log.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepo\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egit\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;--oneline\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;--graph\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"n\"\u003ed28bd8\u003c/span\u003e \u003cspan class=\"n\"\u003efix\u003c/span\u003e \u003cspan class=\"n\"\u003ebroken\u003c/span\u003e \u003cspan class=\"n\"\u003eimage\u003c/span\u003e \u003cspan class=\"n\"\u003elink\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"mi\"\u003e3573928\u003c/span\u003e \u003cspan class=\"n\"\u003ewip\u003c/span\u003e \u003cspan class=\"n\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eblog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003efed9abc\u003c/span\u003e \u003cspan class=\"n\"\u003ewip\u003c/span\u003e \u003cspan class=\"n\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eblog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003ed383780\u003c/span\u003e \u003cspan class=\"n\"\u003eupdate\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ewsl2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003ead72b14\u003c/span\u003e \u003cspan class=\"n\"\u003ewip\u003c/span\u003e \u003cspan class=\"n\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eblog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"mi\"\u003e144\u003c/span\u003e\u003cspan class=\"n\"\u003ec2f3\u003c/span\u003e \u003cspan class=\"n\"\u003egratitude\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e180\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"find-deleted-files\"\u003eFind Deleted Files \u003ca href=\"#find-deleted-files\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWe can even do things like find all files that have been deleted and the hash\nthey were deleted.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepo\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egit\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;--diff-filter\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;D\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;--name-only\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;--pretty=format:\u0026#34;%h\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/git-find-deleted-files/\" class=\"wikilink\" data-title=\"git find deleted files\" data-description=\"It\u0026#39;s nearly impossible to completely loose a file if it is commited to git. It\u0026#39;s likely harder to fully remove the file than it is to recover it, but how do...\" data-date=\"2022-02-28\" data-preview=\"It\u0026#39;s nearly impossible to completely loose a file if it is commited to git. It\u0026#39;s likely harder to fully remove the file than it is to recover it, but how do...\"\u003egit find deleted files\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003efull post on finding deleted files\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"my-experience\"\u003eMy Experience \u003ca href=\"#my-experience\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis library seemed pretty straightforward and predicatable once I realized\nthere were two main implementations and that I would already be familar with\nthe more intensive git command implementation.\u003c/p\u003e\n",
      "content_text": "\n`GitPython` is a python api for your git repos, it can be quite handy when you\nneed to work with git from python.\n\n## Use Case\n\nI recently made myself a handy tool for making screenshots in python and it\nneed to do a git commit and push from within the script.  For this I reached\nfor `GitPython`.\n\n\u003ca href=\"/screenshot-to-blog/\" class=\"wikilink\" data-title=\"How I Quickly Capture Screenshots directly into My Blog\" data-description=\"When I am creating blog posts it\u0026#39;s often helpful to add screenshots to them to illustrate what I see on my screen. Sometimes I lack good screenshots in my...\" data-date=\"2022-04-30\"\u003eHow I Quickly Capture Screenshots directly into My Blog\u003c/a\u003e\n\n## Installation\n\n`GitPython` is a python library hosted on pypi that we will want to install\ninto our virtual environments using pip.\n\n``` python\npip install GitPython\n```\n\n## Create a Repo Object\n\nImport Repo from the git library and create an instance of the `Repo` object by\ngiving it a path to the directory containing your `.git` directory.\n\n``` python\nfrom git import Repo\nrepo = Repo('~/git/waylonwalker.com/')\n```\n\n## Two interfaces\n\nfrom the docs\n\n\u003e It provides abstractions of git objects for easy access of repository data,\n\u003e and additionally allows you to access the git repository more directly using\n\u003e either a pure python implementation, or the faster, but more resource\n\u003e intensive git command implementation.\n\nI only needed to use the more intensive but familar to me git command\nimplementation to get me project off the ground.  There is a good\n[tutorial](https://gitpython.readthedocs.io/en/stable/tutorial.html#tutorial-label)\nto get you started with their pure python implementation in their docs.\n\n## Status\n\nRequesting the git status can be done as follows.\n\n\u003e note I have prefixed my commands with \u003e\u003e\u003e to distinguish between the command\n\u003e I entered and the output.\n\n```\n\u003e\u003e\u003e print(repo.git.status())\n\nOn branch main\nYour branch is ahead of 'origin/main' by 1 commit.\n  (use \"git push\" to publish your local commits)\n\nUntracked files:\n  (use \"git add \u003cfile\u003e...\" to include in what will be committed)\n        blog/\n```\n\nYou can even pass in flags that you would pass into the cli.\n\n```\n\u003e\u003e\u003e print(repo.git.status(\"-s\"))\n?? blog/\n```\n\n## log\n\nExample of using the log.\n\n``` python\nprint(repo.git.log('--oneline', '--graph'))\n\n* 0d28bd8 fix broken image link\n* 3573928 wip screenshot-to-blog\n* fed9abc wip screenshot-to-blog\n* d383780 update for wsl2\n* ad72b14 wip screenshot-to-blog\n* 144c2f3 gratitude-180\n```\n\n## Find Deleted Files\n\nWe can even do things like find all files that have been deleted and the hash\nthey were deleted.\n\n``` python\nprint(repo.git.log('--diff-filter', 'D', '--name-only', '--pretty=format:\"%h\"'))\n```\n\n\u003ca href=\"/git-find-deleted-files/\" class=\"wikilink\" data-title=\"git find deleted files\" data-description=\"It\u0026#39;s nearly impossible to completely loose a file if it is commited to git. It\u0026#39;s likely harder to fully remove the file than it is to recover it, but how do...\" data-date=\"2022-02-28\"\u003egit find deleted files\u003c/a\u003e\n\n\u003e full post on finding deleted files\n\n## My Experience\n\nThis library seemed pretty straightforward and predicatable once I realized\nthere were two main implementations and that I would already be familar with\nthe more intensive git command implementation.\n",
      "summary": "is a python api for your git repos, it can be quite handy when you need to work with git from python.",
      "date_published": "2022-04-30T20:23:23Z",
      "date_modified": "2022-04-30T20:23:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rcarriga-nvim-notify/",
      "url": "https://go.waylonwalker.com/rcarriga-nvim-notify/",
      "title": "⭐ rcarriga nvim-notify",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rcarriga/nvim-notify\" 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\"\u003envim-notify\u003c/a\u003e by \u003ca href=\"https://github.com/rcarriga\" 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\"\u003ercarriga\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA fancy, configurable, notification manager for NeoVim\u003c/p\u003e\n",
      "content_text": "\n[nvim-notify](https://github.com/rcarriga/nvim-notify) by [rcarriga](https://github.com/rcarriga) is a game-changer in its space. Excited to see how it evolves.\n\nA fancy, configurable, notification manager for NeoVim\n",
      "summary": "nvim-notify by rcarriga is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2022-04-29T00:31:23Z",
      "date_modified": "2022-04-29T00:31:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/scottbarnesg-smart-sec-cam/",
      "url": "https://go.waylonwalker.com/scottbarnesg-smart-sec-cam/",
      "title": "⭐ scottbarnesg smart-sec-cam",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/scottbarnesg/smart-sec-cam\" 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\"\u003esmart-sec-cam\u003c/a\u003e from \u003ca href=\"https://github.com/scottbarnesg\" 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\"\u003escottbarnesg\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA privacy-focused, intelligent security camera system.\u003c/p\u003e\n",
      "content_text": "\nI came across [smart-sec-cam](https://github.com/scottbarnesg/smart-sec-cam) from [scottbarnesg](https://github.com/scottbarnesg), and it's packed with great features and ideas.\n\nA privacy-focused, intelligent security camera system.\n",
      "summary": "I came across smart-sec-cam from scottbarnesg, and it's packed with great features and ideas.",
      "date_published": "2022-04-19T02:54:21Z",
      "date_modified": "2022-04-19T02:54:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pipx-on-windows/",
      "url": "https://go.waylonwalker.com/pipx-on-windows/",
      "title": "pipx on windows",
      "content_html": "\u003cp\u003ePython, click install\u003c/p\u003e\n\u003cp\u003eEdit the System Environment Variables\u003c/p\u003e\n\u003cp\u003eEnvironment Variables button\u003c/p\u003e\n\u003cp\u003eAdd the following path to your users Path Variable\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eC:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C:\\Program Files\\dotnet\\;C:\\Users\\quadm\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\Scripts;\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nPython, click install\n\nEdit the System Environment Variables\n\nEnvironment Variables button\n\nAdd the following path to your users Path Variable\n\n```\nC:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C:\\Program Files\\dotnet\\;C:\\Users\\quadm\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\Scripts;\n```\n",
      "summary": "Python, click install",
      "date_published": "2022-04-18T14:03:38Z",
      "date_modified": "2022-04-18T14:03:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/httpie-cli/",
      "url": "https://go.waylonwalker.com/httpie-cli/",
      "title": "⭐ httpie cli",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/httpie/cli\" 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\"\u003ecli\u003c/a\u003e from \u003ca href=\"https://github.com/httpie\" 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\"\u003ehttpie\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003e🥧 HTTPie CLI  — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins \u0026amp; more.\u003c/p\u003e\n",
      "content_text": "\nI came across [cli](https://github.com/httpie/cli) from [httpie](https://github.com/httpie), and it's packed with great features and ideas.\n\n🥧 HTTPie CLI  — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins \u0026 more.\n",
      "summary": "I came across cli from httpie, and it's packed with great features and ideas.",
      "date_published": "2022-04-14T18:49:57Z",
      "date_modified": "2022-04-14T18:49:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nbdd0121-wsld/",
      "url": "https://go.waylonwalker.com/nbdd0121-wsld/",
      "title": "⭐ nbdd0121 wsld",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/nbdd0121\" 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\"\u003enbdd0121\u003c/a\u003e and their project \u003ca href=\"https://github.com/nbdd0121/wsld\" 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\"\u003ewsld\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWSL Daemon - Stable X11 connection and time synchronisation for WSL2\u003c/p\u003e\n",
      "content_text": "\nCheck out [nbdd0121](https://github.com/nbdd0121) and their project [wsld](https://github.com/nbdd0121/wsld).\n\nWSL Daemon - Stable X11 connection and time synchronisation for WSL2\n",
      "summary": "Check out nbdd0121 and their project wsld.",
      "date_published": "2022-04-12T12:23:17Z",
      "date_modified": "2022-04-12T12:23:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-sys-excepthook/",
      "url": "https://go.waylonwalker.com/python-sys-excepthook/",
      "title": "Python sys.excepthook",
      "content_html": "\u003cp\u003eSometimes you just want python to do something else when you hit an exception,\nmaybe that’s fire a text, slack message, email, or system notification like I\nwanted.\u003c/p\u003e\n\u003cp\u003eI am working on a quick and dirty python script designed to take screenshots\nand land them on my website in a single hotkey.  With it being designed to run\nwith a hotkey, if it were to error I would not see it.\u003c/p\u003e\n\u003cp\u003eI could have gone down a logging route, but honestly this is meant to be quick,\ndirty, and work on my system for me.  I just want to get it in my system\nnotification.\u003c/p\u003e\n\u003ch2 id=\"sysexcepthook\"\u003esys.excepthook \u003ca href=\"#sysexcepthook\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePython exposes sys.excepthook for just this case.  Here is what I ended up\ndoing to fire a system notification as well as printing the message.  Yaya a\nlog would be mroe appropriate, but this is designed to just get done quick and\ndo the job I want it to do.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003enotify_exception\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etb\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etraceback_details\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejoin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etraceback\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eextract_tb\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etb\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eformat\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emsg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;caller: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39; \u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejoin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"nb\"\u003etype\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e: \u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003etraceback_details\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emsg\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;notify-send \u0026#34;screenshot.py hit an exception\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003emsg\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#34; -a screenshot.py\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexcepthook\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enotify_exception\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nSometimes you just want python to do something else when you hit an exception,\nmaybe that's fire a text, slack message, email, or system notification like I\nwanted.\n\nI am working on a quick and dirty python script designed to take screenshots\nand land them on my website in a single hotkey.  With it being designed to run\nwith a hotkey, if it were to error I would not see it.\n\nI could have gone down a logging route, but honestly this is meant to be quick,\ndirty, and work on my system for me.  I just want to get it in my system\nnotification.\n\n## sys.excepthook\n\nPython exposes sys.excepthook for just this case.  Here is what I ended up\ndoing to fire a system notification as well as printing the message.  Yaya a\nlog would be mroe appropriate, but this is designed to just get done quick and\ndo the job I want it to do.\n\n```python\ndef notify_exception(type, value, tb):\n    traceback_details = \"\\n\".join(traceback.extract_tb(tb).format())\n\n    msg = f\"caller: {' '.join(sys.argv)}\\n{type}: {value}\\n{traceback_details}\"\n    print(msg)\n    Popen(\n        f'notify-send \"screenshot.py hit an exception\" \"{msg}\" -a screenshot.py',\n        shell=True,\n    )\n\n\nsys.excepthook = notify_exception\n0 / 0\n```\n",
      "summary": "Sometimes you just want python to do something else when you hit an exception, maybe that's fire a text, slack message, email, or system notification like I...",
      "date_published": "2022-04-10T14:21:54Z",
      "date_modified": "2022-04-10T14:21:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/linux-tty/",
      "url": "https://go.waylonwalker.com/linux-tty/",
      "title": "A TTY Can Save Your Bacon",
      "content_html": "\u003cp\u003eI recently was unable to boot into my home Linux Desktop, it got stuck at\ndiskcheck \u003ccode\u003efsck\u003c/code\u003e.  I found that I was able to get in to a tty through a hotkey.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/_WaylonWalker/status/1512281106120384519\"\u003ehttps://twitter.com/_WaylonWalker/status/1512281106120384519\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"whats-a-tty\"\u003eWhat’s a TTY? \u003ca href=\"#whats-a-tty\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere’s probably more to it, but to me its a full screen terminal with zero\ngui, not even your gui fonts.  It does log into your default shell so if you\nhave a comfy command line setup it will be here for you even though it looks\nmuch different without fonts and full colorspace.\u003c/p\u003e\n\u003ch2 id=\"normal-setup\"\u003eNormal setup \u003ca href=\"#normal-setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNormally you have 6 TTY’s running, the first is dedicated to your desktop\nmanager, which is your login screen it might be something like gdm or lightdm.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ectrl+alt+F1: login screen\u003c/li\u003e\n\u003cli\u003ectrl+alt+F2: Desktop\u003c/li\u003e\n\u003cli\u003ectrl+alt+F3: TTY 3\u003c/li\u003e\n\u003cli\u003ectrl+alt+F4: TTY 4\u003c/li\u003e\n\u003cli\u003ectrl+alt+F5: TTY 5\u003c/li\u003e\n\u003cli\u003ectrl+alt+F6: TTY 6\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIn my case the desktop manager neverstarted, so ctrl+alt+F1 brought me into a tty.\u003c/p\u003e\n\u003ch2 id=\"what-happened\"\u003eWhat happened?? \u003ca href=\"#what-happened\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWell after getting back in and having some time to reflect, I think my Desktop\nmanager was installed or just broken, possibly during a update I ran a few days\nprior.\u003c/p\u003e\n\u003cp\u003eI tried a bunch of things like switching to lightdm, and manually running startx.\u003c/p\u003e\n\u003ch2 id=\"getting-back-in\"\u003eGetting back in \u003ca href=\"#getting-back-in\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe final commands that ended up getting me back in were installing and starting gdm3.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install gdm3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl start gdm3\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI recently was unable to boot into my home Linux Desktop, it got stuck at\ndiskcheck `fsck`.  I found that I was able to get in to a tty through a hotkey.\n\nhttps://twitter.com/_WaylonWalker/status/1512281106120384519\n\n## What's a TTY?\n\nThere's probably more to it, but to me its a full screen terminal with zero\ngui, not even your gui fonts.  It does log into your default shell so if you\nhave a comfy command line setup it will be here for you even though it looks\nmuch different without fonts and full colorspace.\n\n## Normal setup\n\nNormally you have 6 TTY's running, the first is dedicated to your desktop\nmanager, which is your login screen it might be something like gdm or lightdm.\n\n* ctrl+alt+F1: login screen\n* ctrl+alt+F2: Desktop\n* ctrl+alt+F3: TTY 3\n* ctrl+alt+F4: TTY 4\n* ctrl+alt+F5: TTY 5\n* ctrl+alt+F6: TTY 6\n\nIn my case the desktop manager neverstarted, so ctrl+alt+F1 brought me into a tty.\n\n## What happened??\n\nWell after getting back in and having some time to reflect, I think my Desktop\nmanager was installed or just broken, possibly during a update I ran a few days\nprior.\n\nI tried a bunch of things like switching to lightdm, and manually running startx.\n\n## Getting back in\n\nThe final commands that ended up getting me back in were installing and starting gdm3.\n\n``` bash\nsudo apt install gdm3\nsudo systemctl start gdm3\n```\n",
      "summary": "I recently was unable to boot into my home Linux Desktop, it got stuck at diskcheck . I found that I was able to get in to a tty through a hotkey.",
      "date_published": "2022-04-08T13:46:25Z",
      "date_modified": "2022-04-08T13:46:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "linux",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pygame-event-queue/",
      "url": "https://go.waylonwalker.com/pygame-event-queue/",
      "title": "pygame events are queued | Don't make this mistake",
      "content_html": "\u003cp\u003epygame events are stored in a queue, by default the most suggested way\nshown in all tutorials “\u003ccode\u003epumps\u003c/code\u003e” the queue, which removes all the\nmessages.\u003c/p\u003e\n\u003ch2 id=\"start-up-pygame\"\u003estart up pygame \u003ca href=\"#start-up-pygame\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou don’t necessarily need a full\n\u003ca href=\"https://waylonwalker.com/til/pygame-boilerplate-apr-2022/\" 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\"\u003eboilerplate\u003c/a\u003e\nto start looking at events, you just just need to \u003ccode\u003epygame.init()\u003c/code\u003e and\nto capture any keystrokes you need a window to capture them on, so you\nwill need a display running.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003einit\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset_mode\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"mi\"\u003e854\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e480\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"get-some-events\"\u003eget some events \u003ca href=\"#get-some-events\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLet’s use pygames normal \u003ccode\u003eevent.get\u003c/code\u003e method to get events.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eprinting the events reveal this\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1541\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eJoyDeviceAdded\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;device_index\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;guid\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;030000005e0400008e02000010010000\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4352\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eAudioDeviceAdded\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;which\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;iscapture\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4352\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eAudioDeviceAdded\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;which\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;iscapture\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4352\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eAudioDeviceAdded\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;which\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;iscapture\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4352\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eAudioDeviceAdded\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;which\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;iscapture\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e4352\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eAudioDeviceAdded\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;which\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;iscapture\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32774\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWindowShown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32777\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWindowMoved\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;x\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e535\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;y\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e302\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32770\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVideoExpose\u003c/span\u003e \u003cspan class=\"p\"\u003e{})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32776\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWindowExposed\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32788\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWindowTakeFocus\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eActiveEvent\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;gain\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;state\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32785\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWindowFocusGained\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e97\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e97\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e97\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e97\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e97\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e97\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e102\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;s\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e115\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e22\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e771\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eTextInput\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;d\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyDown\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1073742051\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1024\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e227\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e772\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eUnknown\u003c/span\u003e \u003cspan class=\"p\"\u003e{})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e769\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eKeyUp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unicode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;key\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1073742051\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;mod\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;scancode\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e227\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32768\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eActiveEvent\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;gain\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;state\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e32786\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWindowFocusLost\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;window\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e772\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eUnknown\u003c/span\u003e \u003cspan class=\"p\"\u003e{})\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"lets-get-some-more-events\"\u003eLets get some more events. \u003ca href=\"#lets-get-some-more-events\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLet’s say that we have multpile sprites all asking for the events from\ndifferent places in our game. If we assume that our game loop runs very\nfastand we get events one after another the second one will have no\nevents.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_one\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_two\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eprinting the events reveals that there are no events, well i\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"making-things-more-maddening\"\u003eMaking things more maddening \u003ca href=\"#making-things-more-maddening\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEven simple games don’t quite run infinitely fast there is some delay,\nwith this delay most events will go to event_one, while any that occur\nin the short time between event_one and two will be in event_two’s\nqueue.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etime\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_one\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mf\"\u003e.05\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# simulating some delay that would naturally occur\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_two\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"how-to-resolve-this\"\u003eHow to Resolve this \u003ca href=\"#how-to-resolve-this\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eStore events for each frame in memory.\u003c/p\u003e\n\u003ch2 id=\"pump\"\u003ePump \u003ca href=\"#pump\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI thought \u003ccode\u003epump=False\u003c/code\u003e would be the answer I was looking for, but I was\nproven wrong.  It does not behave intuitivly to me.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_one\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epump\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# all events since last pump\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_two\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epump\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# no events\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eevents_three\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"c1\"\u003e# all events since last pump\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003eevents_one\u003c/code\u003e and \u003ccode\u003eevents_three\u003c/code\u003e will have a list of events, while\n\u003ccode\u003eevents_two\u003c/code\u003e will be empty.  It seems that \u003ccode\u003epump=False\u003c/code\u003e leaves the\nevents there for the next \u003ccode\u003eevent.get()\u003c/code\u003e, but appears cleared to any\n\u003ccode\u003eevent.get(pump=False)\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"keep-a-game-state\"\u003eKeep a Game State \u003ca href=\"#keep-a-game-state\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you want objects to do their own event handling, outside of the main\ngame, you will need to give them some game state with the events in it.\nHowever you decide, you may only call \u003ccode\u003eevent.get()\u003c/code\u003e once per game loop\notherwise weird things will happen.\u003c/p\u003e\n",
      "content_text": "\npygame events are stored in a queue, by default the most suggested way\nshown in all tutorials \"`pumps`\" the queue, which removes all the\nmessages.\n\n## start up pygame\n\nYou don't necessarily need a full\n[boilerplate](https://waylonwalker.com/til/pygame-boilerplate-apr-2022/)\nto start looking at events, you just just need to `pygame.init()` and\nto capture any keystrokes you need a window to capture them on, so you\nwill need a display running.\n\n```python\nimport pygame\npygame.init()\npygame.display.set_mode((854, 480))\n```\n\n## get some events\n\nLet's use pygames normal `event.get` method to get events.\n\n```python\nevents = pygame.event.get()\n```\n\nprinting the events reveal this\n\n```python\n[\n    \u003cEvent(1541-JoyDeviceAdded {'device_index': 0, 'guid': '030000005e0400008e02000010010000'})\u003e,\n    \u003cEvent(4352-AudioDeviceAdded {'which': 0, 'iscapture': 0})\u003e,\n    \u003cEvent(4352-AudioDeviceAdded {'which': 1, 'iscapture': 0})\u003e,\n    \u003cEvent(4352-AudioDeviceAdded {'which': 2, 'iscapture': 0})\u003e,\n    \u003cEvent(4352-AudioDeviceAdded {'which': 0, 'iscapture': 1})\u003e,\n    \u003cEvent(4352-AudioDeviceAdded {'which': 1, 'iscapture': 1})\u003e,\n    \u003cEvent(32774-WindowShown {'window': None})\u003e,\n    \u003cEvent(32777-WindowMoved {'x': 535, 'y': 302, 'window': None})\u003e,\n    \u003cEvent(32770-VideoExpose {})\u003e,\n    \u003cEvent(32776-WindowExposed {'window': None})\u003e,\n    \u003cEvent(32788-WindowTakeFocus {'window': None})\u003e,\n    \u003cEvent(32768-ActiveEvent {'gain': 1, 'state': 1})\u003e,\n    \u003cEvent(32785-WindowFocusGained {'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'a', 'key': 97, 'mod': 0, 'scancode': 4, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'a', 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 's', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'a', 'key': 97, 'mod': 0, 'scancode': 4, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'd', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'f', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 's', 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'd', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'f', 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'a', 'key': 97, 'mod': 0, 'scancode': 4, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'a', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 's', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'a', 'key': 97, 'mod': 0, 'scancode': 4, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'd', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'f', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'a', 'key': 97, 'mod': 0, 'scancode': 4, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'a', 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 's', 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'd', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'a', 'key': 97, 'mod': 0, 'scancode': 4, 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'f', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 's', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'd', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'f', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'f', 'key': 102, 'mod': 0, 'scancode': 9, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 's', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 's', 'key': 115, 'mod': 0, 'scancode': 22, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(771-TextInput {'text': 'd', 'window': None})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': 'd', 'key': 100, 'mod': 0, 'scancode': 7, 'window': None})\u003e,\n    \u003cEvent(768-KeyDown {'unicode': '', 'key': 1073742051, 'mod': 1024, 'scancode': 227, 'window': None})\u003e,\n    \u003cEvent(772-Unknown {})\u003e,\n    \u003cEvent(769-KeyUp {'unicode': '', 'key': 1073742051, 'mod': 0, 'scancode': 227, 'window': None})\u003e,\n    \u003cEvent(32768-ActiveEvent {'gain': 0, 'state': 1})\u003e,\n    \u003cEvent(32786-WindowFocusLost {'window': None})\u003e,\n    \u003cEvent(772-Unknown {})\u003e\n]\n```\n\n## Lets get some more events.\n\nLet's say that we have multpile sprites all asking for the events from\ndifferent places in our game. If we assume that our game loop runs very\nfastand we get events one after another the second one will have no\nevents.\n\n```python\nevents_one = pygame.event.get()\nevents_two = pygame.event.get()\n```\n\nprinting the events reveals that there are no events, well i\n\n```python\n[]\n```\n\n## Making things more maddening\n\nEven simple games don't quite run infinitely fast there is some delay,\nwith this delay most events will go to event_one, while any that occur\nin the short time between event_one and two will be in event_two's\nqueue.\n\n\n```python\nimport time\nevents_one = pygame.event.get()\ntime.sleep(.05) # simulating some delay that would naturally occur\nevents_two = pygame.event.get()\n```\n\n## How to Resolve this\n\nStore events for each frame in memory.\n\n## Pump\n\nI thought `pump=False` would be the answer I was looking for, but I was\nproven wrong.  It does not behave intuitivly to me.\n\n```python\nevents_one = pygame.event.get(pump=False) # all events since last pump\nevents_two = pygame.event.get(pump=False) # no events\nevents_three = pygame.event.get() # all events since last pump\n```\n\n`events_one` and `events_three` will have a list of events, while\n`events_two` will be empty.  It seems that `pump=False` leaves the\nevents there for the next `event.get()`, but appears cleared to any\n`event.get(pump=False)`.\n\n## Keep a Game State\n\nIf you want objects to do their own event handling, outside of the main\ngame, you will need to give them some game state with the events in it.\nHowever you decide, you may only call `event.get()` once per game loop\notherwise weird things will happen.\n",
      "summary": "pygame events are stored in a queue, by default the most suggested way shown in all tutorials \"\" the queue, which removes all the messages.",
      "date_published": "2022-04-07T13:14:20Z",
      "date_modified": "2022-04-07T13:14:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "pygame"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pygame-image-load/",
      "url": "https://go.waylonwalker.com/pygame-image-load/",
      "title": "Display Sprites in Pygame | Load and Blit",
      "content_html": "\u003cp\u003eOne of the most essential concepts of pygame to start making a game you will\nneed to understand is loading images and blitting them to the screen.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eblit\u003c/strong\u003e stands for block image transfer, to me it feels a lot like layering\nup layers/images in photoshop or Gimp.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"loading-an-image\"\u003eLoading an image \u003ca href=\"#loading-an-image\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI started by making a spotlight in Gimp, by opening a 64x64 pixel image and\npainting the center with a very soft brush.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"./spotlight.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"./spotlight.png\" alt=\"the spotlight I created in gimp\"/ data-glightbox=\"description: the spotlight I created in gimp\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis is what it looks like\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNow we can load this into pygame.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;assets/spotlight.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"converting-to-the-pygame-colorspace\"\u003eConverting to the pygame colorspace \u003ca href=\"#converting-to-the-pygame-colorspace\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo make pygame a bit more efficient we can convert the image to pygames\ncolorspace once when we load it rather than every time we blit it onto another\nsurface.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# convert full opaque images\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;assets/spotlight.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econvert\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# convert pngs with transparancy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;assets/spotlight.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econvert_alpha\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"blitting\"\u003eblitting \u003ca href=\"#blitting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo display the image onto the screen we need to use the blit method which needs\nat least two arguments, something to blit and a position to blit it at.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset_mode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eblit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e),)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003enote\u003c/strong\u003e blitting to the position (0, 0) will align the top left corners of\nthe object we are blitting onto (screen) and the object we are blitting\n(img).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"starter\"\u003eStarter \u003ca href=\"#starter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we need an actual game running to be able to put on the screen.  I am using\nmy own starter/boilerplate, if you want to follow along you can install it from\ngithub into your own \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003egit\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003egithub\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eWaylonWalker\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003estarter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/pygame-boilerplate-apr-2022/\" class=\"wikilink\" data-title=\"Pygame Boilerplate Apr 2022\" data-description=\"I\u0026#39;m poking a bit into gamedev. Partly to better understand, partly because it\u0026#39;s stretching different parts of my brain/skillset than writing data pipelines...\" data-date=\"2022-04-03\" data-preview=\"I\u0026#39;m poking a bit into gamedev. Partly to better understand, partly because it\u0026#39;s stretching different parts of my brain/skillset than writing data pipelines...\"\u003ePygame Boilerplate Apr 2022\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eYou can read more about my starter in this post\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"lets-place-this-image-right-in-the-middle\"\u003eLet’s place this image right in the middle \u003ca href=\"#lets-place-this-image-right-in-the-middle\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow we can use the starter to create a new game, and with just a bit of offset\nwe can put the spotlight directly in the middle.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame_starter\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eGame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyGame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGame\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003esuper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# load in the image one time and store it inside the object instance\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;assets/spotlight.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econvert_alpha\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003egame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# fill the screen with aqua\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"mi\"\u003e128\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# transfer the image to the middle of the screen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eblit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_size\u003c/span\u003e\u003cspan class=\"p\"\u003e()[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_size\u003c/span\u003e\u003cspan class=\"p\"\u003e()[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMyGame\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf we save this as \u003ccode\u003eload_and_blit.py\u003c/code\u003e we can run it at the command like as so.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e \u003cspan class=\"n\"\u003eload_and_blit\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd we should get the following results.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://images.waylonwalker.com/pygame-load-blit-center-alpha.png\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/images.waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/images.waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ethe results of putting the image in the middle\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"convert-a-transparent-png\"\u003econvert a transparent png \u003ca href=\"#convert-a-transparent-png\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat happens when we accidently use \u003ccode\u003e.convert()\u003c/code\u003e rather than \u003ccode\u003e.convert_alpha()\u003c/code\u003e?\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/pygame-load-blit-center-no-alpha.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/pygame-load-blit-center-no-alpha.png\" alt=\"using convert on a transparant png gets rid of all transparancy and fills with black\"/ data-glightbox=\"description: using convert on a transparant png gets rid of all transparancy and fills with black\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"making-snow\"\u003eMaking snow \u003ca href=\"#making-snow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA common concept in pygame, that is built into my starter, is that you\ntypically want to reset the screen each and every frame.  Building on this with\nour new concept of blitting spotlights onto the screen we can make a random\nnoise of snow by blitting a bunch of images to the screen.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003erandom\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame_starter\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eGame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyGame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGame\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003esuper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;assets/spotlight.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econvert_alpha\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003egame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"mi\"\u003e128\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e  \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"nb\"\u003erange\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eblit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"n\"\u003erandom\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erandint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_size\u003c/span\u003e\u003cspan class=\"p\"\u003e()[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"n\"\u003erandom\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erandint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_size\u003c/span\u003e\u003cspan class=\"p\"\u003e()[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMyGame\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"the-results\"\u003ethe results \u003ca href=\"#the-results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\"\u003e\n    \u003csource src=\"https://images.waylonwalker.com/pygame-snow.mp4\" type=\"video/mp4\"/\u003e\n    Sorry, your browser doesn\u0026#39;t support embedded videos.\n\u003c/video\u003e\n",
      "content_text": "\nOne of the most essential concepts of pygame to start making a game you will\nneed to understand is loading images and blitting them to the screen.\n\n\u003e **blit** stands for block image transfer, to me it feels a lot like layering\n\u003e up layers/images in photoshop or Gimp.\n\n## Loading an image\n\nI started by making a spotlight in Gimp, by opening a 64x64 pixel image and\npainting the center with a very soft brush.\n\n![the spotlight I created in gimp](./spotlight.png)\n\n\u003e This is what it looks like\n\nNow we can load this into pygame.\n\n```python\nimport pygame\nimg = pygame.image.load(\"assets/spotlight.png\")\n```\n\n## Converting to the pygame colorspace\n\nTo make pygame a bit more efficient we can convert the image to pygames\ncolorspace once when we load it rather than every time we blit it onto another\nsurface.\n\n```python\nimport pygame\n\n# convert full opaque images\nimg = pygame.image.load(\"assets/spotlight.png\").convert()\n\n# convert pngs with transparancy\nimg = pygame.image.load(\"assets/spotlight.png\").convert_alpha()\n```\n\n## blitting\n\nTo display the image onto the screen we need to use the blit method which needs\nat least two arguments, something to blit and a position to blit it at.\n\n```python\nscreen = pygame.display.set_mode(self.screen_size)\nscreen.blit( img, (0, 0),)\n```\n\n\u003e **note** blitting to the position (0, 0) will align the top left corners of\n\u003e the object we are blitting onto (screen) and the object we are blitting\n\u003e (img).\n\n## Starter\n\nNow we need an actual game running to be able to put on the screen.  I am using\nmy own starter/boilerplate, if you want to follow along you can install it from\ngithub into your own virtual environment.\n\n```python\npip install git+https://github.com/WaylonWalker/pygame-starter\n```\n\n\u003ca href=\"/pygame-boilerplate-apr-2022/\" class=\"wikilink\" data-title=\"Pygame Boilerplate Apr 2022\" data-description=\"I\u0026#39;m poking a bit into gamedev. Partly to better understand, partly because it\u0026#39;s stretching different parts of my brain/skillset than writing data pipelines...\" data-date=\"2022-04-03\"\u003ePygame Boilerplate Apr 2022\u003c/a\u003e\n\n\u003e You can read more about my starter in this post\n\n## Let's place this image right in the middle\n\nNow we can use the starter to create a new game, and with just a bit of offset\nwe can put the spotlight directly in the middle.\n\n```python\nimport pygame\nfrom pygame_starter import Game\n\n\nclass MyGame(Game):\n    def __init__(self):\n        super().__init__()\n        # load in the image one time and store it inside the object instance\n        self.img = pygame.image.load(\"assets/spotlight.png\").convert_alpha()\n    def game(self):\n        # fill the screen with aqua\n        self.screen.fill((128, 255, 255))\n        # transfer the image to the middle of the screen\n        self.screen.blit(\n            self.img,\n            (\n                self.screen_size[0] / 2 - self.img.get_size()[0],\n                self.screen_size[1] / 2 - self.img.get_size()[1],\n            ),\n        )\n\n\nif __name__ == \"__main__\":\n    game = MyGame()\n    game.run()\n```\n\nIf we save this as `load_and_blit.py` we can run it at the command like as so.\n\n```python\npython load_and_blit.py\n```\n\nAnd we should get the following results.\n\n[the results of putting the image in the middle](https://images.waylonwalker.com/pygame-load-blit-center-alpha.png)\n\n## convert a transparent png\n\nWhat happens when we accidently use `.convert()` rather than `.convert_alpha()`?\n\n![using convert on a transparant png gets rid of all transparancy and fills with black](https://images.waylonwalker.com/pygame-load-blit-center-no-alpha.png)\n\n## Making snow\n\nA common concept in pygame, that is built into my starter, is that you\ntypically want to reset the screen each and every frame.  Building on this with\nour new concept of blitting spotlights onto the screen we can make a random\nnoise of snow by blitting a bunch of images to the screen.\n\n```python\nimport random\n\nimport pygame\nfrom pygame_starter import Game\n\n\nclass MyGame(Game):\n\n    def __init__(self):\n        super().__init__()\n        self.img = pygame.image.load(\"assets/spotlight.png\").convert_alpha()\n\n    def game(self):\n        self.screen.fill((128, 255, 255))\n        for  in range(100):\n            self.screen.blit(\n                self.img,\n                (\n                    random.randint(0, self.screen_size[0]) - self.img.get_size()[0],\n                    random.randint(0, self.screen_size[1]) - self.img.get_size()[1],\n                ),\n            )\n\n\nif __name__ == \"__main__\":\n    game = MyGame()\n    game.run()\n```\n\n## the results\n\n\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\"\u003e\n    \u003csource src=\"https://images.waylonwalker.com/pygame-snow.mp4\" type=\"video/mp4\"\u003e\n    Sorry, your browser doesn't support embedded videos.\n\u003c/video\u003e\n",
      "summary": "One of the most essential concepts of pygame to start making a game you will need to understand is loading images and blitting them to the screen.",
      "date_published": "2022-04-06T15:07:15Z",
      "date_modified": "2022-04-06T15:07:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pastel-cli/",
      "url": "https://go.waylonwalker.com/pastel-cli/",
      "title": "Mixing Colors at the Command Line",
      "content_html": "\u003cp\u003eFrom the same Author that brought us command line essentials like \u003ccode\u003efd\u003c/code\u003e and\n\u003ccode\u003ebat\u003c/code\u003e written in rust comes \u003ca href=\"https://github.com/sharkdp/pastel\" 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\"\u003epastel\u003c/a\u003e an\nincredible command-line tool to generate, analyze, convert and manipulate\ncolors.\u003c/p\u003e\n\u003ch2 id=\"install\"\u003eInstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can install from one of the\n\u003ca href=\"https://github.com/sharkdp/pastel/releases\" 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\"\u003ereleases\u003c/a\u003e, follow the\n\u003ca href=\"https://github.com/sharkdp/pastel#installation\" 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\"\u003einstructions\u003c/a\u003e for your system\nfrom the repo.  I chose to go the nix route.  I have enjoyed the simplicity of\nthe nix package manager being cross platform and have very up  to date packages\nin it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enix-env --install pastel\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"mixing-colors\"\u003eMixing colors \u003ca href=\"#mixing-colors\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSomething I often do to blend colors together is add a little alpha to\nsomething over top of a background.  I can simulate this by mixing colors.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epastel color cornflowerblue \u003cspan class=\"p\"\u003e|\u003c/span\u003e pastel mix goldenrod -f .1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere is one from the docs that show how you can generate a color palette from\nrandom colors, mix in some red, lighten and format all in one pipe.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epastel random \u003cspan class=\"p\"\u003e|\u003c/span\u003e pastel mix red \u003cspan class=\"p\"\u003e|\u003c/span\u003e pastel lighten 0.2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e pastel format hex\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"color-picker\"\u003ecolor picker \u003ca href=\"#color-picker\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI am on Ubuntu 20.10 as I write this and it works flawlessly.  When I call the\ncommand, a color picker gui pops up along with an rgb panel.  I can pick from\nthe panel or from anywhere on my screen.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epastel color-picker\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\"\u003e\n    \u003csource src=\"https://images.waylonwalker.com/pastel-pick.mp4\" type=\"video/mp4\"/\u003e\n    Sorry, your browser doesn\u0026#39;t support embedded videos.\n\u003c/video\u003e\n\u003ch2 id=\"conversions\"\u003eConversions \u003ca href=\"#conversions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI often will want to convert a color from rgb to hex or hsl vice versa.  I open\ngoogle and search.  This is one part that I could really use adding to my\nworkflow.\u003c/p\u003e\n\u003ch2 id=\"check-it\"\u003eCheck it \u003ca href=\"#check-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere I can mix up a dark grey with rgb, mix in 20% cornflowerblue, and grab the\nhex value.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epastel color 50,50,50 \u003cspan class=\"p\"\u003e|\u003c/span\u003e pastel mix cornflowerblue -f .2\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/pastel-mix-grey.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/pastel-mix-grey.png\" alt=\"my terminal output from mixing grey\"/ data-glightbox=\"description: my terminal output from mixing grey\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI really want to get this into my workflow.  I saw it quite awhile ago but have\nnot done much color work.  Lately I have been doing a bit more front end, and\nhave been getting into game development.  This is the time to stop googling\nrandom color mixers and use this one.\u003c/p\u003e\n",
      "content_text": "\nFrom the same Author that brought us command line essentials like `fd` and\n`bat` written in rust comes [pastel](https://github.com/sharkdp/pastel) an\nincredible command-line tool to generate, analyze, convert and manipulate\ncolors.\n\n## Install\n\nYou can install from one of the\n[releases](https://github.com/sharkdp/pastel/releases), follow the\n[instructions](https://github.com/sharkdp/pastel#installation) for your system\nfrom the repo.  I chose to go the nix route.  I have enjoyed the simplicity of\nthe nix package manager being cross platform and have very up  to date packages\nin it.\n\n```bash\nnix-env --install pastel\n```\n\n## Mixing colors\n\nSomething I often do to blend colors together is add a little alpha to\nsomething over top of a background.  I can simulate this by mixing colors.\n\n```bash\npastel color cornflowerblue | pastel mix goldenrod -f .1\n```\n\nHere is one from the docs that show how you can generate a color palette from\nrandom colors, mix in some red, lighten and format all in one pipe.\n\n```bash\npastel random | pastel mix red | pastel lighten 0.2 | pastel format hex\n```\n\n## color picker\n\nI am on Ubuntu 20.10 as I write this and it works flawlessly.  When I call the\ncommand, a color picker gui pops up along with an rgb panel.  I can pick from\nthe panel or from anywhere on my screen.\n\n```bash\npastel color-picker\n```\n\n\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\"\u003e\n    \u003csource src=\"https://images.waylonwalker.com/pastel-pick.mp4\" type=\"video/mp4\"\u003e\n    Sorry, your browser doesn't support embedded videos.\n\u003c/video\u003e\n\n## Conversions\n\nI often will want to convert a color from rgb to hex or hsl vice versa.  I open\ngoogle and search.  This is one part that I could really use adding to my\nworkflow.\n\n## Check it\n\nHere I can mix up a dark grey with rgb, mix in 20% cornflowerblue, and grab the\nhex value.\n\n```bash\npastel color 50,50,50 | pastel mix cornflowerblue -f .2\n```\n\n![my terminal output from mixing grey](https://images.waylonwalker.com/pastel-mix-grey.png)\n\nI really want to get this into my workflow.  I saw it quite awhile ago but have\nnot done much color work.  Lately I have been doing a bit more front end, and\nhave been getting into game development.  This is the time to stop googling\nrandom color mixers and use this one.\n",
      "summary": "From the same Author that brought us command line essentials like and written in rust comes pastel an incredible command-line tool to generate, analyze,...",
      "date_published": "2022-04-05T17:20:37Z",
      "date_modified": "2022-04-05T17:20:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dunk-is-my-new-diff-pager/",
      "url": "https://go.waylonwalker.com/dunk-is-my-new-diff-pager/",
      "title": "Dunk is my new diff pager",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/darrenburns/dunk\" 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\"\u003eDunk\u003c/a\u003e is a beautiful \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e diff tool\nbuilt on top of \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBrowsing through twitter the other day I discovered it through this\ntweet by \u003ca href=\"https://twitter.com/_darrenburns\"\u003e_darrenburns\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/_darrenburns/status/1510350016623394817\" class=\"hoverlink\"\u003ehttps://twitter.com/_darrenburns/status/1510350016623394817\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"dunk-is-beta\"\u003eDunk is beta \u003ca href=\"#dunk-is-beta\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBefore I dive in deep, I do want to mention that Dunk is super new and beta at\nthis point.  I am making it my default pager, because I know what I am doing\nand can quickly shift back if I need to, no sweat.  If you are a little less\ncomfortable with the command line, terminal, or reading any issues that might\ncome up, it might be best if you just pipe into Dunk when you want to use it.\u003c/p\u003e\n\u003cp\u003eThe author really cautions the use of it as your default pager this early, I’m\njust showing that it’s possible, and I’m trying it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHe notes that it might have some issues especially with partially staged files.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"try-it\"\u003etry it \u003ca href=\"#try-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can try it with pipx.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit diff \u003cspan class=\"p\"\u003e|\u003c/span\u003e pipx run dunk\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"install-it\"\u003einstall it \u003ca href=\"#install-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you like it, you can install it with pip or pipx, I prefer pipx for\ncli applications like this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install dunk\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"set-it-as-your-default-pager\"\u003eset it as your default pager \u003ca href=\"#set-it-as-your-default-pager\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can configure dunk as your default pager with the command line, or\nby editing your \u003ccode\u003e.gitconfig\u003c/code\u003e file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global pager.diff \u003cspan class=\"s2\"\u003e\u0026#34;dunk | less -R`\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003epager\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003ediff\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003edunk\u003c/span\u003e \u003cspan class=\"err\"\u003e|\u003c/span\u003e \u003cspan class=\"nx\"\u003eless\u003c/span\u003e \u003cspan class=\"nx\"\u003e-R\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eAs \u003ca href=\"https://twitter.com/_darrenburns/status/1511106440613797896\"\u003epointed out\u003c/a\u003e by\n\u003ca href=\"https://twitter.com/_darrenburns\"\u003e_darrenburns\u003c/a\u003e dunk is not a pager and you\ncan gain back all of the benefits of using a pager by piping into less with the\n\u003ccode\u003e-R\u003c/code\u003e flag.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"reset-it-if-you-dont-like-it\"\u003ereset it if you don’t like it \u003ca href=\"#reset-it-if-you-dont-like-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can \u003ccode\u003e--unset\u003c/code\u003e your pager configuration from the command line or edit\nyour \u003ccode\u003e.gitconfig\u003c/code\u003e file by hand to remove the lines shown above.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset pager.diff\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"comparison\"\u003eComparison \u003ca href=\"#comparison\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have some edits to a game my son and I are working on unstaged so I\nran \u003ccode\u003egit diff\u003c/code\u003e on that project with and without dunk to compare the\ndifferences.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/git-diff-creeper-adventure-default.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/git-diff-creeper-adventure-default.png\" alt=\"default diff\"/ data-glightbox=\"description: default diff\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eDunk just looks so good.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/git-diff-creeper-adventure-dunk.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/git-diff-creeper-adventure-dunk.png\" alt=\"dunk diff\"/ data-glightbox=\"description: dunk diff\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"always-install\"\u003eAlways install \u003ca href=\"#always-install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you follow along here often you know that I am a big fan of\ninstalling all my tools in an ansible playbook so that I don’t suffer\nconfiguring a new machine for months after getting it and wondering why\nits not exactly like the last.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Dunk - prettier git diffs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# https://github.com/darrenburns/dunk\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck is dunk installed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecommand -v black\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edunk_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003einstall dunk\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edunk_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epipx install dunk\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e[[ ansible-install-if-not-callable ]]\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMore on conditionally installing tools with ansible in this post.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\n[Dunk](https://github.com/darrenburns/dunk) is a beautiful git diff tool\nbuilt on top of [rich](https://github.com/Textualize/rich).\n\nBrowsing through twitter the other day I discovered it through this\ntweet by [_darrenburns](https://twitter.com/_darrenburns).\n\n[https://twitter.com/_darrenburns/status/1510350016623394817](https://twitter.com/_darrenburns/status/1510350016623394817){.hoverlink}\n\n## Dunk is beta\n\nBefore I dive in deep, I do want to mention that Dunk is super new and beta at\nthis point.  I am making it my default pager, because I know what I am doing\nand can quickly shift back if I need to, no sweat.  If you are a little less\ncomfortable with the command line, terminal, or reading any issues that might\ncome up, it might be best if you just pipe into Dunk when you want to use it.\n\nThe author really cautions the use of it as your default pager this early, I'm\njust showing that it's possible, and I'm trying it.\n\n\u003e He notes that it might have some issues especially with partially staged files.\n\n## try it\n\nYou can try it with pipx.\n\n```bash\ngit diff | pipx run dunk\n```\n\n## install it\n\nIf you like it, you can install it with pip or pipx, I prefer pipx for\ncli applications like this.\n\n```bash\npipx install dunk\n```\n\n## set it as your default pager\n\nYou can configure dunk as your default pager with the command line, or\nby editing your `.gitconfig` file.\n\n```bash\ngit config --global pager.diff \"dunk | less -R`\n```\n\n```toml\n[pager]\n    diff = dunk | less -R\n```\n\n\u003e As [pointed out](https://twitter.com/_darrenburns/status/1511106440613797896) by\n\u003e [_darrenburns](https://twitter.com/_darrenburns) dunk is not a pager and you\n\u003e can gain back all of the benefits of using a pager by piping into less with the\n\u003e `-R` flag.\n\n## reset it if you don't like it\n\nYou can `--unset` your pager configuration from the command line or edit\nyour `.gitconfig` file by hand to remove the lines shown above.\n\n```bash\ngit config --global --unset pager.diff\n```\n\n## Comparison\n\nI have some edits to a game my son and I are working on unstaged so I\nran `git diff` on that project with and without dunk to compare the\ndifferences.\n\n![default diff](https://images.waylonwalker.com/git-diff-creeper-adventure-default.png)\n\nDunk just looks so good.\n\n![dunk diff](https://images.waylonwalker.com/git-diff-creeper-adventure-dunk.png)\n\n## Always install\n\nIf you follow along here often you know that I am a big fan of\ninstalling all my tools in an ansible playbook so that I don't suffer\nconfiguring a new machine for months after getting it and wondering why\nits not exactly like the last.\n\n```yaml\n# Dunk - prettier git diffs\n# https://github.com/darrenburns/dunk\n- name: check is dunk installed\n  shell: command -v black\n  register: dunk_exists\n  ignore_errors: yes\n\n- name: install dunk\n  when: dunk_exists is failed\n  shell: pipx install dunk\n```\n\n[[ ansible-install-if-not-callable ]]\n\n\u003e More on conditionally installing tools with ansible in this post.\n",
      "summary": "Dunk is a beautiful git diff tool built on top of rich.",
      "date_published": "2022-04-04T15:47:00Z",
      "date_modified": "2022-04-04T15:47:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux",
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pygame-boilerplate-apr-2022/",
      "url": "https://go.waylonwalker.com/pygame-boilerplate-apr-2022/",
      "title": "Pygame Boilerplate Apr 2022",
      "content_html": "\u003cp\u003eI’m poking a bit into gamedev.  Partly to better understand, partly\nbecause it’s stretching different parts of my brain/skillset than\nwriting data pipelines does, but mostly for the experience of designing\nthem with my 9yo Wyatt.\u003c/p\u003e\n\u003ch2 id=\"pygame-boilerplates\"\u003epygame boilerplates \u003ca href=\"#pygame-boilerplates\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve seen several pygame boilerplate templates, but they all seem to\nrely heavily on globl variables.  That’s just not how I generally\ndevelop anything.  I want a package that I can pip install, run, import,\ntest, all the good stuff.\u003c/p\u003e\n\u003ch2 id=\"my-current-starter\"\u003eMy current starter \u003ca href=\"#my-current-starter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat currently have is a single module starter package that is on github\nso that I can install it and start building games with very little code.\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince it’s a package on GitHub you can install it with the \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e+ prefix.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install git+https://github.com/WaylonWalker/pygame-starter\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"example-game\"\u003eExample Game \u003ca href=\"#example-game\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can make a quick game by inheriting from Game, and calling\n\u003ccode\u003e.run()\u003c/code\u003e.  This example just fills the screen with an aqua color, but\nyou can put all of your game logic in the \u003ccode\u003egame\u003c/code\u003e method.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame_starer\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eGame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyGame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGame\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003egame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"mi\"\u003e128\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMyGame\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"the-starter\"\u003eThe starter \u003ca href=\"#the-starter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is what the current \u003ccode\u003egame.py\u003c/code\u003e looks like.  I will probably update\nit as time goes on and I learn more about the things I want to do with\nit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etyping\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eTuple\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epygame\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eGame\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eTuple\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e854\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e480\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecaption\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pygame-starter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etick_speed\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e60\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        screen_size (Tuple[int, int]): The size of the screen you want to use, defaults to 480p.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        caption (str): the name of the game that will appear in the title of the window, defaults to `pygame-starter`.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        tick_speed (int): the ideal clock speed of the game, defaults to 60\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        ## Example Game\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        You can make a quick game by inheriting from Game, and calling\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        `.run()`.  This example just fills the screen with an aqua color, but\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        you can put all of your game logic in the `game` method.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        ``` python\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        from pygame_starer import Game\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        class MyGame(Game):\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e            def game(self):\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e                self.screen.fill((128, 255, 255))\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        if __name__ == \u0026#34;__main__\u0026#34;:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e            game = MyGame()\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e            game.run()\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        ```\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003einit\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset_caption\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecaption\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset_mode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen_size\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eclock\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eClock\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etick_speed\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etick_speed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erunning\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esurfs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eshould_quit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;check for pygame.QUIT event and exit\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eevent\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eevent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eQUIT\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erunning\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003egame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        This is where you put your game logic.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ereset_screen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        fill the screen with black\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eupdate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        run one update cycle\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eshould_quit\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereset_screen\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egame\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003esurf\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esurfs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003escreen\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eblit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esurf\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupdate\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eclock\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etick\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etick_speed\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        run update at the specified tick_speed, until exit.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erunning\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupdate\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epygame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003equit\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGame\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egame\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI'm poking a bit into gamedev.  Partly to better understand, partly\nbecause it's stretching different parts of my brain/skillset than\nwriting data pipelines does, but mostly for the experience of designing\nthem with my 9yo Wyatt.\n\n## pygame boilerplates\n\nI've seen several pygame boilerplate templates, but they all seem to\nrely heavily on globl variables.  That's just not how I generally\ndevelop anything.  I want a package that I can pip install, run, import,\ntest, all the good stuff.\n\n## My current starter\n\nWhat currently have is a single module starter package that is on github\nso that I can install it and start building games with very little code.\n\n## Installation\n\nSince it's a package on GitHub you can install it with the git+ prefix.\n\n``` bash\npip install git+https://github.com/WaylonWalker/pygame-starter\n```\n\n## Example Game\n\nYou can make a quick game by inheriting from Game, and calling\n`.run()`.  This example just fills the screen with an aqua color, but\nyou can put all of your game logic in the `game` method.\n\n``` python\nfrom pygame_starer import Game\n\nclass MyGame(Game):\n    def game(self):\n        self.screen.fill((128, 255, 255))\n\nif __name__ == \"__main__\":\n    game = MyGame()\n    game.run()\n\n```\n\n## The starter\n\nHere is what the current `game.py` looks like.  I will probably update\nit as time goes on and I learn more about the things I want to do with\nit.\n\n```python\nfrom typing import Tuple\n\nimport pygame\n\n\nclass Game:\n    def __init__(\n        self,\n        screen_size: Tuple[int, int] = (854, 480),\n        caption: str = \"pygame-starter\",\n        tick_speed: int = 60,\n    ):\n        \"\"\"\n\n        screen_size (Tuple[int, int]): The size of the screen you want to use, defaults to 480p.\n        caption (str): the name of the game that will appear in the title of the window, defaults to `pygame-starter`.\n        tick_speed (int): the ideal clock speed of the game, defaults to 60\n\n        ## Example Game\n\n        You can make a quick game by inheriting from Game, and calling\n        `.run()`.  This example just fills the screen with an aqua color, but\n        you can put all of your game logic in the `game` method.\n\n        ``` python\n        from pygame_starer import Game\n\n        class MyGame(Game):\n            def game(self):\n                self.screen.fill((128, 255, 255))\n\n        if __name__ == \"__main__\":\n            game = MyGame()\n            game.run()\n\n        ```\n        \"\"\"\n        pygame.init()\n        pygame.display.set_caption(caption)\n\n        self.screen_size = screen_size\n        self.screen = pygame.display.set_mode(self.screen_size)\n        self.clock = pygame.time.Clock()\n        self.tick_speed = tick_speed\n\n        self.running = True\n        self.surfs = []\n\n    def should_quit(self):\n        \"\"\"check for pygame.QUIT event and exit\"\"\"\n        for event in pygame.event.get():\n            if event.type == pygame.QUIT:\n                self.running = False\n\n    def game(self):\n        \"\"\"\n        This is where you put your game logic.\n\n        \"\"\"\n        ...\n\n    def reset_screen(self):\n        \"\"\"\n        fill the screen with black\n        \"\"\"\n        self.screen.fill((0, 0, 0))\n\n    def update(self):\n        \"\"\"\n        run one update cycle\n        \"\"\"\n        self.should_quit()\n        self.reset_screen()\n        self.game()\n        for surf in self.surfs:\n            self.screen.blit(surf, (0, 0))\n        pygame.display.update()\n        self.clock.tick(self.tick_speed)\n\n    def run(self):\n        \"\"\"\n        run update at the specified tick_speed, until exit.\n        \"\"\"\n        while self.running:\n            self.update()\n        pygame.quit()\n\n\nif __name__ == \"__main__\":\n    game = Game()\n    game.run()\n```\n",
      "summary": "I'm poking a bit into gamedev. Partly to better understand, partly because it's stretching different parts of my brain/skillset than writing data pipelines...",
      "date_published": "2022-04-03T16:32:40Z",
      "date_modified": "2022-04-03T16:32:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "gamedev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darrenburns-dunk/",
      "url": "https://go.waylonwalker.com/darrenburns-dunk/",
      "title": "⭐ darrenburns dunk",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/darrenburns/dunk\" 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\"\u003edunk\u003c/a\u003e by \u003ca href=\"https://github.com/darrenburns\" 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\"\u003edarrenburns\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003ePrettier \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e diffs in the terminal  🎨\u003c/p\u003e\n",
      "content_text": "\nJust starred [dunk](https://github.com/darrenburns/dunk) by [darrenburns](https://github.com/darrenburns). It's an exciting project with a lot to offer.\n\nPrettier git diffs in the terminal  🎨\n",
      "summary": "Just starred dunk by darrenburns. It's an exciting project with a lot to offer.",
      "date_published": "2022-04-02T21:45:11Z",
      "date_modified": "2022-04-02T21:45:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/linux-unzip-directory/",
      "url": "https://go.waylonwalker.com/linux-unzip-directory/",
      "title": "Unzip minecraft mods to their directory from the command line",
      "content_html": "\u003cp\u003eThis morning I was trying to install a modpack on my minecraft server after\ngetting a zip file, and its quite painful when I unzip everything in the\ncurrent directory rather than the directory it belongs in.\u003c/p\u003e\n\u003ch2 id=\"i-had-the-files-on-a-windows-machine\"\u003eI had the files on a Windows Machine \u003ca href=\"#i-had-the-files-on-a-windows-machine\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo I’ve been struggling to get mods installed on linux lately and the easiest\nway to download the entire pack rather than each mod one by one seems to be to\nuse the overwolf application on windows.  Once I have the modpack I can start\nmyself a small mod-server by zipping it, putting it in a mod-server directory\nand running a python \u003ccode\u003ehttp.server\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m http.server\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"downoading-on-the-server\"\u003eDownoading on the server \u003ca href=\"#downoading-on-the-server\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThen I go back to my server and download the modpack with wget.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewget\u003c/span\u003e \u003cspan class=\"mf\"\u003e10.0.0.171\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e8000\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eOne\u003c/span\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003eBBlock\u003c/span\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003eBServer\u003c/span\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003eBPack\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.4\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ezip\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"unzip-to-the-minecraft-data-directory\"\u003eUnzip to the minecraft-data directory \u003ca href=\"#unzip-to-the-minecraft-data-directory\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow I can unzip my mods into the \u003ccode\u003eminecraft-data\u003c/code\u003e directory.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eunzip One+Block+Server+Pack-1.4.zip -d minecraft-data\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"running-the-server-with-docker\"\u003eRunning the server with docker \u003ca href=\"#running-the-server-with-docker\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI run the minecraft server with docker, which is setup to mount the\nminecraft-data directory.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/docker-minecraft-server/\" class=\"wikilink\" data-title=\"Running a Minecraft Server in Docker\" data-description=\"I\u0026#39;ve ran a Minecraft server at home since December 2017 for me and my son to play on. We start a brand new one somewhere between every day and every week....\" data-date=\"2022-02-07\" data-preview=\"I\u0026#39;ve ran a Minecraft server at home since December 2017 for me and my son to play on. We start a brand new one somewhere between every day and every week....\"\u003eRunning a Minecraft Server in Docker\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eA bit more on that in the other post, but when I download the whole modpack\nlike this I make these changes to my docker compose. (commented out lines)\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;3.8\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eservices\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003emc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainer_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ewalkercraft\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eitzg/minecraft-server:java8\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eEULA\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;TRUE\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eTYPE\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;FORGE\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eVERSION\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1.15.2\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# MODS_FILE: /extras/mods.txt\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# REMOVE_OLD_MODS: \u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etty\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003estdin_open\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erestart\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eunless-stopped\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eports\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003e./minecraft-data:/data\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# - ./mods.txt:/extras/mods.txt:ro\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThis morning I was trying to install a modpack on my minecraft server after\ngetting a zip file, and its quite painful when I unzip everything in the\ncurrent directory rather than the directory it belongs in.\n\n## I had the files on a Windows Machine\n\nSo I've been struggling to get mods installed on linux lately and the easiest\nway to download the entire pack rather than each mod one by one seems to be to\nuse the overwolf application on windows.  Once I have the modpack I can start\nmyself a small mod-server by zipping it, putting it in a mod-server directory\nand running a python `http.server`\n\n```bash\npython -m http.server\n```\n\n## Downoading on the server\n\nThen I go back to my server and download the modpack with wget.\n\n``` python\nwget 10.0.0.171:8000/One%2BBlock%2BServer%2BPack-1.4.zip\n```\n\n## Unzip to the minecraft-data directory\n\nNow I can unzip my mods into the `minecraft-data` directory.\n\n```bash\nunzip One+Block+Server+Pack-1.4.zip -d minecraft-data\n```\n\n## Running the server with docker\n\nI run the minecraft server with docker, which is setup to mount the\nminecraft-data directory.\n\n\u003ca href=\"/docker-minecraft-server/\" class=\"wikilink\" data-title=\"Running a Minecraft Server in Docker\" data-description=\"I\u0026#39;ve ran a Minecraft server at home since December 2017 for me and my son to play on. We start a brand new one somewhere between every day and every week....\" data-date=\"2022-02-07\"\u003eRunning a Minecraft Server in Docker\u003c/a\u003e\n\nA bit more on that in the other post, but when I download the whole modpack\nlike this I make these changes to my docker compose. (commented out lines)\n\n```yaml\nversion: \"3.8\"\n\nservices:\n  mc:\n    container_name: walkercraft\n    image: itzg/minecraft-server:java8\n    environment:\n      EULA: \"TRUE\"\n      TYPE: \"FORGE\"\n      VERSION: 1.15.2\n      # MODS_FILE: /extras/mods.txt\n      # REMOVE_OLD_MODS: \"true\"\n    tty: true\n    stdin_open: true\n    restart: unless-stopped\n    ports:\n      - 25565:25565\n    volumes:\n      - ./minecraft-data:/data\n      # - ./mods.txt:/extras/mods.txt:ro\n\nvolumes:\n  data:\n```\n",
      "summary": "This morning I was trying to install a modpack on my minecraft server after getting a zip file, and its quite painful when I unzip everything in the current...",
      "date_published": "2022-04-02T16:20:34Z",
      "date_modified": "2022-04-02T16:20:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "bash",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dagger-dagger/",
      "url": "https://go.waylonwalker.com/dagger-dagger/",
      "title": "⭐ dagger dagger",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/dagger/dagger\" 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\"\u003edagger\u003c/a\u003e, created by \u003ca href=\"https://github.com/dagger\" 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\"\u003edagger\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn engine to run your pipelines in containers\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [dagger](https://github.com/dagger/dagger), created by [dagger](https://github.com/dagger).\n\nAn engine to run your pipelines in containers\n",
      "summary": "If you're into interesting projects, don't miss out on dagger, created by dagger.",
      "date_published": "2022-04-02T03:41:13Z",
      "date_modified": "2022-04-02T03:41:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/site-down/",
      "url": "https://go.waylonwalker.com/site-down/",
      "title": "Did my site build just go down?",
      "content_html": "\u003cp\u003eMy personal Site build went down last week, and I was unable to publish a new\narticle.  This is the process I went through to get it back up and running\nquickly.\u003c/p\u003e\n\u003ch2 id=\"is-it-a-fluke\"\u003eIs it a fluke? \u003ca href=\"#is-it-a-fluke\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eClassic IT fix, rerun it and see if you get the same error.  Everyone is busy\nand when you have your build go down you are probably busy doing something\nelse.  My first step is often to simply click rerun right from GitHub actions.\nSometimes this will fix it, and sometimes it doesn’t.  It’s an easy fix to run\nin the meantime you are not focused on fixing it.\u003c/p\u003e\n\u003ch2 id=\"is-github-having-issues\"\u003eIs GitHub having issues? \u003ca href=\"#is-github-having-issues\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAlso worth a check to see if GitHub is having a hiccup or not.  This error felt\npretty obviously not GitHub’s fault, but it’s a good one to check when you run\ninto a weird unexplainable error.\u003c/p\u003e\n\u003cp\u003eCheck \u003ca href=\"https://www.githubstatus.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.githubstatus.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.githubstatus.com.ico\" class=\"has-avatar  has-avatar-before\"\u003egithub status\u003c/a\u003e for any downtime issues with actions.\u003c/p\u003e\n\u003ch2 id=\"build-down\"\u003eBuild Down \u003ca href=\"#build-down\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAlright down to the error message I got.  The error is pretty obvious that\nsomewhere I am trying to import a non-existing module from click.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRun\u003c/span\u003e \u003cspan class=\"n\"\u003emarkata\u003c/span\u003e \u003cspan class=\"n\"\u003ebuild\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eno\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epretty\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTraceback\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emost\u003c/span\u003e \u003cspan class=\"n\"\u003erecent\u003c/span\u003e \u003cspan class=\"n\"\u003ecall\u003c/span\u003e \u003cspan class=\"n\"\u003elast\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/bin/markata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e33\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eload_entry_point\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;markata==0.1.0\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;console_scripts\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;markata\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/bin/markata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e25\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eimportlib_load_entry_point\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nb\"\u003enext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ematches\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/importlib/metadata.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e77\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emodule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eimport_module\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"k\"\u003ematch\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egroup\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;module\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/importlib/__init__.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e127\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eimport_module\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003e_bootstrap\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_gcd_import\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003elevel\u003c/span\u003e\u003cspan class=\"p\"\u003e:],\u003c/span\u003e \u003cspan class=\"n\"\u003epackage\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elevel\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e1014\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_gcd_import\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e991\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_find_and_load\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e961\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_find_and_load_unlocked\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e219\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_call_with_frames_removed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e1014\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_gcd_import\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e991\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_find_and_load\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e975\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_find_and_load_unlocked\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e671\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_load_unlocked\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap_external\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e843\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eexec_module\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;frozen importlib._bootstrap\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e219\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003e_call_with_frames_removed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/markata/__init__.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e25\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emarkata.cli.plugins\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePlugins\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/markata/cli/__init__.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003e.cli\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emake_layout\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erun_until_keyboard_interrupt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/markata/cli/cli.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003etyper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/typer/__init__.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"mi\"\u003e12\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eclick.termui\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eget_terminal_size\u003c/span\u003e \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003eget_terminal_size\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eImportError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ecannot\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ename\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;get_terminal_size\u0026#39;\u003c/span\u003e \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;click.termui\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eopt\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ehostedtoolcache\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ePython\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.8.12\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ex64\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elib\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003epython3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epackages\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eclick\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etermui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"check-pypis-release-date-of-click\"\u003eCheck pypi’s release date of click \u003ca href=\"#check-pypis-release-date-of-click\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo the latest click was released just a few hours before this build.  This\nfeels like we are getting somewhere.  Either click did a poor job of issuing\ndeprecation warnings, or I was ignoring them in my build pipeline.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/click-8-1-0-release-date.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/click-8-1-0-release-date.png\" alt=\"click 8.1.0 release date on pypi\"/ data-glightbox=\"description: click 8.1.0 release date on pypi\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"pin-it-and-push\"\u003epin it and push \u003ca href=\"#pin-it-and-push\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003elet’s fix this build now\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eTo get the build up and running today so that we don’t stop the flow of new\nposts I am going to open my \u003ccode\u003erequirements.txt\u003c/code\u003e file, and pin under the version\nthat was just built.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eclick\u0026lt;8.1.0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSince I am still busy doing other things that fixing this, and am pretty\nconfident that things were working before, I am just going to commit this and\nship it.\u003c/p\u003e\n\u003ch2 id=\"watch-ci\"\u003ewatch ci \u003ca href=\"#watch-ci\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eComing back to actions a few minutes later shows the site is building\nsuccessfully without the same error as before.  New posts will now be flowing\nto the site with the slightly older version of click.\u003c/p\u003e\n\u003ch2 id=\"looking-for-an-issue\"\u003elooking for an issue \u003ca href=\"#looking-for-an-issue\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLet’s make sure that the issue is going to be resolved. After not being busy\nand having time to investigate the issue, I can see that typer is the library\nmaking the import to \u003ccode\u003eget_terminal_size\u003c/code\u003e.  Lets checkout its\n\u003ca href=\"https://github.com/tiangolo/typer/\" 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\"\u003eGitHub-repo\u003c/a\u003e and make sure someone is\nworking on it.\u003c/p\u003e\n\u003cp\u003eBy the time I go to the package that was having this issue there was already an\n\u003ca href=\"https://github.com/tiangolo/typer/issues/377\" 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\"\u003eissue\u003c/a\u003e up, and PR waiting\napproval.  I gave the Issue a reaction 👍 to signal that I also care, and\nappreciate the issue author taking time to submit.\u003c/p\u003e\n",
      "content_text": "\nMy personal Site build went down last week, and I was unable to publish a new\narticle.  This is the process I went through to get it back up and running\nquickly.\n\n## Is it a fluke?\n\nClassic IT fix, rerun it and see if you get the same error.  Everyone is busy\nand when you have your build go down you are probably busy doing something\nelse.  My first step is often to simply click rerun right from GitHub actions.\nSometimes this will fix it, and sometimes it doesn't.  It's an easy fix to run\nin the meantime you are not focused on fixing it.\n\n## Is GitHub having issues?\n\nAlso worth a check to see if GitHub is having a hiccup or not.  This error felt\npretty obviously not GitHub's fault, but it's a good one to check when you run\ninto a weird unexplainable error.\n\nCheck [github status](https://www.githubstatus.com/) for any downtime issues with actions.\n\n## Build Down\n\nAlright down to the error message I got.  The error is pretty obvious that\nsomewhere I am trying to import a non-existing module from click.\n\n``` python\nRun markata build --no-pretty\nTraceback (most recent call last):\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/bin/markata\", line 33, in \u003cmodule\u003e\n    sys.exit(load_entry_point('markata==0.1.0', 'console_scripts', 'markata')())\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/bin/markata\", line 25, in importlib_load_entry_point\n    return next(matches).load()\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/importlib/metadata.py\", line 77, in load\n    module = import_module(match.group('module'))\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/importlib/__init__.py\", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 1014, in _gcd_import\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 991, in _find_and_load\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 961, in _find_and_load_unlocked\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 219, in _call_with_frames_removed\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 1014, in _gcd_import\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 991, in _find_and_load\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 975, in _find_and_load_unlocked\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 671, in _load_unlocked\n  File \"\u003cfrozen importlib._bootstrap_external\u003e\", line 843, in exec_module\n  File \"\u003cfrozen importlib._bootstrap\u003e\", line 219, in _call_with_frames_removed\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/markata/__init__.py\", line 25, in \u003cmodule\u003e\n    from markata.cli.plugins import Plugins\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/markata/cli/__init__.py\", line 1, in \u003cmodule\u003e\n    from .cli import app, cli, make_layout, run_until_keyboard_interrupt\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/markata/cli/cli.py\", line 3, in \u003cmodule\u003e\n    import typer\n  File \"/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/typer/__init__.py\", line 12, in \u003cmodule\u003e\n    from click.termui import get_terminal_size as get_terminal_size\nImportError: cannot import name 'get_terminal_size' from 'click.termui' (/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/click/termui.py)\n```\n\n## Check pypi's release date of click\n\nSo the latest click was released just a few hours before this build.  This\nfeels like we are getting somewhere.  Either click did a poor job of issuing\ndeprecation warnings, or I was ignoring them in my build pipeline.\n\n![click 8.1.0 release date on pypi](https://images.waylonwalker.com/click-8-1-0-release-date.png)\n\n## pin it and push\n_let's fix this build now_\n\nTo get the build up and running today so that we don't stop the flow of new\nposts I am going to open my `requirements.txt` file, and pin under the version\nthat was just built.\n\n``` txt\nclick\u003c8.1.0\n```\n\nSince I am still busy doing other things that fixing this, and am pretty\nconfident that things were working before, I am just going to commit this and\nship it.\n\n## watch ci\n\nComing back to actions a few minutes later shows the site is building\nsuccessfully without the same error as before.  New posts will now be flowing\nto the site with the slightly older version of click.\n\n## looking for an issue\n\nLet's make sure that the issue is going to be resolved. After not being busy\nand having time to investigate the issue, I can see that typer is the library\nmaking the import to `get_terminal_size`.  Lets checkout its\n[GitHub-repo](https://github.com/tiangolo/typer/) and make sure someone is\nworking on it.\n\nBy the time I go to the package that was having this issue there was already an\n[issue](https://github.com/tiangolo/typer/issues/377) up, and PR waiting\napproval.  I gave the Issue a reaction 👍 to signal that I also care, and\nappreciate the issue author taking time to submit.\n",
      "summary": "My personal Site build went down last week, and I was unable to publish a new article. This is the process I went through to get it back up and running quickly.",
      "date_published": "2022-04-01T16:25:49Z",
      "date_modified": "2022-04-01T16:25:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/prithivirajdamodaran-gramformer/",
      "url": "https://go.waylonwalker.com/prithivirajdamodaran-gramformer/",
      "title": "⭐ PrithivirajDamodaran Gramformer",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/PrithivirajDamodaran/Gramformer\" 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\"\u003eGramformer\u003c/a\u003e by \u003ca href=\"https://github.com/PrithivirajDamodaran\" 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\"\u003ePrithivirajDamodaran\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA framework for detecting, highlighting and correcting grammatical errors on natural language text. Created by Prithiviraj Damodaran. Open to pull requests and other forms of collaboration.\u003c/p\u003e\n",
      "content_text": "\n[Gramformer](https://github.com/PrithivirajDamodaran/Gramformer) by [PrithivirajDamodaran](https://github.com/PrithivirajDamodaran) is a game-changer in its space. Excited to see how it evolves.\n\nA framework for detecting, highlighting and correcting grammatical errors on natural language text. Created by Prithiviraj Damodaran. Open to pull requests and other forms of collaboration.\n",
      "summary": "Gramformer by PrithivirajDamodaran is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2022-04-01T03:01:38Z",
      "date_modified": "2022-04-01T03:01:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-base-exception/",
      "url": "https://go.waylonwalker.com/python-base-exception/",
      "title": "Don't inherit from python BaseException, Here's why.",
      "content_html": "\u003cp\u003eI ran into a PR this week where the author was inheriting what BaseException\nrather than exception.  I made this example to illustrate the unintended side\neffects that it can have.\u003c/p\u003e\n\u003cp\u003eTry running these examples in a \u003ccode\u003e.py\u003c/code\u003e file for yourself and try to kill them\nwith control-c.\u003c/p\u003e\n\u003ch2 id=\"you-cannot-keybard-interrupt\"\u003eYou cannot Keybard interrupt \u003ca href=\"#you-cannot-keybard-interrupt\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince things such as \u003ccode\u003eKeyboardInterrupt\u003c/code\u003e are created as an exception that\ninherits from \u003ccode\u003eBaseException\u003c/code\u003e, if you except \u003ccode\u003eBaseException\u003c/code\u003e you can no longer\n\u003ccode\u003eKeyboardInterrupt\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etime\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003esleep\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e30\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eBaseException\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# ❌\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003epass\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"except-from-exception-or-higher\"\u003eexcept from Exception or higher \u003ca href=\"#except-from-exception-or-higher\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you except from exception or something than inherits from it you will be\nbetter off, and avoid unintended side effects.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etime\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003esleep\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003esleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e30\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eException\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"c1\"\u003e# ✅\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003epass\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"this-goes-with-custom-exceptions-as-well\"\u003eThis goes with Custom Exceptions as well \u003ca href=\"#this-goes-with-custom-exceptions-as-well\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen you make custom exceptions expect that users, or your team members will\nwant to catch them and try to handle them if they can.  If you inherit from\n\u003ccode\u003eBaseException\u003c/code\u003e you will put them in a similar situation when they use your\ncustom Exception.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyFancyException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"ne\"\u003eBaseException\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e \u003cspan class=\"c1\"\u003e# ❌\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyFancyException\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"ne\"\u003eException\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e \u003cspan class=\"c1\"\u003e# ✅\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI ran into a PR this week where the author was inheriting what BaseException\nrather than exception.  I made this example to illustrate the unintended side\neffects that it can have.\n\nTry running these examples in a `.py` file for yourself and try to kill them\nwith control-c.\n\n## You cannot Keybard interrupt\n\nSince things such as `KeyboardInterrupt` are created as an exception that\ninherits from `BaseException`, if you except `BaseException` you can no longer\n`KeyboardInterrupt`.\n\n```python\nfrom time import sleep\n\nwhile True:\n    try:\n        sleep(30)\n    except BaseException: # ❌\n        pass\n```\n\n## except from Exception or higher\n\nIf you except from exception or something than inherits from it you will be\nbetter off, and avoid unintended side effects.\n\n```python\nfrom time import sleep\n\nwhile True:\n    try:\n        sleep(30)\n    except Exception: # ✅\n        pass\n```\n\n## This goes with Custom Exceptions as well\n\nWhen you make custom exceptions expect that users, or your team members will\nwant to catch them and try to handle them if they can.  If you inherit from\n`BaseException` you will put them in a similar situation when they use your\ncustom Exception.\n\n```python\nclass MyFancyException(BaseException): # ❌\n    ...\n\nclass MyFancyException(Exception): # ✅\n    ...\n```\n",
      "summary": "I ran into a PR this week where the author was inheriting what BaseException rather than exception. I made this example to illustrate the unintended side...",
      "date_published": "2022-03-31T01:21:30Z",
      "date_modified": "2022-03-31T01:21:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-cache-key/",
      "url": "https://go.waylonwalker.com/python-cache-key/",
      "title": "How I make cache-keys from python objects",
      "content_html": "\u003cp\u003eWhen I need a consistent key for a pythohn object I often reach for\n\u003ccode\u003ehashlib.md5\u003c/code\u003e  It works for me and the use cases I have.\u003c/p\u003e\n\u003ch2 id=\"diskcache\"\u003ediskcache \u003ca href=\"#diskcache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYesterday we talked about setting up a persistant cache with python diskcache.\nIn order to make this really work we need a good way to make consistent cache\nkeys from some sort of python object.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/python-diskcache/\" class=\"wikilink\" data-title=\"How I setup a sqlite cache in python\" data-description=\"When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It\u0026#39;s built on sqlite with just enough...\" data-date=\"2022-03-29\" data-preview=\"When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It\u0026#39;s built on sqlite with just enough...\"\u003eHow I setup a sqlite cache in python\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"hash\"\u003ehash \u003ca href=\"#hash\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003edoes not work\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eMy first thought was to just hash the files, this will give me a unique key for\neach.  This will work, and give you a consistant key for one and only one given\npython process.  If you start a new interpreter you will get different keys.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003e$✘!?\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003evia\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"mf\"\u003e.1.5\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003ehash\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e3862245013515310359\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003ehash\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e3862245013515310359\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eexit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003e$✘!?\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003evia\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"mf\"\u003e.1.5\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003ehash\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e83673051278873734\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003ehere is a snapshot of my terminal proving that you can get the same hash in one session, but it changes when you restart ipython.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"hashlibmd5\"\u003ehashlib.md5 \u003ca href=\"#hashlibmd5\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a quick couple ipython sessions showing that md5 cache is consistent accross multiple sessions.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003e$✘!?\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003evia\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"mf\"\u003e.1.5\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eus\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeast\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePYFLYBY\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ehashlib\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e╭───────────────────────────────\u003c/span\u003e \u003cspan class=\"n\"\u003eTraceback\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emost\u003c/span\u003e \u003cspan class=\"n\"\u003erecent\u003c/span\u003e \u003cspan class=\"n\"\u003ecall\u003c/span\u003e \u003cspan class=\"n\"\u003elast\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"err\"\u003e────────────────────────────────╮\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eipython\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"nb\"\u003einput\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e1537\u003c/span\u003e\u003cspan class=\"n\"\u003ec4473c74\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emodule\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                                                     \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eTypeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnicode\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eobjects\u003c/span\u003e \u003cspan class=\"n\"\u003emust\u003c/span\u003e \u003cspan class=\"n\"\u003ebe\u003c/span\u003e \u003cspan class=\"n\"\u003eencoded\u003c/span\u003e \u003cspan class=\"n\"\u003ebefore\u003c/span\u003e \u003cspan class=\"n\"\u003ehashing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e \u003cspan class=\"n\"\u003eHASH\u003c/span\u003e \u003cspan class=\"nb\"\u003eobject\u003c/span\u003e \u003cspan class=\"o\"\u003e@\u003c/span\u003e \u003cspan class=\"mh\"\u003e0x7fe4ba6832d0\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehexdigest\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\u0026#39;1c7c1073ca096ffdb324471770911fe2\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehexdigest\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\u0026#39;1c7c1073ca096ffdb324471770911fe2\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehexdigest\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\u0026#39;1c7c1073ca096ffdb324471770911fe2\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eexit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003e$✘!?\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003evia\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"mf\"\u003e.1.5\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"err\"\u003e\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eus\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeast\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003etook\u003c/span\u003e \u003cspan class=\"mi\"\u003e47\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.8.0\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehexdigest\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePYFLYBY\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ehashlib\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\u0026#39;1c7c1073ca096ffdb324471770911fe2\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-for-diskcache\"\u003ekey for diskcache \u003ca href=\"#key-for-diskcache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince it is consistent we can use it as a cache key for diskcache operations.\nI setup a little funciton that allows me to pass a bunch of differnt things in\nto cache.  As long as the \u003cstrong\u003estr\u003c/strong\u003e method exists and is gives the data that you\nwant to cache key on, this will work.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003emake_hash\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003ekeys\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estr_keys\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ekey\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ekeys\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ehashlib\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd5\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejoin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estr_keys\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eencode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehexdigest\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/python-args-kwargs/\" class=\"wikilink\" data-title=\"understanding python \\\\*args and \\\\*\\\\*kwargs\" data-description=\"Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...\" data-date=\"2020-06-10\" data-preview=\"Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...\"\u003eunderstanding python *args and **kwargs\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIf the *args is confusing, I have a full article on \u003ccode\u003e*args\u003c/code\u003e and \u003ccode\u003e**kwargs\u003c/code\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"see-it-in-action\"\u003eSee it in action \u003ca href=\"#see-it-in-action\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere you can see it in action.  Anything passed into the function gets to be\npart of the key.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ewaylonwalker ↪main v3.8.0 ipython\n❯ def make_hash(self, *keys: str) -\u0026gt; str:\n...:     str_keys = [str(key) for key in keys]\n...:     return hashlib.md5(\u0026#34;\u0026#34;.join(str_keys).encode(\u0026#34;utf-8\u0026#34;)).hexdigest()\n...:\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ make_hash(1, \u0026#34;one\u0026#34;, \u0026#34;1\u0026#34;, 1.0)\n\u0026#39;73901d019df012a1cdab826ce301217d\u0026#39;\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ exit\n\n\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com) on  (us-east-1) took 19m19s\n❯\n\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com) on  (us-east-1)\n❯ ipython\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ def make_hash(self, *keys: str) -\u0026gt; str:\n...:     str_keys = [str(key) for key in keys]\n...:     return hashlib.md5(\u0026#34;\u0026#34;.join(str_keys).encode(\u0026#34;utf-8\u0026#34;)).hexdigest()\n[PYFLYBY] import hashlib\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ make_hash(1, \u0026#34;one\u0026#34;, \u0026#34;1\u0026#34;, 1.0)\n\u0026#39;73901d019df012a1cdab826ce301217d\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\nWhen I need a consistent key for a pythohn object I often reach for\n`hashlib.md5`  It works for me and the use cases I have.\n\n## diskcache\n\nYesterday we talked about setting up a persistant cache with python diskcache.\nIn order to make this really work we need a good way to make consistent cache\nkeys from some sort of python object.\n\n\u003ca href=\"/python-diskcache/\" class=\"wikilink\" data-title=\"How I setup a sqlite cache in python\" data-description=\"When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It\u0026#39;s built on sqlite with just enough...\" data-date=\"2022-03-29\"\u003eHow I setup a sqlite cache in python\u003c/a\u003e\n\n## hash\n\n_does not work_\n\nMy first thought was to just hash the files, this will give me a unique key for\neach.  This will work, and give you a consistant key for one and only one given\npython process.  If you start a new interpreter you will get different keys.\n\n```python\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com)\n❯ ipython\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hash(\"waylonwalker\")\n-3862245013515310359\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hash(\"waylonwalker\")\n-3862245013515310359\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ exit\n\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com)\n❯ ipython\n\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hash(\"waylonwalker\")\n-83673051278873734\n\n```\n\n\u003e here is a snapshot of my terminal proving that you can get the same hash in one session, but it changes when you restart ipython.\n\n## hashlib.md5\n\nHere is a quick couple ipython sessions showing that md5 cache is consistent accross multiple sessions.\n\n```python\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com) on  (us-east-1)\n❯ ipython\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hashlib.md5(\"waylonwalker\")\n[PYFLYBY] import hashlib\n╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮\n│ \u003cipython-input-1-1537c4473c74\u003e:1 in \u003cmodule\u003e                                                     │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\nTypeError: Unicode-objects must be encoded before hashing\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hashlib.md5(\"waylonwalker\".encode(\"utf-8\"))\n\u003cmd5 HASH object @ 0x7fe4ba6832d0\u003e\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hashlib.md5(\"waylonwalker\".encode(\"utf-8\")).hexdigest()\n'1c7c1073ca096ffdb324471770911fe2'\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hashlib.md5(\"waylonwalker\".encode(\"utf-8\")).hexdigest()\n'1c7c1073ca096ffdb324471770911fe2'\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hashlib.md5(\"waylonwalker\".encode(\"utf-8\")).hexdigest()\n'1c7c1073ca096ffdb324471770911fe2'\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ exit\n\n\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com) on  (us-east-1) took 47s\n❯ ipython\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ hashlib.md5(\"waylonwalker\".encode(\"utf-8\")).hexdigest()\n[PYFLYBY] import hashlib\n'1c7c1073ca096ffdb324471770911fe2'\n\n\n```\n\n## key for diskcache\n\nSince it is consistent we can use it as a cache key for diskcache operations.\nI setup a little funciton that allows me to pass a bunch of differnt things in\nto cache.  As long as the __str__ method exists and is gives the data that you\nwant to cache key on, this will work.\n\n```python\ndef make_hash(self, *keys: str) -\u003e str:\n    str_keys = [str(key) for key in keys]\n    return hashlib.md5(\"\".join(str_keys).encode(\"utf-8\")).hexdigest()\n```\n\n\u003ca href=\"/python-args-kwargs/\" class=\"wikilink\" data-title=\"understanding python \\\\*args and \\\\*\\\\*kwargs\" data-description=\"Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...\" data-date=\"2020-06-10\"\u003eunderstanding python \\*args and \\*\\*kwargs\u003c/a\u003e\n\n\u003e If the *args is confusing, I have a full article on `*args` and `**kwargs`.\n\n## See it in action\n\nHere you can see it in action.  Anything passed into the function gets to be\npart of the key.\n\n```\nwaylonwalker ↪main v3.8.0 ipython\n❯ def make_hash(self, *keys: str) -\u003e str:\n...:     str_keys = [str(key) for key in keys]\n...:     return hashlib.md5(\"\".join(str_keys).encode(\"utf-8\")).hexdigest()\n...:\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ make_hash(1, \"one\", \"1\", 1.0)\n'73901d019df012a1cdab826ce301217d'\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ exit\n\n\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com) on  (us-east-1) took 19m19s\n❯\n\nwaylonwalker.com on  main [$✘!?] via  v5.1.5  v3.8.0 (waylonwalker.com) on  (us-east-1)\n❯ ipython\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ def make_hash(self, *keys: str) -\u003e str:\n...:     str_keys = [str(key) for key in keys]\n...:     return hashlib.md5(\"\".join(str_keys).encode(\"utf-8\")).hexdigest()\n[PYFLYBY] import hashlib\n\nwaylonwalker ↪main v3.8.0 ipython\n❯ make_hash(1, \"one\", \"1\", 1.0)\n'73901d019df012a1cdab826ce301217d'\n```\n",
      "summary": "When I need a consistent key for a pythohn object I often reach for It works for me and the use cases I have.",
      "date_published": "2022-03-30T16:11:09Z",
      "date_modified": "2022-03-30T16:11:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-diskcache/",
      "url": "https://go.waylonwalker.com/python-diskcache/",
      "title": "How I setup a sqlite cache in python",
      "content_html": "\u003cp\u003eWhen I need to cache some data between runs or share a cache accross multiple\nprocesses my go to library in python is \u003ccode\u003ediskcache\u003c/code\u003e.  It’s built on sqlite with\njust enough cacheing niceties that make it very worth it.\u003c/p\u003e\n\u003ch2 id=\"install-diskcache\"\u003einstall diskcache \u003ca href=\"#install-diskcache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall diskcache into your virtual environement of choice using pip from your command line.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m pip install diskcache\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"setup-the-cache\"\u003esetup the cache \u003ca href=\"#setup-the-cache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere are a couple of different types of cache, \u003ccode\u003eCache\u003c/code\u003e, \u003ccode\u003eFanoutCache\u003c/code\u003e,\nand \u003ccode\u003eDjangoCache\u003c/code\u003e, you can read more about those in the\n\u003ca href=\"https://grantjenks.com/docs/diskcache\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/grantjenks.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/grantjenks.com.ico\" class=\"has-avatar  has-avatar-before\"\u003edocs\u003c/a\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ediskcache\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eCache\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecache\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eFanoutCache\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;.mycache\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estatistics\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"adding-to-the-cache\"\u003eAdding to the cache \u003ca href=\"#adding-to-the-cache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdding to the cache only needs a key and value.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;me\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;waylonwalker\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"set-the-expire-time\"\u003eSet the expire time \u003ca href=\"#set-the-expire-time\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOptionally you can set the seconds before it expires.  The cache invalidation\ntools like this is what really makes diskcache shine over using raw sqlite or\nany sort of static file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;me\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;waylonwalker\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexpire\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e60\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"tagging\"\u003etagging \u003ca href=\"#tagging\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDiskcache supports tagging entries added to the cache.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# add an item to the cache with a tag\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;me\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;waylonwalker\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexpire\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e60\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etag\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;people\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis seems to let you do a few new things like getting items from the cache by\nboth key and tag, or evict all tags from the cache.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# evict all items tagged as \u0026#39;people\u0026#39; from the cache\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eevict\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etag\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;people\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"reading-from-the-cache\"\u003eReading from the cache \u003ca href=\"#reading-from-the-cache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can read from the cache by using the \u003ccode\u003e.get\u003c/code\u003e method and giving it the key\nyou want to retrieve.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewho\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecache\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;me\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# who == \u0026#39;waylonwalker\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"cache-misses\"\u003eCache Misses \u003ca href=\"#cache-misses\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCache misses will return a \u003ccode\u003eNone\u003c/code\u003e just like any dictionary \u003ccode\u003e.get\u003c/code\u003e miss.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003emissed = cache.get(\u0026#39;missing\u0026#39;)\n# missed == None\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"heading\"\u003e⭐ \u003ca href=\"#heading\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eGive Grant some love and give\n\u003ca href=\"https://github.com/grantjenks/python-diskcache\" 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\"\u003egrantjenks/python-diskcache\u003c/a\u003e a\n⭐.\u003c/p\u003e\n",
      "content_text": "\nWhen I need to cache some data between runs or share a cache accross multiple\nprocesses my go to library in python is `diskcache`.  It's built on sqlite with\njust enough cacheing niceties that make it very worth it.\n\n## install diskcache\n\nInstall diskcache into your virtual environement of choice using pip from your command line.\n\n```bash\npython -m pip install diskcache\n```\n\n## setup the cache\n\nThere are a couple of different types of cache, `Cache`, `FanoutCache`,\nand `DjangoCache`, you can read more about those in the\n[docs](https://grantjenks.com/docs/diskcache)\n\n```python\nfrom diskcache import Cache\ncache = FanoutCache('.mycache', statistics=True)\n```\n\n\n\n## Adding to the cache\n\nAdding to the cache only needs a key and value.\n\n``` python\ncache.add('me', 'waylonwalker' )\n```\n\n## Set the expire time\n\nOptionally you can set the seconds before it expires.  The cache invalidation\ntools like this is what really makes diskcache shine over using raw sqlite or\nany sort of static file.\n\n``` python\ncache.add('me', 'waylonwalker', expire=60)\n```\n\n## tagging\n\nDiskcache supports tagging entries added to the cache.\n\n``` python\n# add an item to the cache with a tag\ncache.add('me', 'waylonwalker', expire=60, tag='people')\n```\n\nThis seems to let you do a few new things like getting items from the cache by\nboth key and tag, or evict all tags from the cache.\n\n``` python\n# evict all items tagged as 'people' from the cache\ncache.evict(tag='people')\n```\n\n## Reading from the cache\n\nYou can read from the cache by using the `.get` method and giving it the key\nyou want to retrieve.\n\n```python\nwho = cache.get('me')\n# who == 'waylonwalker'\n```\n\n## Cache Misses\n\nCache misses will return a `None` just like any dictionary `.get` miss.\n\n```\nmissed = cache.get('missing')\n# missed == None\n```\n\n## ⭐\n\nGive Grant some love and give\n[grantjenks/python-diskcache](https://github.com/grantjenks/python-diskcache) a\n⭐.\n",
      "summary": "When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It's built on sqlite with just enough...",
      "date_published": "2022-03-29T16:47:36Z",
      "date_modified": "2022-03-29T16:47:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-lru-cache/",
      "url": "https://go.waylonwalker.com/python-lru-cache/",
      "title": "Cache a python function with lru_cache",
      "content_html": "\u003cp\u003eThe easiest way to speed up any code is to run less code.  A common technique\nto reduce the amount of repative work is to implement a cache such that the\nnext time you need the same work done, you don’t need to recompute anything you\ncan simply retrieve it from a cache.\u003c/p\u003e\n\u003ch2 id=\"lru-cache\"\u003elru_cache \u003ca href=\"#lru-cache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe easiest and most common to setup in python is a builtin functools.lru_cache.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efunctools\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003elru_cache\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@lru_cache\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_cars\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pulling cars data\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003epd\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/cars.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estorage_options\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;User-Agent\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Mozilla/5.0\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"when-to-use-lru-cache\"\u003ewhen to use lru_cache \u003ca href=\"#when-to-use-lru-cache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAny time you have a function where you expect the same results each time a\nfunction is called with the same inputs, you \u003cem\u003ecan\u003c/em\u003e use lru_cache.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewhen same *args, **kwargs always return the same value\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003elru_cache only works for one python process.  If you are running multiple\nsubprocesses, or running the same script over and over, lru_cache will not\nwork.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003elru_cache only caches in a single python process\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"max-size\"\u003emax_size \u003ca href=\"#max-size\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003elru_cache can take an optional parameter \u003ccode\u003emaxsize\u003c/code\u003e to set the size of your\ncache.  By default its set to \u003ccode\u003e128\u003c/code\u003e, if you want to store more or less items in\nyour cache you can adjust this value.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eget_cars\u003c/code\u003e example is a bit of a unique one.  As\n\u003ca href=\"https://www.youtube.com/watch?v=K0Q5twtYxWY\" 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\"\u003eanthonywritescode\u003c/a\u003e points out\nthis implementation is behaving like a singleton, and we can optimize the size\nof the cache by allocating exactly how many items we will ever have in it by\nsetting its value to 1.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efunctools\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003elru_cache\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@lru_cache\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emaxsize\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_cars\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pulling cars data\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003epd\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/cars.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estorage_options\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;User-Agent\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Mozilla/5.0\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"my-example-stretches-the-rule-a-little-bit\"\u003eMy example stretches the rule a little bit \u003ca href=\"#my-example-stretches-the-rule-a-little-bit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe example above does a web request.  As a Data Engineer I often write scripts\nthat run for a short time then stop.  I do not expect the output of this\nfunction to change during the runtime of this job, and if it did I may actually\nwant them to match anyways.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eweb request do change their output\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIf I were building webapps, or some sort of process that was running for a long\ntime.  Something that starts and waits for work, this may not be a good\napplication of lru_cache.  If this process is running for days or months my\nassumption that the request does not change is no longer valid.\u003c/p\u003e\n\u003ch2 id=\"theres-also-a-typed-kwarg-for-lru-cache\"\u003eThere’s also a typed kwarg for lru_cache \u003ca href=\"#theres-also-a-typed-kwarg-for-lru-cache\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis one is new to me but you can cache not only on the value, but the type of\nthe value being passed into your function.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e(from the docstring)\nIf \u003cem\u003etyped\u003c/em\u003e is True, arguments of different types will be cached separately.\nFor example, f(3.0) and f(3) will be treated as distinct calls with distinct\nresults.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nThe easiest way to speed up any code is to run less code.  A common technique\nto reduce the amount of repative work is to implement a cache such that the\nnext time you need the same work done, you don't need to recompute anything you\ncan simply retrieve it from a cache.\n\n## lru_cache\n\nThe easiest and most common to setup in python is a builtin functools.lru_cache.\n\n```python\nfrom functools import lru_cache\n\n@lru_cache\ndef get_cars():\n    print('pulling cars data')\n    return pd.read_csv(\"https://waylonwalker.com/cars.csv\", storage_options = {'User-Agent': 'Mozilla/5.0'})\n```\n\n## when to use lru_cache\n\nAny time you have a function where you expect the same results each time a\nfunction is called with the same inputs, you _can_ use lru_cache.\n\n\u003e when same *args, **kwargs always return the same value\n\nlru_cache only works for one python process.  If you are running multiple\nsubprocesses, or running the same script over and over, lru_cache will not\nwork.\n\n\u003e lru_cache only caches in a single python process\n\n## max_size\n\nlru_cache can take an optional parameter `maxsize` to set the size of your\ncache.  By default its set to `128`, if you want to store more or less items in\nyour cache you can adjust this value.\n\nThe `get_cars` example is a bit of a unique one.  As\n[anthonywritescode](https://www.youtube.com/watch?v=K0Q5twtYxWY) points out\nthis implementation is behaving like a singleton, and we can optimize the size\nof the cache by allocating exactly how many items we will ever have in it by\nsetting its value to 1.\n\n```python\nfrom functools import lru_cache\n\n@lru_cache(maxsize=1)\ndef get_cars():\n    print('pulling cars data')\n    return pd.read_csv(\"https://waylonwalker.com/cars.csv\", storage_options = {'User-Agent': 'Mozilla/5.0'})\n```\n\n## My example stretches the rule a little bit\n\nThe example above does a web request.  As a Data Engineer I often write scripts\nthat run for a short time then stop.  I do not expect the output of this\nfunction to change during the runtime of this job, and if it did I may actually\nwant them to match anyways.\n\n\u003e web request do change their output\n\nIf I were building webapps, or some sort of process that was running for a long\ntime.  Something that starts and waits for work, this may not be a good\napplication of lru_cache.  If this process is running for days or months my\nassumption that the request does not change is no longer valid.\n\n## There's also a typed kwarg for lru_cache\n\nThis one is new to me but you can cache not only on the value, but the type of\nthe value being passed into your function.\n\n\u003e (from the docstring)\n\u003e If *typed* is True, arguments of different types will be cached separately.\n\u003e For example, f(3.0) and f(3) will be treated as distinct calls with distinct\n\u003e results.\n",
      "summary": "The easiest way to speed up any code is to run less code. A common technique to reduce the amount of repative work is to implement a cache such that the next...",
      "date_published": "2022-03-28T01:21:30Z",
      "date_modified": "2022-03-28T01:21:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pandas-read-csv-user-agent/",
      "url": "https://go.waylonwalker.com/pandas-read-csv-user-agent/",
      "title": "Set User Agent on pandas read_csv",
      "content_html": "\u003cp\u003eI keep a small \u003ca href=\"https://waylonwalker.com/cars.csv\" 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\"\u003ecars.csv\u003c/a\u003e on my website for\nquickly trying out different pandas operations.  It’s very handy to keep around\nto help what a method you are unfamiliar with does, or give a teammate an\nexample they can replicate.\u003c/p\u003e\n\u003ch2 id=\"hosts-switched\"\u003eHosts switched \u003ca href=\"#hosts-switched\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI recently switched hosting from netlify over to cloudflare.  Well cloudflare\ndoes some work to block certain requests that it does not think is a real user.\nOne of these checks is to ensure there is a real user agent on the request.\u003c/p\u003e\n\u003ch2 id=\"not-my-go-to-dataset-\"\u003eNot my go to dataset 😭 \u003ca href=\"#not-my-go-to-dataset-\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis breaks my go to example dataset.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epd\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/cars.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# HTTPError: HTTP Error 403: Forbidden\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"but-requests-works\"\u003eBut requests works??? \u003ca href=\"#but-requests-works\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat’s weird is, requests still works just fine!  Not sure why using urllib the\nway pandas does breaks the request, but it does.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/cars.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eResponse\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"setting-the-user-agent-in-pandasread-csv\"\u003eSetting the User Agent in pandas.read_csv \u003ca href=\"#setting-the-user-agent-in-pandasread-csv\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ethis fixed the issue for me!\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAfter a bit of googling I realize that this is a common thing, and that setting\nthe user-agent fixes it.  This is the point I remember seeing in the cloudflare\ndashbard that they protect against a lot of different attacks, aparantly it\ntreats \u003ccode\u003epd.read_csv\u003c/code\u003e as an attack on my cloudflare pages site.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epd\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/cars.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estorage_options\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;User-Agent\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Mozilla/5.0\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# success\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"now-my-data-is-back\"\u003eNow my data is back \u003ca href=\"#now-my-data-is-back\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow this works again, but it feels like just a bit more effort than I want to\ndo by hand.  I might need to look into my cloudflare settings to see if I can\nallow this dataset to be accessed by \u003ccode\u003epd.read_csv\u003c/code\u003e.\u003c/p\u003e\n",
      "content_text": "\nI keep a small [cars.csv](https://waylonwalker.com/cars.csv) on my website for\nquickly trying out different pandas operations.  It's very handy to keep around\nto help what a method you are unfamiliar with does, or give a teammate an\nexample they can replicate.\n\n## Hosts switched\n\nI recently switched hosting from netlify over to cloudflare.  Well cloudflare\ndoes some work to block certain requests that it does not think is a real user.\nOne of these checks is to ensure there is a real user agent on the request.\n\n## Not my go to dataset 😭\n\nThis breaks my go to example dataset.\n\n```python\npd.read_csv(\"https://waylonwalker.com/cars.csv\")\n\n# HTTPError: HTTP Error 403: Forbidden\n```\n\n## But requests works???\n\nWhat's weird is, requests still works just fine!  Not sure why using urllib the\nway pandas does breaks the request, but it does.\n\n```python\nrequests.get(\"https://waylonwalker.com/cars.csv\")\n\n\u003cResponse [200]\u003e\n```\n\n## Setting the User Agent in pandas.read_csv\n\n_this fixed the issue for me!_\n\nAfter a bit of googling I realize that this is a common thing, and that setting\nthe user-agent fixes it.  This is the point I remember seeing in the cloudflare\ndashbard that they protect against a lot of different attacks, aparantly it\ntreats `pd.read_csv` as an attack on my cloudflare pages site.\n\n```python\npd.read_csv(\"https://waylonwalker.com/cars.csv\", storage_options = {'User-Agent': 'Mozilla/5.0'})\n\n# success\n```\n\n## Now my data is back\n\nNow this works again, but it feels like just a bit more effort than I want to\ndo by hand.  I might need to look into my cloudflare settings to see if I can\nallow this dataset to be accessed by `pd.read_csv`.\n",
      "summary": "I keep a small cars.csv on my website for quickly trying out different pandas operations. It's very handy to keep around to help what a method you are...",
      "date_published": "2022-03-27T01:21:30Z",
      "date_modified": "2022-03-27T01:21:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-requests-get/",
      "url": "https://go.waylonwalker.com/python-requests-get/",
      "title": "Get Webpage with python requests",
      "content_html": "\u003cp\u003ePython’s requests library is one of the gold standard apis, designed by Kenneth\nReitz.  It was designed with the user perspective in mind first and\nimplementation second. I have heard this called readme driven development,\nwhere the interface the user will use is laid out first, then implemented.\nThis makes the library much mor intuitive than if it were designed around how\nit was easiest to implement.\u003c/p\u003e\n\u003ch2 id=\"install-requests\"\u003eInstall Requests \u003ca href=\"#install-requests\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRequests is on pypi and can be installed into your virtual environtment with pip.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m pip install requests\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"getting-the-content-of-a-request\"\u003eGetting the content of a request \u003ca href=\"#getting-the-content-of-a-request\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRequests makes getting content from a web url as easy as possible.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003erequests\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003er\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com/til/htmx-get/\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003earticle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003er\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"requests-is-not-limited-to-\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\"\u003erequests is not limited to html \u003ca href=\"#requests-is-not-limited-to-html\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRequests can handle any web request and is not limited to only html.  Here are\nsome examples to get a markdown file, a csv, and a png image.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehtmx_get_md\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com/til/htmx-get.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecars\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com/cars.csv\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eprofile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;https://images.waylonwalker.com/8bitc.png\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"rtfm\"\u003eRTFM \u003ca href=\"#rtfm\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere is way more to requests, this just scratches the surface while covering\nwhat you are going to need to get going. The\n\u003ca href=\"https://docs.python-requests.org/en/latest/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.python-requests.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.python-requests.org.ico\" class=\"has-avatar  has-avatar-before\"\u003erequests docs\u003c/a\u003e have way more details.\u003c/p\u003e\n",
      "content_text": "\nPython's requests library is one of the gold standard apis, designed by Kenneth\nReitz.  It was designed with the user perspective in mind first and\nimplementation second. I have heard this called readme driven development,\nwhere the interface the user will use is laid out first, then implemented.\nThis makes the library much mor intuitive than if it were designed around how\nit was easiest to implement.\n\n## Install Requests\n\nRequests is on pypi and can be installed into your virtual environtment with pip.\n\n```bash\npython -m pip install requests\n```\n\n## Getting the content of a request\n\nRequests makes getting content from a web url as easy as possible.\n\n```python\nimport requests\n\nr = requests.get('https://waylonwalker.com/til/htmx-get/')\narticle = r.content\n```\n\n## requests is not limited to html\n\nRequests can handle any web request and is not limited to only html.  Here are\nsome examples to get a markdown file, a csv, and a png image.\n\n```python\nhtmx_get_md = requests.get('https://waylonwalker.com/til/htmx-get.md').content\ncars = requests.get('https://waylonwalker.com/cars.csv').content\nprofile = requests.get('https://images.waylonwalker.com/8bitc.png').content\n```\n\n## RTFM\n\nThere is way more to requests, this just scratches the surface while covering\nwhat you are going to need to get going. The\n[requests docs](https://docs.python-requests.org/en/latest/) have way more details.\n",
      "summary": "Python's requests library is one of the gold standard apis, designed by Kenneth Reitz. It was designed with the user perspective in mind first and...",
      "date_published": "2022-03-26T17:10:35Z",
      "date_modified": "2022-03-26T17:10:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/htmx-get/",
      "url": "https://go.waylonwalker.com/htmx-get/",
      "title": "Ease into htmx with htmx-get",
      "content_html": "\u003cp\u003eI recently attended\n\u003ca href=\"https://2022.pythonwebconf.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/2022.pythonwebconf.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/2022.pythonwebconf.com.ico\" class=\"has-avatar  has-avatar-before\"\u003epython web conf 2022\u003c/a\u003e\nand after seeing some incredible presentations on it I am excited to\ngive \u003ca href=\"https://htmx.org/\"\u003ehtmx\u003c/a\u003e a try.\u003c/p\u003e\n\u003ch2 id=\"the-base-page\"\u003eThe base page \u003ca href=\"#the-base-page\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eStart with some \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 boilerplate, pop in a script tag to add the\n\u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e.org script, and a button that says click me.  I added just a tish\nof style so that it does not sear your delicate developer your eyes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u0026lt;!DOCTYPE html\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e \u003cspan class=\"na\"\u003elang\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;en\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003echarset\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;UTF-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003emeta\u003c/span\u003e \u003cspan class=\"na\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;viewport\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003econtent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;width=device-width, initial-scale=1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003ebackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#1f2022\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#eefbfe\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003efont-size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e64\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"k\"\u003efont-size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e64\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003ebody\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"k\"\u003eheight\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"kt\"\u003evh\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ewidth\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e\u003cspan class=\"kt\"\u003evw\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edisplay\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eflex\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ejustify-content\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003ecenter\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ealign-items\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"kc\"\u003ecenter\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c\"\u003e\u0026lt;!-- Load from unpkg --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://unpkg.com/htmx.org@1.7.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c\"\u003e\u0026lt;!-- have a button POST a click via AJAX --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-get\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/partial\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ehx-swap\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;outerHTML\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Click Me\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSave this as \u003ccode\u003eindex.html\u003c/code\u003e and fire up a webserver and you will be\npresented with this big beefcake of a button.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/htmx-get-til-click-me.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/htmx-get-til-click-me.png\" alt=\"big beefcake of a button\"/ data-glightbox=\"description: big beefcake of a button\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIf you don’t have a development server preference I reccomend opening\nthe terminal and running \u003ccode\u003epython -m http.server 8000\u003c/code\u003e then opening your\nbrowser to \u003ccode\u003elocalhost:8000\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"the-partial\"\u003eThe Partial \u003ca href=\"#the-partial\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow the page has a button that is ready to replace itself, notice the\n\u003ccode\u003ehx-swap=\u0026#34;outerHTML\u0026#34;\u0026gt;\u003c/code\u003e, with the contents of /partial. To create a\nstatic api of sorts we can simply host a partial page in a file at\n\u003ccode\u003e/partial/index.html\u003c/code\u003e with the following contents.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehello\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/htmx-get-til-hello.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/htmx-get-til-hello.png\" alt=\"the final results\"/ data-glightbox=\"description: the final results\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cscript src=\"https://unpkg.com/htmx.org@1.7.0\"\u003e\u003c/script\u003e\n\u003ch2 id=\"tree\"\u003eTree \u003ca href=\"#tree\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo make it a bit clearer here is what the file tree looks like after\nsetting this up.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e~/git/htmx  v3.9.7 (git)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── clicked\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── index.html\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── index.html\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"demo\"\u003eDemo \u003ca href=\"#demo\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI added htmx to this page and setup a partial below, check out this\neaster egg.\u003c/p\u003e\n\u003cbutton hx-get=\"./partial\" hx-swap=\"outerHTML\"\u003e\n    Click Me\n\u003c/button\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://2022.pythonwebconf.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/2022.pythonwebconf.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/2022.pythonwebconf.com.ico\" class=\"has-avatar  has-avatar-before\"\u003epython web conf 2022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://htmx.org/\"\u003ehtmx\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://images.waylonwalker.com/htmx-get-til-click-me.png\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/images.waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/images.waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ebig beefcake of a button\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://images.waylonwalker.com/htmx-get-til-hello.png\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/images.waylonwalker.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/images.waylonwalker.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ethe final results\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nI recently attended\n[python web conf 2022](https://2022.pythonwebconf.com/)\nand after seeing some incredible presentations on it I am excited to\ngive [htmx](https://htmx.org/) a try.\n\n## The base page\n\nStart with some html boilerplate, pop in a script tag to add the\nhtmx.org script, and a button that says click me.  I added just a tish\nof style so that it does not sear your delicate developer your eyes.\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n  \u003chead\u003e\n    \u003ctitle\u003e\u003c/title\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n    \u003cstyle\u003e\n      html  { background: #1f2022; color: #eefbfe; font-size: 64px; }\n      button {font-size: 64px;}\n      body { height: 100vh; width: 100vw; display: flex; justify-content: center; align-items:center; }\n    \u003c/style\u003e\n    \u003c!-- Load from unpkg --\u003e\n    \u003cscript src=\"https://unpkg.com/htmx.org@1.7.0\"\u003e\u003c/script\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n  \u003c!-- have a button POST a click via AJAX --\u003e\n  \u003cbutton hx-get=\"/partial\" hx-swap=\"outerHTML\"\u003e\n    Click Me\n  \u003c/button\u003e\n\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\nSave this as `index.html` and fire up a webserver and you will be\npresented with this big beefcake of a button.\n\n![big beefcake of a button](https://images.waylonwalker.com/htmx-get-til-click-me.png)\n\nIf you don't have a development server preference I reccomend opening\nthe terminal and running `python -m http.server 8000` then opening your\nbrowser to `localhost:8000`\n\n## The Partial\n\nNow the page has a button that is ready to replace itself, notice the\n`hx-swap=\"outerHTML\"\u003e`, with the contents of /partial. To create a\nstatic api of sorts we can simply host a partial page in a file at\n`/partial/index.html` with the following contents.\n\n```html\n\u003cp\u003e\nhello\n\u003c/p\u003e\n```\n\n![the final results](https://images.waylonwalker.com/htmx-get-til-hello.png)\n\n\u003cscript src=\"https://unpkg.com/htmx.org@1.7.0\"\u003e\u003c/script\u003e\n\n## Tree\n\nTo make it a bit clearer here is what the file tree looks like after\nsetting this up.\n\n```txt\n~/git/htmx  v3.9.7 (git)\n❯ tree\n.\n├── clicked\n│   └── index.html\n└── index.html\n```\n\n## Demo\n\nI added htmx to this page and setup a partial below, check out this\neaster egg.\n\n\u003cbutton hx-get=\"./partial\" hx-swap=\"outerHTML\"\u003e\n    Click Me\n\u003c/button\u003e\n\n\n## Links\n\n* [python web conf 2022](https://2022.pythonwebconf.com/)\n* [htmx](https://htmx.org/)\n* [big beefcake of a button](https://images.waylonwalker.com/htmx-get-til-click-me.png)\n* [the final results](https://images.waylonwalker.com/htmx-get-til-hello.png)\n",
      "summary": "I recently attended python web conf 2022 and after seeing some incredible presentations on it I am excited to give htmx a try.",
      "date_published": "2022-03-25T00:49:23Z",
      "date_modified": "2022-03-25T00:49:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "webdev",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lookatme-styles/",
      "url": "https://go.waylonwalker.com/lookatme-styles/",
      "title": "Style Lookatme Slides a bit more Personal",
      "content_html": "\u003cp\u003eI recently gave a talk at python web conf 2022, and one of the things I did\nwhen I should have been working on my presentation was workig on how my\npresentation looked… classic procrastination technique.\u003c/p\u003e\n\u003ch2 id=\"slide-one\"\u003eSlide One \u003ca href=\"#slide-one\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLets use this section to show what it \u003cem\u003elooks\u003c/em\u003e like as I change \u003cstrong\u003emy\u003c/strong\u003e styles.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emarkata\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eMarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003e☝ This is how my \u003cstrong\u003ewebsite\u003c/strong\u003e is built\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cul\u003e\n\u003cli\u003ewrite markdown\u003c/li\u003e\n\u003cli\u003ebuild site\u003c/li\u003e\n\u003cli\u003epublish\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"default\"\u003edefault \u003ca href=\"#default\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is what the above slide looks like in lookatme.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/lookatme-styles-default.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/lookatme-styles-default.png\" alt=\"default styles\"/ data-glightbox=\"description: default styles\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"set-focus-to-the-most-important-element\"\u003eSet focus to the most important element \u003ca href=\"#set-focus-to-the-most-important-element\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe way I write my slides I want the most prominant element to be the slides\ntitle, not the presentation title.  The slides title is generally the point I\nam trying to make, I will leave some supporting information if I want, but\nsometimes, I \u003cem\u003ejust\u003c/em\u003e have a title.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003estyles\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#e1af66\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eheadings\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#39;1\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#ff66c4,bold,italics\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003eprefix\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39; ⇁ \u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003esuffix\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39; ↽ \u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/lookatme-styles-focus-to-slide-title.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/lookatme-styles-focus-to-slide-title.png\" alt=\"set the focus on the slide title styles\"/ data-glightbox=\"description: set the focus on the slide title styles\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eby default he prefix/suffix was a full block that just went transparant into\nthe slide.  I thought the harpoons were fun and went with them on a whim\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"the-box-characters-bother-me\"\u003eThe box characters bother me \u003ca href=\"#the-box-characters-bother-me\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe box characters are fine really, but it really bothers me that they are not\nconneted.  The author is probably doing this because it looks ok on most\nsystems, and many terminals dont have their fonts right and wont align anyways.\nI am not sure if I ever had a windows terminal other than their new Terminal\nthat properly connected box characters.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003equote\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eside\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;│\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#aaa\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003etop_corner\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;╭\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebottom_corner\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;╰\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"add-author\"\u003eAdd Author \u003ca href=\"#add-author\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdding author to the root of the frontmatter of the document will add it to the bottom left of the slides.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;@_waylonwalker\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/lookatme-styles-add-author.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/lookatme-styles-add-author.png\" alt=\"lookatme slides with author defined\"/ data-glightbox=\"description: lookatme slides with author defined\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"style-the-author\"\u003eStyle the author \u003ca href=\"#style-the-author\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWe can style the foreground and background of this text by adding something\nlike this to the styles section of the frontmatter.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#368ce2\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"the-rest-of-the-footer\"\u003eThe rest of the footer \u003ca href=\"#the-rest-of-the-footer\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhile we are at it, lets style the rest of the footer to my own theme.  Let’s pop this into the style and see what it looks like.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#368ce2\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eslides\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#368ce2\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/lookatme-styles-add-author-styles.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/lookatme-styles-add-author-styles.png\" alt=\"lookatme slides with author styled\"/ data-glightbox=\"description: lookatme slides with author styled\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"reduce-the-padding\"\u003ereduce the padding \u003ca href=\"#reduce-the-padding\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen I am presenting I am punched in as big as I can go, and which makes\nthe padding massive.  I want as much as the screen real estate devoted to\nmaking big readable text as I can.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebottom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eleft\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eright\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etop\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/lookatme-styles-no-padding.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/lookatme-styles-no-padding.png\" alt=\"lookatme slides with no more padding\"/ data-glightbox=\"description: lookatme slides with no more padding\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"final-results\"\u003efinal results \u003ca href=\"#final-results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is what the final frontmatter looks like to fully style my talk.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"ld\"\u003e2022-03-24\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etemplateKey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003etil\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eStyle Lookatme Slides a bit more Personal\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003epython\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003ecli\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003epython\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;@_waylonwalker\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003estyles\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebottom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eleft\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eright\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003etop\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#e1af66\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#368ce2\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eslides\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#368ce2\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eheadings\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026#39;1\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#ff66c4,bold,italics\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003eprefix\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39; ⇁ \u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003esuffix\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39; ↽ \u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003equote\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eside\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;│\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003estyle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#aaa\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003etop_corner\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;╭\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebottom_corner\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;╰\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ebg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edefault\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003efg\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;#368ce2\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI recently gave a talk at python web conf 2022, and one of the things I did\nwhen I should have been working on my presentation was workig on how my\npresentation looked... classic procrastination technique.\n\n## Slide One\n\nLets use this section to show what it _looks_ like as I change **my** styles.\n\n\n``` python\nfrom markata import Markata\nMarkata()\nmarkata.run()\n```\n\n\u003e ☝ This is how my **website** is built\n\n* write markdown\n* build site\n* publish\n\n## default\n\nThis is what the above slide looks like in lookatme.\n\n![default styles](https://images.waylonwalker.com/lookatme-styles-default.png)\n\n## Set focus to the most important element\n\nThe way I write my slides I want the most prominant element to be the slides\ntitle, not the presentation title.  The slides title is generally the point I\nam trying to make, I will leave some supporting information if I want, but\nsometimes, I _just_ have a title.\n\n``` yaml\nstyles:\n    title:\n        bg: default\n        fg: '#e1af66'\n    headings:\n        '1':\n            bg: default\n            fg: '#ff66c4,bold,italics'\n            prefix: ' ⇁ '\n            suffix: ' ↽ '\n```\n\n![set the focus on the slide title styles](https://images.waylonwalker.com/lookatme-styles-focus-to-slide-title.png)\n\n\n\u003e by default he prefix/suffix was a full block that just went transparant into\n\u003e the slide.  I thought the harpoons were fun and went with them on a whim\n\n## The box characters bother me\n\nThe box characters are fine really, but it really bothers me that they are not\nconneted.  The author is probably doing this because it looks ok on most\nsystems, and many terminals dont have their fonts right and wont align anyways.\nI am not sure if I ever had a windows terminal other than their new Terminal\nthat properly connected box characters.\n\n```yaml\n    quote:\n        side: '│'\n        style:\n            bg: default\n            fg: '#aaa'\n        top_corner: '╭'\n        bottom_corner: '╰'\n````\n\n## Add Author\n\nAdding author to the root of the frontmatter of the document will add it to the bottom left of the slides.\n\n```yaml\nauthor: '@_waylonwalker'\n```\n\n![lookatme slides with author defined](https://images.waylonwalker.com/lookatme-styles-add-author.png)\n\n## Style the author\n\nWe can style the foreground and background of this text by adding something\nlike this to the styles section of the frontmatter.\n\n```yaml\nauthor:\n    bg: default\n    fg: '#368ce2'\n```\n\n## The rest of the footer\n\nWhile we are at it, lets style the rest of the footer to my own theme.  Let's pop this into the style and see what it looks like.\n\n```yaml\ndate:\n    bg: default\n    fg: '#368ce2'\nslides:\n    bg: default\n    fg: '#368ce2'\n```\n\n![lookatme slides with author styled](https://images.waylonwalker.com/lookatme-styles-add-author-styles.png)\n\n## reduce the padding\n\nWhen I am presenting I am punched in as big as I can go, and which makes\nthe padding massive.  I want as much as the screen real estate devoted to\nmaking big readable text as I can.\n\n```yaml\npadding:\n    bottom: 0\n    left: 0\n    right: 0\n    top: 0\n```\n\n![lookatme slides with no more padding](https://images.waylonwalker.com/lookatme-styles-no-padding.png)\n\n\n## final results\n\nHere is what the final frontmatter looks like to fully style my talk.\n\n```yaml\n---\ndate: 2022-03-24\ntemplateKey: til\ntitle: Style Lookatme Slides a bit more Personal\ntags:\n  - python\n  - cli\n  - python\nauthor: '@_waylonwalker'\nstyles:\n    padding:\n        bottom: 0\n        left: 0\n        right: 0\n        top: 0\n    title:\n        bg: default\n        fg: '#e1af66'\n    date:\n        bg: default\n        fg: '#368ce2'\n    slides:\n        bg: default\n        fg: '#368ce2'\n    headings:\n        '1':\n            bg: default\n            fg: '#ff66c4,bold,italics'\n            prefix: ' ⇁ '\n            suffix: ' ↽ '\n    quote:\n        side: '│'\n        style:\n            bg: default\n            fg: '#aaa'\n        top_corner: '╭'\n        bottom_corner: '╰'\n    author:\n        bg: default\n        fg: '#368ce2'\n---\n```\n",
      "summary": "I recently gave a talk at python web conf 2022, and one of the things I did when I should have been working on my presentation was workig on how my...",
      "date_published": "2022-03-24T00:00:00Z",
      "date_modified": "2022-03-24T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-frontmatter/",
      "url": "https://go.waylonwalker.com/python-frontmatter/",
      "title": "How I load Markdown in Python",
      "content_html": "\u003cp\u003eI use a package\n\u003ca href=\"https://github.com/eyeseast/python-frontmatter\" 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\"\u003eeyeseast/python-frontmatter\u003c/a\u003e{.hoverlink}\nto load files with frontmatter in them.  Its a handy package that allows you to\nload files with structured frontmatter (yaml, json, or toml).\u003c/p\u003e\n\u003ch2 id=\"install\"\u003eInstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt’s on pypi, so you can install it into your \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e with pip.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m pip install python-frontmatter\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"-whats-frontmatter\"\u003e🙋 What’s Frontmatter \u003ca href=\"#-whats-frontmatter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFrontmatter is a handy way to add metadata to your plain text files.  It’s\nquite common to have yaml frontmatter in markdown.  All of my blog posts have\nyaml frontmatter to give the post metadata such as post date, tags, title, and\ntemplate.  dev.to is a popular developer blogging platform that also builds all\nof its posts with markdown and yaml frontmatter.\u003c/p\u003e\n\u003ch2 id=\"lets-see-an-example\"\u003eLet’s see an example \u003ca href=\"#lets-see-an-example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is the exact frontmatter for this post you are reading on my site.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate: 2022-03-24 03:18:48.631729\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etemplateKey: til\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etitle: How I load Markdown in Python\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etags:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003e-\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003e-\u003c/span\u003e python\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThis is where the markdown content for the post goes.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"so-its-yaml\"\u003eSo it’s yaml \u003ca href=\"#so-its-yaml\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eyaml is the most commmon, but\n\u003ca href=\"https://pypi.org/project/python-frontmatter/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003epython-frontmatter\u003c/a\u003e{.hoverlink}\nalso supports\n\u003ca href=\"https://python-frontmatter.readthedocs.io/en/latest/handlers.html?highlight=toml#module-frontmatter.default_handlers\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/python-frontmatter.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/python-frontmatter.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003eHandlers\u003c/a\u003e{.hoverlink}\nfor toml and json.\u003c/p\u003e\n\u003cp\u003eIf you want a good set of examples of yaml\n\u003ca href=\"https://learnxinyminutes.com/docs/yaml/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/learnxinyminutes.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/learnxinyminutes.com.ico\" class=\"has-avatar  has-avatar-before\"\u003elearnxinyminutes\u003c/a\u003e{.hoverlink} has a fantastic set\nof examples in one page.\u003c/p\u003e\n\u003ch2 id=\"how-to-load-yaml-frontmatter-in-python\"\u003eHow to load yaml frontmatter in python \u003ca href=\"#how-to-load-yaml-frontmatter-in-python\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is how I would load this post into python using\n\u003ca href=\"https://pypi.org/project/python-frontmatter/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003epython-frontmatter\u003c/a\u003e{.hoverlink}.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003efrontmatter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pages/til/python-frontmatter.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe can use \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e{.hoverlink} to inspect the Post\nobject to see what all it contains.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003einspect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pages/til/python-frontmatter.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e╭──────────────────────────────────────────────────────────\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"err\"\u003e\u0026#39;\u003c/span\u003e\u003cspan class=\"nc\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026gt; ───────────────────────────────────────────────────────────╮\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"n\"\u003eA\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"n\"\u003econtains\u003c/span\u003e \u003cspan class=\"n\"\u003econtent\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003emetadata\u003c/span\u003e \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eFront\u003c/span\u003e \u003cspan class=\"n\"\u003eMatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e \u003cspan class=\"n\"\u003eThis\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003ewhat\u003c/span\u003e \u003cspan class=\"n\"\u003egets\u003c/span\u003e                                                                       \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"n\"\u003ereturned\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003eloads\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eloads\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e                                                        \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"n\"\u003ePassing\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003edump\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edump\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003edumps\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edumps\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e                                                      \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"n\"\u003ewill\u003c/span\u003e \u003cspan class=\"n\"\u003eturn\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e \u003cspan class=\"n\"\u003eback\u003c/span\u003e \u003cspan class=\"n\"\u003einto\u003c/span\u003e \u003cspan class=\"n\"\u003etext\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e                                                                                                                    \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e                                                                                                                                                 \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"err\"\u003e╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u003c/span\u003e \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePost\u003c/span\u003e \u003cspan class=\"nb\"\u003eobject\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"mh\"\u003e0x7f03c4c23ca0\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                                                                                                 \u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"err\"\u003e╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u003c/span\u003e \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e                                                                                                                                                 \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e  \u003cspan class=\"n\"\u003econtent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;I use a package\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e[eyeseast/python-frontmatter](https://github.com/eyeseast/python-frontmatter)\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s2\"\u003eto load files with frontmatter in   │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003ethem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eIts\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ehandy\u003c/span\u003e \u003cspan class=\"n\"\u003epackage\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"n\"\u003eallows\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e\\\u003cspan class=\"n\"\u003enload\u003c/span\u003e \u003cspan class=\"n\"\u003efiles\u003c/span\u003e \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003estructured\u003c/span\u003e \u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eyaml\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ejson\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003etoml\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"c1\"\u003e## Install\\n\\nIt\u0026#39;s   │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003epypi\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eso\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003ecan\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e \u003cspan class=\"n\"\u003einto\u003c/span\u003e \u003cspan class=\"n\"\u003eyour\u003c/span\u003e \u003cspan class=\"n\"\u003evirtual\u003c/span\u003e \u003cspan class=\"n\"\u003eenvironment\u003c/span\u003e \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003epip\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"err\"\u003e```\u003c/span\u003e\u003cspan class=\"n\"\u003ebash\u003c/span\u003e\\\u003cspan class=\"n\"\u003enpython\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e \u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e                             \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"err\"\u003e```\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"c1\"\u003e## 🙋 What\u0026#39;s Frontmatter\\n\\nFrontmatter is a handy way to add metadata to your plain text files.          │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003eIt\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;s\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s1\"\u003equite common to have yaml frontmatter in markdown.  All of my blog posts have\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s1\"\u003eyaml frontmatter to give the post metadata such │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e\\\u003cspan class=\"n\"\u003entemplate\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003epopular\u003c/span\u003e \u003cspan class=\"n\"\u003edeveloper\u003c/span\u003e \u003cspan class=\"n\"\u003eblogging\u003c/span\u003e \u003cspan class=\"n\"\u003eplatform\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"n\"\u003ealso\u003c/span\u003e \u003cspan class=\"n\"\u003ebuilds\u003c/span\u003e \u003cspan class=\"nb\"\u003eall\u003c/span\u003e\\\u003cspan class=\"n\"\u003enof\u003c/span\u003e \u003cspan class=\"n\"\u003eits\u003c/span\u003e \u003cspan class=\"n\"\u003eposts\u003c/span\u003e \u003cspan class=\"k\"\u003ewith\u003c/span\u003e   \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eyaml\u003c/span\u003e \u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"c1\"\u003e## Let\u0026#39;s see an example\\n\\nHere is the exact frontmatter for this post you are reading on my       │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003esite\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"err\"\u003e```\u003c/span\u003e\u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"o\"\u003e---\u003c/span\u003e\\\u003cspan class=\"n\"\u003endate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2022\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e03\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e24\u003c/span\u003e \u003cspan class=\"mi\"\u003e03\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e18\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mf\"\u003e48.631729\u003c/span\u003e\\\u003cspan class=\"n\"\u003entemplateKey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003etil\u003c/span\u003e\\\u003cspan class=\"n\"\u003entitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eHow\u003c/span\u003e \u003cspan class=\"n\"\u003eI\u003c/span\u003e \u003cspan class=\"n\"\u003eload\u003c/span\u003e \u003cspan class=\"n\"\u003eMarkdown\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ePython\u003c/span\u003e\\\u003cspan class=\"n\"\u003entags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e  \u003cspan class=\"o\"\u003e-\u003c/span\u003e      \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003elinux\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e  \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003epython\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"o\"\u003e---\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003enThis\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003ewhere\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e \u003cspan class=\"n\"\u003econtent\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"n\"\u003egoes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"err\"\u003e```\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"c1\"\u003e## So it\u0026#39;s yaml\\n\\nyaml is the most        │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003ecommmon\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebut\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eeyeseast\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"p\"\u003e](\u003c/span\u003e\u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003egithub\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eeyeseast\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\\\u003cspan class=\"n\"\u003enalso\u003c/span\u003e                                    \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003esupports\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eHandlers\u003c/span\u003e\u003cspan class=\"p\"\u003e](\u003c/span\u003e\u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereadthedocs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eio\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003een\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elatest\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ehandlers\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e\u003cspan class=\"n\"\u003ehighlight\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003etoml\u003c/span\u003e\u003cspan class=\"c1\"\u003e#module-frontmatter.default_ha… │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003etoml\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003ejson\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003enIf\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003ewant\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003egood\u003c/span\u003e \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"n\"\u003eexamples\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"n\"\u003eyaml\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003elearnxinyminutes\u003c/span\u003e\u003cspan class=\"p\"\u003e](\u003c/span\u003e\u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003elearnxinyminutes\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edocs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eyaml\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003ehas\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e      \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"n\"\u003efantastic\u003c/span\u003e \u003cspan class=\"nb\"\u003eset\u003c/span\u003e\\\u003cspan class=\"n\"\u003enof\u003c/span\u003e \u003cspan class=\"n\"\u003eexamples\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eone\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\\\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"c1\"\u003e## How to load yaml frontmatter in python\u0026#34;                                                │\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e  \u003cspan class=\"n\"\u003ehandler\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_handlers\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eYAMLHandler\u003c/span\u003e \u003cspan class=\"nb\"\u003eobject\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"mh\"\u003e0x7f03bffbd910\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                                                                  \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e \u003cspan class=\"n\"\u003emetadata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e                                                                                                                                    \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e                \u003cspan class=\"s1\"\u003e\u0026#39;date\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edatetime\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e2022\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e24\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e18\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e48\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e631729\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e                                                                       \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e                \u003cspan class=\"s1\"\u003e\u0026#39;templateKey\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;til\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e                                                                                                            \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e                \u003cspan class=\"s1\"\u003e\u0026#39;title\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;How I load Markdown in Python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e                                                                                        \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e                \u003cspan class=\"s1\"\u003e\u0026#39;tags\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;linux\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;python\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e                                                                                            \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e│\u003c/span\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e                                                                                                                                    \u003cspan class=\"err\"\u003e│\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"getting-metadata\"\u003eGetting Metadata \u003ca href=\"#getting-metadata\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can get items from the posts metadata just as you would from a dict.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pages/til/python-frontmatter.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;date\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# datetime.datetime(2022, 3, 24, 3, 18, 48, 631729)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;date\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# datetime.datetime(2022, 3, 24, 3, 18, 48, 631729)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/python-dict-get/\" class=\"wikilink\" data-title=\"python dict get\" data-description=\"For an embarassingly long time, til today, I have been wrapping my dict gets with key errors in python. I\u0026#39;m sure I\u0026#39;ve read it in code a bunch of times, but...\" data-date=\"2022-02-03\" data-preview=\"For an embarassingly long time, til today, I have been wrapping my dict gets with key errors in python. I\u0026#39;m sure I\u0026#39;ve read it in code a bunch of times, but...\"\u003epython dict get\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI have recently become fond of the \u003ccode\u003e.get\u003c/code\u003e method to give it an easy default value.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"content-is-content\"\u003eContent is content \u003ca href=\"#content-is-content\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe content of the document is stored under \u003ccode\u003e.content\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/til/python-dict-get/\" 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\"\u003epython dict get\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eyeseast/python-frontmatter\" 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\"\u003eeyeseast/python-frontmatter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://pypi.org/project/python-frontmatter/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003epython-frontmatter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://python-frontmatter.readthedocs.io/en/latest/handlers.html?highlight=toml#module-frontmatter.default_handlers\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/python-frontmatter.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/python-frontmatter.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003epython-frontmatter Handlers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://learnxinyminutes.com/docs/yaml/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/learnxinyminutes.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/learnxinyminutes.com.ico\" class=\"has-avatar  has-avatar-before\"\u003elearnxinyminutes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://pypi.org/project/python-frontmatter/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pypi.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pypi.org.ico\" class=\"has-avatar  has-avatar-before\"\u003epython-frontmatter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nI use a package\n[eyeseast/python-frontmatter](https://github.com/eyeseast/python-frontmatter){.hoverlink}\nto load files with frontmatter in them.  Its a handy package that allows you to\nload files with structured frontmatter (yaml, json, or toml).\n\n## Install\n\nIt's on pypi, so you can install it into your virtual environment with pip.\n\n```bash\npython -m pip install python-frontmatter\n```\n\n## 🙋 What's Frontmatter\n\nFrontmatter is a handy way to add metadata to your plain text files.  It's\nquite common to have yaml frontmatter in markdown.  All of my blog posts have\nyaml frontmatter to give the post metadata such as post date, tags, title, and\ntemplate.  dev.to is a popular developer blogging platform that also builds all\nof its posts with markdown and yaml frontmatter.\n\n## Let's see an example\n\nHere is the exact frontmatter for this post you are reading on my site.\n\n```markdown\n---\ndate: 2022-03-24 03:18:48.631729\ntemplateKey: til\ntitle: How I load Markdown in Python\ntags:\n  - linux\n  - python\n\n---\n\nThis is where the markdown content for the post goes.\n```\n\n## So it's yaml\n\nyaml is the most commmon, but\n[python-frontmatter](https://pypi.org/project/python-frontmatter/){.hoverlink}\nalso supports\n[Handlers](https://python-frontmatter.readthedocs.io/en/latest/handlers.html?highlight=toml#module-frontmatter.default_handlers){.hoverlink}\nfor toml and json.\n\nIf you want a good set of examples of yaml\n[learnxinyminutes](https://learnxinyminutes.com/docs/yaml/){.hoverlink} has a fantastic set\nof examples in one page.\n\n## How to load yaml frontmatter in python\n\nHere is how I would load this post into python using\n[python-frontmatter](https://pypi.org/project/python-frontmatter/){.hoverlink}.\n\n```python\nimport frontmatter\ninspect(frontmatter.load(\"pages/til/python-frontmatter.md\"))\n```\n\nWe can use [rich](https://github.com/Textualize/rich){.hoverlink} to inspect the Post\nobject to see what all it contains.\n\n```python\n❯ inspect(frontmatter.load(\"pages/til/python-frontmatter.md\"))\n╭────────────────────────────────────────────────────────── \u003cclass 'frontmatter.Post'\u003e ───────────────────────────────────────────────────────────╮\n│ A post contains content and metadata from Front Matter. This is what gets                                                                       │\n│ returned by :py:func:`load \u003cfrontmatter.load\u003e` and :py:func:`loads \u003cfrontmatter.loads\u003e`.                                                        │\n│ Passing this to :py:func:`dump \u003cfrontmatter.dump\u003e` or :py:func:`dumps \u003cfrontmatter.dumps\u003e`                                                      │\n│ will turn it back into text.                                                                                                                    │\n│                                                                                                                                                 │\n│ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │\n│ │ \u003cfrontmatter.Post object at 0x7f03c4c23ca0\u003e                                                                                                 │ │\n│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │\n│                                                                                                                                                 │\n│  content = \"I use a package\\n[eyeseast/python-frontmatter](https://github.com/eyeseast/python-frontmatter)\\nto load files with frontmatter in   │\n│            them.  Its a handy package that allows you to\\nload files with structured frontmatter (yaml, json, or toml).\\n\\n## Install\\n\\nIt's   │\n│            on pypi, so you can install it into your virtual environment with pip.\\n\\n```bash\\npython -m pip install                             │\n│            python-frontmatter\\n```\\n\\n## 🙋 What's Frontmatter\\n\\nFrontmatter is a handy way to add metadata to your plain text files.          │\n│            It's\\nquite common to have yaml frontmatter in markdown.  All of my blog posts have\\nyaml frontmatter to give the post metadata such │\n│            as post date, tags, title, and\\ntemplate.  dev.to is a popular developer blogging platform that also builds all\\nof its posts with   │\n│            markdown and yaml frontmatter.\\n\\n## Let's see an example\\n\\nHere is the exact frontmatter for this post you are reading on my       │\n│            site.\\n\\n```markdown\\n---\\ndate: 2022-03-24 03:18:48.631729\\ntemplateKey: til\\ntitle: How I load Markdown in Python\\ntags:\\n  -      │\n│            linux\\n  - python\\n\\n---\\n\\nThis is where the markdown content for the post goes.\\n```\\n\\n## So it's yaml\\n\\nyaml is the most        │\n│            commmon, but\\n[eyeseast/python-frontmatter](https://github.com/eyeseast/python-frontmatter)\\nalso                                    │\n│            supports\\n[Handlers](https://python-frontmatter.readthedocs.io/en/latest/handlers.html?highlight=toml#module-frontmatter.default_ha… │\n│            toml and json.\\n\\nIf you want a good set of examples of yaml\\n[learnxinyminutes](https://learnxinyminutes.com/docs/yaml/) has a      │\n│            fantastic set\\nof examples in one page.\\n\\n## How to load yaml frontmatter in python\"                                                │\n│  handler = \u003cfrontmatter.default_handlers.YAMLHandler object at 0x7f03bffbd910\u003e                                                                  │\n│ metadata = {                                                                                                                                    │\n│                'date': datetime.datetime(2022, 3, 24, 3, 18, 48, 631729),                                                                       │\n│                'templateKey': 'til',                                                                                                            │\n│                'title': 'How I load Markdown in Python',                                                                                        │\n│                'tags': ['linux', 'python', 'python']                                                                                            │\n│            }                                                                                                                                    │\n╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n```\n\n## Getting Metadata\n\nYou can get items from the posts metadata just as you would from a dict.\n\n```python\npost = frontmatter.load(\"pages/til/python-frontmatter.md\")\npost['date']\n# datetime.datetime(2022, 3, 24, 3, 18, 48, 631729)\n\npost.get('date')\n# datetime.datetime(2022, 3, 24, 3, 18, 48, 631729)\n```\n\n\u003ca href=\"/python-dict-get/\" class=\"wikilink\" data-title=\"python dict get\" data-description=\"For an embarassingly long time, til today, I have been wrapping my dict gets with key errors in python. I\u0026#39;m sure I\u0026#39;ve read it in code a bunch of times, but...\" data-date=\"2022-02-03\"\u003epython dict get\u003c/a\u003e\n\n\u003e I have recently become fond of the `.get` method to give it an easy default value.\n\n## Content is content\n\nThe content of the document is stored under `.content`\n\n```python\npost.content\n```\n\n## Links\n\n* [python dict get](https://waylonwalker.com/til/python-dict-get/)\n* [eyeseast/python-frontmatter](https://github.com/eyeseast/python-frontmatter)\n* [python-frontmatter](https://pypi.org/project/python-frontmatter/)\n* [python-frontmatter Handlers](https://python-frontmatter.readthedocs.io/en/latest/handlers.html?highlight=toml#module-frontmatter.default_handlers)\n* [learnxinyminutes](https://learnxinyminutes.com/docs/yaml/)\n* [python-frontmatter](https://pypi.org/project/python-frontmatter/)\n* [rich](https://github.com/Textualize/rich)\n",
      "summary": "I use a package eyeseast/python-frontmatter to load files with frontmatter in them. Its a handy package that allows you to load files with structured...",
      "date_published": "2022-03-23T03:18:48Z",
      "date_modified": "2022-03-23T03:18:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-markata/",
      "url": "https://go.waylonwalker.com/waylonwalker-markata/",
      "title": "⭐ WaylonWalker markata",
      "content_html": "\u003cp\u003eI like \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’s\u003c/a\u003e project \u003ca href=\"https://github.com/WaylonWalker/markata\" 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\"\u003emarkata\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA plugins all the way down static site generator written in python.  Plugins all the way down means that you can completely change the behavior of how it works by swapping plugins, installing new ones, or creating your own all in python.\u003c/p\u003e\n",
      "content_text": "\nI like [WaylonWalker's](https://github.com/WaylonWalker) project [markata](https://github.com/WaylonWalker/markata).\n\nA plugins all the way down static site generator written in python.  Plugins all the way down means that you can completely change the behavior of how it works by swapping plugins, installing new ones, or creating your own all in python.\n",
      "summary": "I like WaylonWalker's project markata.",
      "date_published": "2022-03-22T14:13:40Z",
      "date_modified": "2022-03-22T14:13:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-pep-584/",
      "url": "https://go.waylonwalker.com/python-pep-584/",
      "title": "Python's Dict Union Operator | Pep 584",
      "content_html": "\u003cp\u003eToday I was watching the python web conf 2022 and saw\n\u003ca href=\"https://twitter.com/davidvujic\"\u003e@davidbujic\u003c/a\u003e use the new Dict Union Operator\nLive on stage during his \u003ca href=\"https://2022.pythonwebconf.com/presentations/functional-python\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/2022.pythonwebconf.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/2022.pythonwebconf.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eFunctional\nProgramming\u003c/a\u003e\ntalk.  This operator was first introduced into python 3.9 with \u003ca href=\"https://peps.python.org/pep-0584/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/peps.python.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/peps.python.org.png\" class=\"has-avatar  has-avatar-before\"\u003epep584\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"merge-dicts\"\u003eMerge Dicts \u003ca href=\"#merge-dicts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ve long updated dicts through the use of unpacking.  Note that the last item\nalways wins.  It makes it pretty easy to make user overrides to default\nconfigurations.  With pep584 landing in python 3.9 we can now leverage the \u003ccode\u003e|\u003c/code\u003e\noperator to achieve the same result.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edefault_config\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;url\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://example.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;assets_dir\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;static\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euser_config\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;url\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# **unpacking goes back much further than 3.9\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003edefault_config\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003euser_config\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# {\u0026#39;url\u0026#39;: \u0026#39;https://waylonwalker.com\u0026#39;, \u0026#39;assets_dir\u0026#39;: \u0026#39;static\u0026#39;}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# the same can be achieved through the new to python 3.9 | operator\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edefault_config\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003euser_config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# {\u0026#39;url\u0026#39;: \u0026#39;https://waylonwalker.com\u0026#39;, \u0026#39;assets_dir\u0026#39;: \u0026#39;static\u0026#39;}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/python-args-kwargs/\" class=\"wikilink\" data-title=\"understanding python \\\\*args and \\\\*\\\\*kwargs\" data-description=\"Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...\" data-date=\"2020-06-10\" data-preview=\"Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...\"\u003eunderstanding python *args and **kwargs\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMore on unpacking in this post.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"update-dicts\"\u003eUpdate Dicts \u003ca href=\"#update-dicts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWith the release there is also a new update syntax \u003ccode\u003e|=\u003c/code\u003e that you can use to\nupdate.  I dont often mutate variables for some reason, so I cant think of a\nbetter example for this from my personal use cases. So I will give a similar\nexample to above, except creating a config, then updating it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# old python \u0026lt;3.9 way\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;url\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://example.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;assets_dir\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;static\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupdate\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;url\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# new python 3.9+ way\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;url\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://example.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;assets_dir\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;static\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e \u003cspan class=\"o\"\u003e|=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;url\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://waylonwalker.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# {\u0026#39;url\u0026#39;: \u0026#39;https://waylonwalker.com\u0026#39;, \u0026#39;assets_dir\u0026#39;: \u0026#39;static\u0026#39;}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"should-you-use-it\"\u003eShould you use it? \u003ca href=\"#should-you-use-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAre you writing libraries/applications that are only going to be ran on 3.9?\nThen ya go for it there is nothing to loose.  If there is any chance someone is\ngoing to run your code on 3.8 or older then just use \u003ccode\u003e**\u003c/code\u003e, or \u003ccode\u003e.update\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"rtfm\"\u003eRTFM \u003ca href=\"#rtfm\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is what comes first to my mind on how to use this new syntax, read\n\u003ca href=\"https://peps.python.org/pep-0584/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/peps.python.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/peps.python.org.png\" class=\"has-avatar  has-avatar-before\"\u003epep584\u003c/a\u003e for all the gritty details on it.\u003c/p\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://twitter.com/davidvujic\"\u003e@davidbujic\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0584/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/peps.python.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/peps.python.org.png\" class=\"has-avatar  has-avatar-before\"\u003epep584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nToday I was watching the python web conf 2022 and saw\n[@davidbujic](https://twitter.com/davidvujic) use the new Dict Union Operator\nLive on stage during his [Functional\nProgramming](https://2022.pythonwebconf.com/presentations/functional-python)\ntalk.  This operator was first introduced into python 3.9 with [pep584](https://peps.python.org/pep-0584/).\n\n## Merge Dicts\n\nI've long updated dicts through the use of unpacking.  Note that the last item\nalways wins.  It makes it pretty easy to make user overrides to default\nconfigurations.  With pep584 landing in python 3.9 we can now leverage the `|`\noperator to achieve the same result.\n\n``` python\ndefault_config = {'url': 'https://example.com', 'assets_dir': 'static' }\nuser_config = {'url': 'https://waylonwalker.com'}\n\n# **unpacking goes back much further than 3.9\n\nconfig = {**default_config, **user_config}\nprint(config)\n# {'url': 'https://waylonwalker.com', 'assets_dir': 'static'}\n\n\n# the same can be achieved through the new to python 3.9 | operator\n\nconfig = default_config | user_config\nprint(config)\n# {'url': 'https://waylonwalker.com', 'assets_dir': 'static'}\n```\n\n\u003ca href=\"/python-args-kwargs/\" class=\"wikilink\" data-title=\"understanding python \\\\*args and \\\\*\\\\*kwargs\" data-description=\"Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...\" data-date=\"2020-06-10\"\u003eunderstanding python \\*args and \\*\\*kwargs\u003c/a\u003e\n\n\u003e More on unpacking in this post.\n\n## Update Dicts\n\nWith the release there is also a new update syntax `|=` that you can use to\nupdate.  I dont often mutate variables for some reason, so I cant think of a\nbetter example for this from my personal use cases. So I will give a similar\nexample to above, except creating a config, then updating it.\n\n``` python\n# old python \u003c3.9 way\nconfig = {'url': 'https://example.com', 'assets_dir': 'static' }\nconfig.update({'url': 'https://waylonwalker.com'})\n\n# new python 3.9+ way\nconfig = {'url': 'https://example.com', 'assets_dir': 'static' }\nconfig |= {'url': 'https://waylonwalker.com'}\n\nprint(config)\n# {'url': 'https://waylonwalker.com', 'assets_dir': 'static'}\n```\n\n## Should you use it?\n\nAre you writing libraries/applications that are only going to be ran on 3.9?\nThen ya go for it there is nothing to loose.  If there is any chance someone is\ngoing to run your code on 3.8 or older then just use `**`, or `.update`.\n\n## RTFM\n\nThis is what comes first to my mind on how to use this new syntax, read\n[pep584](https://peps.python.org/pep-0584/) for all the gritty details on it.\n\n## Links\n\n* [@davidbujic](https://twitter.com/davidvujic)\n* [pep584](https://peps.python.org/pep-0584/)\n",
      "summary": "Today I was watching the python web conf 2022 and saw @davidbujic use the new Dict Union Operator Live on stage during his Functional Programming talk. This...",
      "date_published": "2022-03-22T02:39:53Z",
      "date_modified": "2022-03-22T02:39:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lookatme-slides/",
      "url": "https://go.waylonwalker.com/lookatme-slides/",
      "title": "How I Present Markdown Slides from the Terminal",
      "content_html": "\u003cp\u003eI love the freedom of writing in markdown.  It allows me to write content from\nthe comfort of my editor with very little focus on page style.  It turns out\nthat markdown is also a fantastic tool for creating slides.\u003c/p\u003e\n\u003ch2 id=\"present-from-the-terminal\"\u003ePresent from the terminal \u003ca href=\"#present-from-the-terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI will most often just present right from the terminal using\n\u003ca href=\"https://lookatme.readthedocs.io/en/latest/index.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/lookatme.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/lookatme.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003elookatme\u003c/a\u003e.  Presenting\nfrom the terminal lets me see the results quick right from where I am editing.\nIt also allows me to pop into other terminal applications quickly.\u003c/p\u003e\n\u003ch2 id=\"revealjs\"\u003ereveal.js \u003ca href=\"#revealjs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI sometimes also use reveal.js, but that’s for another post.  It is handy that\nit lives in the browser and is easier to share.\u003c/p\u003e\n\u003ch2 id=\"new-slides\"\u003eNew Slides \u003ca href=\"#new-slides\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI leverage auto slides when I write my slides in markdown.  The largest\nheading, usually an h2 for me, becomes the new slide marker.  Otherwise my\nprocess is not much different, It just becomes a shorter writing style.\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003elookatme is a python library that is available on pypi, you can install it with\nthe pip command.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install lookatme\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSince it’s a command line application it works great with pipx.  This prevents\nthe need to manage virtual environments yourself or ending up with packages\nclashing in your system python environment.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epipx install lookatme\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"from-my-terminal\"\u003eFrom my terminal \u003ca href=\"#from-my-terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elookatme \u003cspan class=\"o\"\u003e{\u003c/span\u003efilepath\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI just run it with pipx.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx run \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e --spec git+https://github.com/waylonwalker/lookatme \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e lookatme \u003cspan class=\"o\"\u003e{\u003c/span\u003efilepath\u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e --live-reload \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e --style gruvbox-dark\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote, I use a custom fork of lookatme.  It’s schema validation did not like\nthe date format of my blog posts, so I have a one line fix built into my\nfork that is pretty specific to me.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"from-neovim\"\u003eFrom Neovim \u003ca href=\"#from-neovim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003emost often what I do\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFrom Neovim I use a plugin I created for sending out commands to tmux called\n\u003ca href=\"https://github.com/WaylonWalker/Telegraph.nvim\" 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\"\u003etelegraph\u003c/a\u003e.  This sends the\nabove command to a new session that I can bounce between quickly.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eleader\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eleader\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003es\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003elua\u003c/span\u003e \u003cspan class=\"nx\"\u003erequire\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;telegraph\u0026#39;\u003c/span\u003e.\u003cspan class=\"nx\"\u003etelegraph\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e{\u003cspan class=\"nx\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pipx run --spec git+https://github.com/waylonwalker/lookatme lookatme {filepath} --live-reload --style gruvbox-dark\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003ehow\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;tmux\u0026#39;\u003c/span\u003e}\u003cspan class=\"p\"\u003e)\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCR\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI love the freedom of writing in markdown.  It allows me to write content from\nthe comfort of my editor with very little focus on page style.  It turns out\nthat markdown is also a fantastic tool for creating slides.\n\n## Present from the terminal\n\nI will most often just present right from the terminal using\n[lookatme](https://lookatme.readthedocs.io/en/latest/index.html).  Presenting\nfrom the terminal lets me see the results quick right from where I am editing.\nIt also allows me to pop into other terminal applications quickly.\n\n## reveal.js\n\nI sometimes also use reveal.js, but that's for another post.  It is handy that\nit lives in the browser and is easier to share.\n\n## New Slides\n\nI leverage auto slides when I write my slides in markdown.  The largest\nheading, usually an h2 for me, becomes the new slide marker.  Otherwise my\nprocess is not much different, It just becomes a shorter writing style.\n\n## Installation\n\nlookatme is a python library that is available on pypi, you can install it with\nthe pip command.\n\n```\npython -m pip install lookatme\n```\n\nSince it's a command line application it works great with pipx.  This prevents\nthe need to manage virtual environments yourself or ending up with packages\nclashing in your system python environment.\n\n```\npipx install lookatme\n```\n\n## From my terminal\n\n``` bash\nlookatme {filepath}\n```\n\nI just run it with pipx.\n\n``` bash\npipx run \\\n --spec git+https://github.com/waylonwalker/lookatme \\\n lookatme {filepath} \\\n --live-reload \\\n --style gruvbox-dark\n```\n\n\u003e Note, I use a custom fork of lookatme.  It's schema validation did not like\n\u003e the date format of my blog posts, so I have a one line fix built into my\n\u003e fork that is pretty specific to me.\n\n## From Neovim\n_most often what I do_\n\nFrom Neovim I use a plugin I created for sending out commands to tmux called\n[telegraph](https://github.com/WaylonWalker/Telegraph.nvim).  This sends the\nabove command to a new session that I can bounce between quickly.\n\n``` vim\nnnoremap \u003cleader\u003e\u003cleader\u003es \u003ccmd\u003elua require'telegraph'.telegraph({cmd='pipx run --spec git+https://github.com/waylonwalker/lookatme lookatme {filepath} --live-reload --style gruvbox-dark', how='tmux'})\u003cCR\u003e\n```\n",
      "summary": "I love the freedom of writing in markdown. It allows me to write content from the comfort of my editor with very little focus on page style. It turns out...",
      "date_published": "2022-03-21T16:13:39Z",
      "date_modified": "2022-03-21T16:13:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "tmux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/eyeseast-python-frontmatter/",
      "url": "https://go.waylonwalker.com/eyeseast-python-frontmatter/",
      "title": "⭐ eyeseast python-frontmatter",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/eyeseast\" 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\"\u003eeyeseast\u003c/a\u003e and their project \u003ca href=\"https://github.com/eyeseast/python-frontmatter\" 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\"\u003epython-frontmatter\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eParse and manage posts with YAML (or other) frontmatter\u003c/p\u003e\n",
      "content_text": "\nCheck out [eyeseast](https://github.com/eyeseast) and their project [python-frontmatter](https://github.com/eyeseast/python-frontmatter).\n\nParse and manage posts with YAML (or other) frontmatter\n",
      "summary": "Check out eyeseast and their project python-frontmatter.",
      "date_published": "2022-03-20T22:20:50Z",
      "date_modified": "2022-03-20T22:20:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pathlib-read-text/",
      "url": "https://go.waylonwalker.com/pathlib-read-text/",
      "title": "How I read Files in Python",
      "content_html": "\u003cp\u003eWhen I need to read contents from a plain text file in python I find the\neasiest way is to just use \u003ccode\u003ePathlib\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;path_to_file\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_text\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nWhen I need to read contents from a plain text file in python I find the\neasiest way is to just use `Pathlib`.\n\n``` python\nfrom pathlib import Path\n\nPath('path_to_file').read_text()\n```\n",
      "summary": "When I need to read contents from a plain text file in python I find the easiest way is to just use .",
      "date_published": "2022-03-20T17:19:00Z",
      "date_modified": "2022-03-20T17:19:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-markdown-links/",
      "url": "https://go.waylonwalker.com/vim-markdown-links/",
      "title": "Automatically Generate a list of Markdown Links in Vim",
      "content_html": "\u003cp\u003eLet’s make a vim command to automatically collect all the links in these\nposts at the end of each article.  Regex confuses the heck out of me…\nI don’t have my regex liscense, but\nregex can be so darn powerful especially in an editor.\u003c/p\u003e\n\u003ch2 id=\"step-one\"\u003eStep one \u003ca href=\"#step-one\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBefore you run someone’s regex from the internet that you don’t fully\nunderstand, check your \u003ccode\u003egit status\u003c/code\u003e and make sure you are all clear with\n\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e before you wreck something\u003c/p\u003e\n\u003ch2 id=\"inspiration\"\u003eInspiration \u003ca href=\"#inspiration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSomething that I have always appreciated form\n\u003ca href=\"https://nickjanetakis.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/nickjanetakis.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/nickjanetakis.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eNick Janetakis\u003c/a\u003e is his links section.  I\noften try to gather up the links at the end of my posts, but often end\nup not doing it or forgetting.\u003c/p\u003e\n\u003ch2 id=\"making-a-links-section\"\u003eMaking a Links section \u003ca href=\"#making-a-links-section\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSearchng through the internet I was able to find an article from\nVitaly Parnas called\n\u003ca href=\"https://vitalyparnas.com/guides/vim-ref-links/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/vitalyparnas.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/vitalyparnas.com.ico\" class=\"has-avatar  has-avatar-before\"\u003evim ref links\u003c/a\u003e that did\nalmost exactly what I needed, except it was more complicated and made\nthem into ref liks.\u003c/p\u003e\n\u003cp\u003eHere is my interpretation of the code I took from Vitaly’s post.  It\nmakes a Links section like the one at the bottom of this post.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"nx\"\u003eMdLinks\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    $\u003cspan class=\"nx\"\u003enorm\u003c/span\u003e \u003cspan class=\"nx\"\u003eo\u003c/span\u003e## \u003cspan class=\"nx\"\u003eLinks\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    $\u003cspan class=\"nx\"\u003enorm\u003c/span\u003e \u003cspan class=\"nx\"\u003eo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003eg\u003c/span\u003e\u003cspan class=\"sr\"\u003e/\\[[^\\]]\\+\\]([^)]\\+)/\u003c/span\u003e\u003cspan class=\"nx\"\u003et\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003esilent\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u0026#39;^\u003cspan class=\"p\"\u003e,\u003c/span\u003e$\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/\\v[^\\[]*(\\[[^\\]]+\\])\\(([^)]+)\\)[^\\[]*/\u003c/span\u003e* \\\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\\\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e/\u003cspan class=\"nx\"\u003eg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003enohl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eendfunction\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecommand\u003c/span\u003e\u003cspan class=\"p\"\u003e!\u003c/span\u003e \u003cspan class=\"nx\"\u003eMdLinks\u003c/span\u003e \u003cspan class=\"nx\"\u003ecall\u003c/span\u003e \u003cspan class=\"nx\"\u003eMdLinks\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSo far it is working for me and saving me a few seconds off each post I\nmake.\u003c/p\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://nickjanetakis.com/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/nickjanetakis.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/nickjanetakis.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eNick Janetakis\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://vitalyparnas.com/guides/vim-ref-links/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/vitalyparnas.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/vitalyparnas.com.ico\" class=\"has-avatar  has-avatar-before\"\u003evim ref links\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nLet's make a vim command to automatically collect all the links in these\nposts at the end of each article.  Regex confuses the heck out of me...\nI don't have my regex liscense, but\nregex can be so darn powerful especially in an editor.\n\n## Step one\n\nBefore you run someone's regex from the internet that you don't fully\nunderstand, check your `git status` and make sure you are all clear with\ngit before you wreck something\n\n## Inspiration\n\nSomething that I have always appreciated form\n[Nick Janetakis](https://nickjanetakis.com/) is his links section.  I\noften try to gather up the links at the end of my posts, but often end\nup not doing it or forgetting.\n\n## Making a Links section\n\nSearchng through the internet I was able to find an article from\nVitaly Parnas called\n[vim ref links](https://vitalyparnas.com/guides/vim-ref-links/) that did\nalmost exactly what I needed, except it was more complicated and made\nthem into ref liks.\n\nHere is my interpretation of the code I took from Vitaly's post.  It\nmakes a Links section like the one at the bottom of this post.\n\n``` vim\nfunction! MdLinks()\n    $norm o## Links\n    $norm o\n    g/\\[[^\\]]\\+\\]([^)]\\+)/t$\n    silent! '^,$s/\\v[^\\[]*(\\[[^\\]]+\\])\\(([^)]+)\\)[^\\[]*/* \\1(\\2)/g\n    nohl\nendfunction\ncommand! MdLinks call MdLinks()\n```\n\nSo far it is working for me and saving me a few seconds off each post I\nmake.\n\n## Links\n\n* [Nick Janetakis](https://nickjanetakis.com/)\n* [vim ref links](https://vitalyparnas.com/guides/vim-ref-links/)\n",
      "summary": "Let's make a vim command to automatically collect all the links in these posts at the end of each article. Regex confuses the heck out of me... I don't have...",
      "date_published": "2022-03-19T19:11:27Z",
      "date_modified": "2022-03-19T19:11:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "webdev",
        "meta"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rothgar-awesome-tuis/",
      "url": "https://go.waylonwalker.com/rothgar-awesome-tuis/",
      "title": "⭐ rothgar awesome-tuis",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/rothgar/awesome-tuis\" 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\"\u003eawesome-tuis\u003c/a\u003e from \u003ca href=\"https://github.com/rothgar\" 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\"\u003erothgar\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eList of projects that provide terminal user interfaces\u003c/p\u003e\n",
      "content_text": "\nI came across [awesome-tuis](https://github.com/rothgar/awesome-tuis) from [rothgar](https://github.com/rothgar), and it's packed with great features and ideas.\n\nList of projects that provide terminal user interfaces\n",
      "summary": "I came across awesome-tuis from rothgar, and it's packed with great features and ideas.",
      "date_published": "2022-03-19T16:57:54Z",
      "date_modified": "2022-03-19T16:57:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/linux-swap/",
      "url": "https://go.waylonwalker.com/linux-swap/",
      "title": "Create a Swapfile on Your Linux Machine",
      "content_html": "\u003cp\u003eIf you ever end up on a linux machine that just does not have enough ram to\nsuffice what you are doing and you just need to get the job done you can give\nit some more swap.  You can look up reccomendations for how much swap you\nshould have this is more about just trying to get your job done when you are\nalmost there, but running out of memory on the hardware you have.\u003c/p\u003e\n\u003ch2 id=\"make-the-swap-file\"\u003emake the /swap file \u003ca href=\"#make-the-swap-file\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can put this where you wish, for this example I am going to pop it into\n\u003ccode\u003e/swap\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo fallocate -l 4G /swap\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chmod \u003cspan class=\"m\"\u003e600\u003c/span\u003e /swap\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo mkswap /swap\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo swapon /swap\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"make-sure-that-your-swap-is-on\"\u003emake sure that your swap is on \u003ca href=\"#make-sure-that-your-swap-is-on\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can make sure that your swap is working by using the \u003ccode\u003efree\u003c/code\u003e command, I like\nusing the \u003ccode\u003e-h\u003c/code\u003e flag to get human readable numbers.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ free -h\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e               total        used        free      shared  buff/cache   available\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMem:            15Gi       5.5Gi       4.9Gi       458Mi       5.2Gi       9.3Gi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSwap:          4.0Gi          0B       4.0Gi\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/reset-ipython/\" class=\"wikilink\" data-title=\"Reclaim memory usage in Jupyter\" data-description=\"Today I ran into an issue where we had a one-off script that just needed to work, but it was just chewing threw memory like nothing.\" data-date=\"2020-10-01\" data-preview=\"Today I ran into an issue where we had a one-off script that just needed to work, but it was just chewing threw memory like nothing.\"\u003eReclaim memory usage in Jupyter\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI also used this trick in this article to give my python process a bit more oompf and get it on home.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\n\nIf you ever end up on a linux machine that just does not have enough ram to\nsuffice what you are doing and you just need to get the job done you can give\nit some more swap.  You can look up reccomendations for how much swap you\nshould have this is more about just trying to get your job done when you are\nalmost there, but running out of memory on the hardware you have.\n\n## make the /swap file\n\nYou can put this where you wish, for this example I am going to pop it into\n`/swap`\n\n```bash\nsudo fallocate -l 4G /swap\nsudo chmod 600 /swap\nsudo mkswap /swap\nsudo swapon /swap\n```\n\n## make sure that your swap is on\n\nYou can make sure that your swap is working by using the `free` command, I like\nusing the `-h` flag to get human readable numbers.\n\n```bash\n❯ free -h\n               total        used        free      shared  buff/cache   available\nMem:            15Gi       5.5Gi       4.9Gi       458Mi       5.2Gi       9.3Gi\nSwap:          4.0Gi          0B       4.0Gi\n```\n\n\u003ca href=\"/reset-ipython/\" class=\"wikilink\" data-title=\"Reclaim memory usage in Jupyter\" data-description=\"Today I ran into an issue where we had a one-off script that just needed to work, but it was just chewing threw memory like nothing.\" data-date=\"2020-10-01\"\u003eReclaim memory usage in Jupyter\u003c/a\u003e\n\n\u003e I also used this trick in this article to give my python process a bit more oompf and get it on home.\n",
      "summary": "If you ever end up on a linux machine that just does not have enough ram to suffice what you are doing and you just need to get the job done you can give it...",
      "date_published": "2022-03-18T13:29:49Z",
      "date_modified": "2022-03-18T13:29:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-pathlib-glob/",
      "url": "https://go.waylonwalker.com/python-pathlib-glob/",
      "title": "How I glob for Files in Python",
      "content_html": "\u003cp\u003eA very common task for any script is to look for files on the system.  My go to\nmethod when globbing for files in python is to use pathlib.\u003c/p\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI setup a directory to make some examples about globbing.  Here is what the\ndirectory looks like.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── content\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── hello.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── hello.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   ├── me.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e│   └── you.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── readme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── READMES.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── setup.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e1 directory, 8 files\u003c/p\u003e\n\u003ch2 id=\"pathlib\"\u003ePathlib \u003ca href=\"#pathlib\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePathlib is a standard library module available in all LTS versions of python at\nthis point.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCreating a Path instance.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# current working directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecwd\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# The users home directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehome\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Path to a directory by string\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;/path/to/directory\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# The users ~/.config directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehome\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;.config\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"globbing-examples\"\u003eGlobbing Examples \u003ca href=\"#globbing-examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe path object has a glob method that allows you to glob for files with a unix\nstyle glob pattern to search for files.  Note that it gives you a generator.\nThis is great for many use cases, but for examples its easier to turn them to a\nlist to print them out.\u003c/p\u003e\n\u003cp\u003eIf you need some more detail on what globbing is there is a\n\u003ca href=\"https://en.wikipedia.org/wiki/Glob_(programming)\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/en.wikipedia.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/en.wikipedia.org.ico\" class=\"has-avatar  has-avatar-before\"\u003ewikipedia\u003c/a\u003e article\ndiscussing it.  I am just showing how to glob with pathlib.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/*.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003egenerator\u003c/span\u003e \u003cspan class=\"nb\"\u003eobject\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"mh\"\u003e0x7fa35adc4f90\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/*.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;readme.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;READMES.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;README.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;content/you.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;content/me.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;content/hello.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/*.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;setup.py\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;content/hello.py\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;*.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;readme.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;READMES.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;README.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;*.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;setup.py\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/*hello*\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;content/hello.py\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;content/hello.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;**/REA?ME.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePosixPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;README.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nA very common task for any script is to look for files on the system.  My go to\nmethod when globbing for files in python is to use pathlib.\n\n## Setup\n\nI setup a directory to make some examples about globbing.  Here is what the\ndirectory looks like.\n\n``` bash\n❯ tree .\n.\n├── content\n│   ├── hello.md\n│   ├── hello.py\n│   ├── me.md\n│   └── you.md\n├── readme.md\n├── README.md\n├── READMES.md\n└── setup.py\n```\n\n1 directory, 8 files\n## Pathlib\n\nPathlib is a standard library module available in all LTS versions of python at\nthis point.\n\n``` python\n❯ from pathlib import Path\n```\n\nCreating a Path instance.\n\n``` python\n# current working directory\nPath()\nPath.cwd()\n\n# The users home directory\nPath.home()\n\n# Path to a directory by string\nPath('/path/to/directory')\n\n# The users ~/.config directory\nPath.home() / '.config'\n```\n\n## Globbing Examples\n\nThe path object has a glob method that allows you to glob for files with a unix\nstyle glob pattern to search for files.  Note that it gives you a generator.\nThis is great for many use cases, but for examples its easier to turn them to a\nlist to print them out.\n\nIf you need some more detail on what globbing is there is a\n[wikipedia](https://en.wikipedia.org/wiki/Glob_(programming)) article\ndiscussing it.  I am just showing how to glob with pathlib.\n\n``` python\n\n❯ Path().glob(\"**/*.md\")\n\u003cgenerator object Path.glob at 0x7fa35adc4f90\u003e\n\n❯ list(Path().glob(\"**/*.md\"))\n\n[\n    PosixPath('readme.md'),\n    PosixPath('READMES.md'),\n    PosixPath('README.md'),\n    PosixPath('content/you.md'),\n    PosixPath('content/me.md'),\n    PosixPath('content/hello.md')\n]\n\n❯ list(Path().glob(\"**/*.py\"))\n[PosixPath('setup.py'), PosixPath('content/hello.py')]\n\n❯ list(Path().glob(\"*.md\"))\n[PosixPath('readme.md'), PosixPath('READMES.md'), PosixPath('README.md')]\n\n❯ list(Path().glob(\"*.py\"))\n[PosixPath('setup.py')]\n\n❯ list(Path().glob(\"**/*hello*\"))\n[PosixPath('content/hello.py'), PosixPath('content/hello.md')]\n\n❯ list(Path().glob(\"**/REA?ME.md\"))\n[PosixPath('README.md')]\n```\n",
      "summary": "A very common task for any script is to look for files on the system. My go to method when globbing for files in python is to use pathlib.",
      "date_published": "2022-03-17T23:01:53Z",
      "date_modified": "2022-03-17T23:01:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-pager/",
      "url": "https://go.waylonwalker.com/git-pager/",
      "title": "Set Your Git Pager Config",
      "content_html": "\u003cp\u003eSetting up your \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e pager to your liking can help you navigate diffs and logs\nmuch more efficiently.  You can set it to whatever pager you like so that your\nkeys feel nice and smooth and your fingers know exactly what to do.  You might\neven gain a few extra features.\u003c/p\u003e\n\u003ch2 id=\"setting-the-pager\"\u003eSetting the pager \u003ca href=\"#setting-the-pager\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can set the pager right from your command line with the following command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global core.pager \u003cspan class=\"s1\"\u003e\u0026#39;more\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can also set your pager by editing your global \u003ccode\u003e.gitconfig\u003c/code\u003e file which by\ndefault is set to \u003ccode\u003e~/.gitconfig\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ecore\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epager\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e more\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"color\"\u003eColor \u003ca href=\"#color\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIn my experience you need to turn colors off with nvim.  bat handles them and\nlooks good either way, but nvim will be plain white and display the color\ncodes as plain text if color is on.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global color.pager no\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"pagers-i-have-tried\"\u003ePagers I have tried \u003ca href=\"#pagers-i-have-tried\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are some various configs that I tried.  For some reason line numbers in\nbat really bothered me, but when in nvim they felt ok.  I am going to try\nrunning both of them for a few days and see which I like better.  I think\nhaving some of my nvim config could be really handy for things like yanking a\ncommit hash to the system clipboard without touching the mouse.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# bat\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global core.pager \u003cspan class=\"s1\"\u003e\u0026#39;bat\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# nvim in read only mode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global core.pager \u003cspan class=\"s1\"\u003e\u0026#39;nvim -R\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# turn colors off\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global color.pager no\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# bat with no line numbers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global core.pager \u003cspan class=\"s1\"\u003e\u0026#39;bat --style=plain\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# nvim with no line numbers and a specific rc file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global core.pager \u003cspan class=\"s2\"\u003e\u0026#34;nvim -R +\u0026#39;set nonumber norelativenumber\u0026#39; -u ~/.config/nvim/init-git.vim\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"reset-back-to-the-default\"\u003ereset back to the default \u003ca href=\"#reset-back-to-the-default\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you are afraid to try one of these settings, don’t be you can always change\nit back.  If you tried one and dont like it just \u003ccode\u003e--unset\u003c/code\u003e the config that you\njust tried.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset core.pager\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset color.pager\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe other option you have is to open your \u003ccode\u003e.gitconfig\u003c/code\u003e file and delete the\nlines of config that set your pager.\u003c/p\u003e\n",
      "content_text": "\nSetting up your git pager to your liking can help you navigate diffs and logs\nmuch more efficiently.  You can set it to whatever pager you like so that your\nkeys feel nice and smooth and your fingers know exactly what to do.  You might\neven gain a few extra features.\n\n## Setting the pager\n\nYou can set the pager right from your command line with the following command.\n\n``` bash\ngit config --global core.pager 'more'\n```\n\nYou can also set your pager by editing your global `.gitconfig` file which by\ndefault is set to `~/.gitconfig`.\n\n``` bash\n[core]\n    pager = more\n```\n\n## Color\n\nIn my experience you need to turn colors off with nvim.  bat handles them and\nlooks good either way, but nvim will be plain white and display the color\ncodes as plain text if color is on.\n\n``` bash\ngit config --global color.pager no\n```\n\n## Pagers I have tried\n\nHere are some various configs that I tried.  For some reason line numbers in\nbat really bothered me, but when in nvim they felt ok.  I am going to try\nrunning both of them for a few days and see which I like better.  I think\nhaving some of my nvim config could be really handy for things like yanking a\ncommit hash to the system clipboard without touching the mouse.\n\n``` bash\n# bat\ngit config --global core.pager 'bat'\n\n# nvim in read only mode\ngit config --global core.pager 'nvim -R'\n\n# turn colors off\ngit config --global color.pager no\n\n# bat with no line numbers\ngit config --global core.pager 'bat --style=plain'\n\n# nvim with no line numbers and a specific rc file\ngit config --global core.pager \"nvim -R +'set nonumber norelativenumber' -u ~/.config/nvim/init-git.vim\"\n```\n\n## reset back to the default\n\nIf you are afraid to try one of these settings, don't be you can always change\nit back.  If you tried one and dont like it just `--unset` the config that you\njust tried.\n\n``` bash\ngit config --global --unset core.pager\ngit config --global --unset color.pager\n```\n\nThe other option you have is to open your `.gitconfig` file and delete the\nlines of config that set your pager.\n",
      "summary": "Setting up your git pager to your liking can help you navigate diffs and logs much more efficiently. You can set it to whatever pager you like so that your...",
      "date_published": "2022-03-16T14:03:18Z",
      "date_modified": "2022-03-16T14:03:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-config-help-autocorrect/",
      "url": "https://go.waylonwalker.com/git-config-help-autocorrect/",
      "title": "Configure Git to Autocorrect Your Fat Fingers",
      "content_html": "\u003cp\u003eIf you have ever mistyped a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e command very close to an existing one\nyou have likely seen this message.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git chekout dev\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit: \u003cspan class=\"s1\"\u003e\u0026#39;chekout\u0026#39;\u003c/span\u003e is not a git command. See \u003cspan class=\"s1\"\u003e\u0026#39;git --help\u0026#39;\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe most similar \u003cspan class=\"nb\"\u003ecommand\u003c/span\u003e is\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        checkout\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"automatically-run-the-right-one\"\u003eAutomatically run the right one \u003ca href=\"#automatically-run-the-right-one\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat you might not have known is that you can configure git to just run\nthis command for you.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Gives you 0.1 seconds to respond\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global help.autocorrect \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Gives you 1 seconds to respond\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global help.autocorrect \u003cspan class=\"m\"\u003e10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Gives you 5 seconds to respond\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global help.autocorrect \u003cspan class=\"m\"\u003e50\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"fat-fingers-gone\"\u003eFat Fingers Gone \u003ca href=\"#fat-fingers-gone\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow when you typo a git command it will autmatically run after the\nconfigured number of tenths of a second.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git chkout get-error\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWARNING: You called a Git \u003cspan class=\"nb\"\u003ecommand\u003c/span\u003e named \u003cspan class=\"s1\"\u003e\u0026#39;chkout\u0026#39;\u003c/span\u003e, which does not exist.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eContinuing in 1.0 seconds, assuming that you meant \u003cspan class=\"s1\"\u003e\u0026#39;checkout\u0026#39;\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       pages/blog/how-i-deploy-2021.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       pages/hot_tips/001.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       pages/templates/gratitude_card.html\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       plugins/index.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       plugins/publish_amp.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       plugins/render_template_variables.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       plugins/youtube.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       requirements.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eM       static/index.html\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSwitched to branch \u003cspan class=\"s1\"\u003e\u0026#39;get-error\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"my-config\"\u003eMy config \u003ca href=\"#my-config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’m rocking 10 for now just to see how I feel about it, but honestly I\ncannot think of a time that I have seen the original warning that was\nnot what I wanted.  This at least gives me some time to respond if I am\nunsure.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global help.autocorrect \u003cspan class=\"m\"\u003e10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIf you have ever mistyped a git command very close to an existing one\nyou have likely seen this message.\n\n``` bash\n❯ git chekout dev\ngit: 'chekout' is not a git command. See 'git --help'.\n\nThe most similar command is\n        checkout\n```\n\n## Automatically run the right one\n\nWhat you might not have known is that you can configure git to just run\nthis command for you.\n\n``` bash\n# Gives you 0.1 seconds to respond\ngit config --global help.autocorrect 1\n\n# Gives you 1 seconds to respond\ngit config --global help.autocorrect 10\n\n# Gives you 5 seconds to respond\ngit config --global help.autocorrect 50\n```\n\n## Fat Fingers Gone\n\nNow when you typo a git command it will autmatically run after the\nconfigured number of tenths of a second.\n\n``` bash\n❯ git chkout get-error\nWARNING: You called a Git command named 'chkout', which does not exist.\nContinuing in 1.0 seconds, assuming that you meant 'checkout'.\nM       pages/blog/how-i-deploy-2021.md\nM       pages/hot_tips/001.md\nM       pages/templates/gratitude_card.html\nM       plugins/index.py\nM       plugins/publish_amp.py\nM       plugins/render_template_variables.py\nM       plugins/youtube.py\nM       requirements.txt\nM       static/index.html\nSwitched to branch 'get-error'\n```\n\n## My config\n\nI'm rocking 10 for now just to see how I feel about it, but honestly I\ncannot think of a time that I have seen the original warning that was\nnot what I wanted.  This at least gives me some time to respond if I am\nunsure.\n\n``` bash\ngit config --global help.autocorrect 10\n```\n",
      "summary": "If you have ever mistyped a git command very close to an existing one you have likely seen this message.",
      "date_published": "2022-03-15T00:43:25Z",
      "date_modified": "2022-03-15T00:43:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/install-yq/",
      "url": "https://go.waylonwalker.com/install-yq/",
      "title": "Install yq | A light weight yaml parser cli",
      "content_html": "\u003cp\u003e\u003ccode\u003eyq\u003c/code\u003e is a command line utility for parsing and querying yaml, like \u003ccode\u003ejq\u003c/code\u003e does for json.\u003c/p\u003e\n\u003ch2 id=\"this-is-for-me\"\u003eThis is for me \u003ca href=\"#this-is-for-me\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI love that all of these modern tools built in go and rust, just give you a\nzipped up executable right from GitHub releases, but it’s not necessarily\nstraight forward how to install them.  \u003ccode\u003eyq\u003c/code\u003e does one of the best jobs I have\nseen, giving you instructions on how to get a specific version and install it.\u003c/p\u003e\n\u003cp\u003eI use a bunch of these tools, and for what its worth I trust the devs behind\nthem to make sure they don’t break.  This so far has worked out well for me,\nbut if it ever doesn’t I can always pick an older version.\u003c/p\u003e\n\u003ch2 id=\"just-give-me-the-latest\"\u003eJust give me the latest \u003ca href=\"#just-give-me-the-latest\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince I am all trusting of them I just want the latest version.  I do not want\nto update a shell script with new versions, or even care about what then next\nversion is, I just want it. Luckily you can script the release page for the\nlatest version on all that I have came accross.\u003c/p\u003e\n\u003ch2 id=\"what-is-the-latest\"\u003eWhat is the latest \u003ca href=\"#what-is-the-latest\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI wrote or stole, I think I wrote it, this line of bash quite awhile ago, and\nit has served me well for finding the latest release for any GitHub project\nusing releases.  Just update it with the name of the tool, org, and repo and it\nworks.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eYQ_VERSION\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecurl --silent https://github.com/mikefarah/yq/releases/latest \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr -d \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#34;\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/^.*tag\\///g\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/\u0026gt;.*$//g\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/^v//\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"install-with-your-shell\"\u003eInstall with your shell \u003ca href=\"#install-with-your-shell\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that we know how to consistently get the right version, I generally right\nclick the release in the releases page, replace the version with\n\u003ccode\u003e${TOOL_VERSION}\u003c/code\u003e and put it in this wget call, then move the binary over to \u003ccode\u003e~/.local/bin\u003c/code\u003e\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elocal\u003c/span\u003e \u003cspan class=\"nv\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003emktemp -dt install-XXXXXX\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epushd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eYQ_VERSION\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecurl --silent https://github.com/mikefarah/yq/releases/latest \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr -d \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#34;\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/^.*tag\\///g\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/\u0026gt;.*$//g\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/^v//\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://github.com/mikefarah/yq/releases/download/v\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eYQ_VERSION\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e/yq_linux_amd64.tar.gz -O- -q \u003cspan class=\"p\"\u003e|\u003c/span\u003e tar -zxf - -C /tmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp yq_linux_amd64 ~/.local/bin/yq\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epopd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"install-with-ansible\"\u003eInstall with ansible \u003ca href=\"#install-with-ansible\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow I don’t want to worry about missing \u003ccode\u003eyq\u003c/code\u003e again, so I am added it to my\nansible install script.  This way it’s installed everyt time I setup a new\nsystem with all of my favorite cli’s.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck is yq installed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecommand -v yq\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eyq_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"l\"\u003eyq\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eInstall yq\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eyq_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    local tmp=`mktemp -dt install-XXXXXX`\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    pushd $tmp\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    YQ_VERSION=$(curl --silent https://github.com/mikefarah/yq/releases/latest | tr -d \u0026#39;\u0026#34;\u0026#39; | sed \u0026#39;s/^.*tag\\///g\u0026#39; | sed \u0026#39;s/\u0026gt;.*$//g\u0026#39; | sed \u0026#39;s/^v//\u0026#39;)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    wget https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64.tar.gz -O- -q | tar -zxf - -C /tmp\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    cp yq_linux_amd64 {{ lookup(\u0026#39;env\u0026#39;, \u0026#39;HOME\u0026#39;) }}/.local/bin/yq\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e    popd\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"l\"\u003eyq\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is how I installed it, of course you can always follow Mike’s instructions\nfrom the repo.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mikefarah/yq\" 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\"\u003eyq repo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://mikefarah.gitbook.io/yq/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/mikefarah.gitbook.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/mikefarah.gitbook.io.png\" class=\"has-avatar  has-avatar-before\"\u003eyq docs\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\n`yq` is a command line utility for parsing and querying yaml, like `jq` does for json.\n\n## This is for me\n\nI love that all of these modern tools built in go and rust, just give you a\nzipped up executable right from GitHub releases, but it's not necessarily\nstraight forward how to install them.  `yq` does one of the best jobs I have\nseen, giving you instructions on how to get a specific version and install it.\n\n\nI use a bunch of these tools, and for what its worth I trust the devs behind\nthem to make sure they don't break.  This so far has worked out well for me,\nbut if it ever doesn't I can always pick an older version.\n\n## Just give me the latest\n\nSince I am all trusting of them I just want the latest version.  I do not want\nto update a shell script with new versions, or even care about what then next\nversion is, I just want it. Luckily you can script the release page for the\nlatest version on all that I have came accross.\n\n## What is the latest\n\nI wrote or stole, I think I wrote it, this line of bash quite awhile ago, and\nit has served me well for finding the latest release for any GitHub project\nusing releases.  Just update it with the name of the tool, org, and repo and it\nworks.\n\n``` bash\nYQ_VERSION=$(curl --silent https://github.com/mikefarah/yq/releases/latest | tr -d '\"' | sed 's/^.*tag\\///g' | sed 's/\u003e.*$//g' | sed 's/^v//')\n```\n\n## Install with your shell\n\nNow that we know how to consistently get the right version, I generally right\nclick the release in the releases page, replace the version with\n`${TOOL_VERSION}` and put it in this wget call, then move the binary over to `~/.local/bin`\n\n``` bash\nlocal tmp=`mktemp -dt install-XXXXXX`\npushd $tmp\nYQ_VERSION=$(curl --silent https://github.com/mikefarah/yq/releases/latest | tr -d '\"' | sed 's/^.*tag\\///g' | sed 's/\u003e.*$//g' | sed 's/^v//')\nwget https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64.tar.gz -O- -q | tar -zxf - -C /tmp\ncp yq_linux_amd64 ~/.local/bin/yq\npopd\n```\n\n## Install with ansible\n\nNow I don't want to worry about missing `yq` again, so I am added it to my\nansible install script.  This way it's installed everyt time I setup a new\nsystem with all of my favorite cli's.\n\n``` yaml\n- name: check is yq installed\n  shell: command -v yq\n  register: yq_exists\n  ignore_errors: yes\n  tags:\n    - yq\n\n- name: Install yq\n  when: yq_exists is failed\n  shell: |\n    local tmp=`mktemp -dt install-XXXXXX`\n    pushd $tmp\n    YQ_VERSION=$(curl --silent https://github.com/mikefarah/yq/releases/latest | tr -d '\"' | sed 's/^.*tag\\///g' | sed 's/\u003e.*$//g' | sed 's/^v//')\n    wget https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64.tar.gz -O- -q | tar -zxf - -C /tmp\n    cp yq_linux_amd64 {{ lookup('env', 'HOME') }}/.local/bin/yq\n    popd\n  tags:\n    - yq\n```\n\n## Links\n\nThis is how I installed it, of course you can always follow Mike's instructions\nfrom the repo.\n\n* [yq repo](https://github.com/mikefarah/yq)\n* [yq docs](https://mikefarah.gitbook.io/yq/)\n",
      "summary": "is a command line utility for parsing and querying yaml, like does for json.",
      "date_published": "2022-03-14T18:30:12Z",
      "date_modified": "2022-03-14T18:30:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pytest-mock-basics/",
      "url": "https://go.waylonwalker.com/pytest-mock-basics/",
      "title": "pytest-mock Basics",
      "content_html": "\u003cp\u003eLast Thursday I learned about \u003ccode\u003epytest-mock\u003c/code\u003e at a local python meetup.  The\npresenter showed how he uses \u003ccode\u003epytest-mock\u003c/code\u003e for his work, and it was kinda eye\nopening.  I knew what mocking was, but I had not seen it in this context.\u003c/p\u003e\n\u003ch2 id=\"discovery\"\u003eDiscovery \u003ca href=\"#discovery\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWatching him use \u003ccode\u003epytest-mock\u003c/code\u003e I realized that mocking was not as hard as I had\nmade it out to be.  You can install \u003ccode\u003epytest-mock\u003c/code\u003e, use the mocker fixture, and\npatch objects methods with what you want them to be.\u003c/p\u003e\n\u003ch2 id=\"install\"\u003einstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003epytest-mock is out on pypi and can be installed with pip.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install pytest-mock\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"what-i-actually-did\"\u003eWhat I actually did \u003ca href=\"#what-i-actually-did\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSometimes I fall victim to making these posts nice and easy to follow.  It\ntakes more steps than just pip install, you need a place to practice in a nice\nsandbox.  Here is how I make my sandboxes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emkdir\u003c/span\u003e \u003cspan class=\"o\"\u003e~/\u003c/span\u003e\u003cspan class=\"n\"\u003egit\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elearn\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epytest\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emock\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecd\u003c/span\u003e \u003cspan class=\"o\"\u003e~/\u003c/span\u003e\u003cspan class=\"n\"\u003egit\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elearn\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epytest\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emock\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# well actually open a new tmux session there\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eecho\u003c/span\u003e \u003cspan class=\"n\"\u003epytest\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emock\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003erequirements\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etxt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# I copied in my .envrc, and ran direnv allow, which actually just made me a virtual env as follows\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epython3\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e \u003cspan class=\"n\"\u003evenv\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evenv\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eprompt\u003c/span\u003e \u003cspan class=\"err\"\u003e$\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebasename\u003c/span\u003e \u003cspan class=\"err\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ePWD\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esource\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evenv\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nb\"\u003ebin\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eactivate\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# now install pytest-mock\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003er\u003c/span\u003e \u003cspan class=\"n\"\u003erequirements\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etxt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# make some tests to mock\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emkdir\u003c/span\u003e \u003cspan class=\"n\"\u003etests\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003envim\u003c/span\u003e \u003cspan class=\"n\"\u003etests\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etest_me\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"create-a-teststest-mepy\"\u003ecreate a tests/test_me.py \u003ca href=\"#create-a-teststest-mepy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI just wanted to do something that was worth mocking, the first thing that came\nto mind was to do something that made a network call.  Here I made a method\nthat uses requests to go get the content on my homepage, but changes it’s\nreturn behavior based on the \u003ccode\u003estatus_code\u003c/code\u003e of the request.\u003c/p\u003e\n\u003cp\u003eI want to mock out \u003ccode\u003erequests\u003c/code\u003e to ensure that GoGetter can handle both \u003ccode\u003e200\u003c/code\u003e\n(http success) and \u003ccode\u003e404\u003c/code\u003e (http not found) status codes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# tests/test_me.py\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003erequests\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eGoGetter\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    The thing I am testing, this is usually imported into the test file, but\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    defined here for simplicity.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        Get the content of `https://waylonwalker.com` and return it as a string\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        if successfull, or False if it\u0026#39;s not found.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003er\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003er\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003er\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003er\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eDummyRequester\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        mock out content and status_code\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__call__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        The way I set this up GoGetter is going to call an instance of this\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        class, so the easiest way to make it work was to implement __call__.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_success_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emocker\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    Show that the GoGetter can handle successful calls.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ego_getter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGoGetter\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Use the mocker fixture to change how requests.get works while inside of test_success_get\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emocker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epatch\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eobject\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;get\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDummyRequester\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;waylon\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ego_getter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003etest_failed_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emocker\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    Show that the GoGetter can handle failed calls.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ego_getter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGoGetter\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Use the mocker fixture to change how requests.get works while inside of test_failed_get\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emocker\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epatch\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eobject\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;get\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eDummyRequester\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;waylonwalker\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e404\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eassert\u003c/span\u003e \u003cspan class=\"n\"\u003ego_getter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nLast Thursday I learned about `pytest-mock` at a local python meetup.  The\npresenter showed how he uses `pytest-mock` for his work, and it was kinda eye\nopening.  I knew what mocking was, but I had not seen it in this context.\n\n## Discovery\n\nWatching him use `pytest-mock` I realized that mocking was not as hard as I had\nmade it out to be.  You can install `pytest-mock`, use the mocker fixture, and\npatch objects methods with what you want them to be.\n\n## install\n\npytest-mock is out on pypi and can be installed with pip.\n\n```\npython -m pip install pytest-mock\n```\n\n## What I actually did\n\nSometimes I fall victim to making these posts nice and easy to follow.  It\ntakes more steps than just pip install, you need a place to practice in a nice\nsandbox.  Here is how I make my sandboxes.\n\n``` python\nmkdir ~/git/learn-pytest-mock\ncd ~/git/learn-pytest-mock\n# well actually open a new tmux session there\necho pytest-mock \u003e requirements.txt\n\n# I copied in my .envrc, and ran direnv allow, which actually just made me a virtual env as follows\npython3 -m venv .venv --prompt $(basename $PWD)\nsource .venv/bin/activate\n\n# now install pytest-mock\npip install -r requirements.txt\n\n# make some tests to mock\nmkdir tests\nnvim tests/test_me.py\n```\n\n## create a tests/test_me.py\n\nI just wanted to do something that was worth mocking, the first thing that came\nto mind was to do something that made a network call.  Here I made a method\nthat uses requests to go get the content on my homepage, but changes it's\nreturn behavior based on the `status_code` of the request.\n\nI want to mock out `requests` to ensure that GoGetter can handle both `200`\n(http success) and `404` (http not found) status codes.\n\n``` python\n# tests/test_me.py\nimport requests\n\n\nclass GoGetter:\n    \"\"\"\n    The thing I am testing, this is usually imported into the test file, but\n    defined here for simplicity.\n    \"\"\"\n    def get(self):\n        \"\"\"\n        Get the content of `https://waylonwalker.com` and return it as a string\n        if successfull, or False if it's not found.\n        \"\"\"\n        r = requests.get(\"https://waylonwalker.com\")\n        if r.status_code == 200:\n            return r.content\n        if r.status_code == 404:\n            return False\n\n\nclass DummyRequester:\n    def __init__(self, content, status_code):\n        \"\"\"\n        mock out content and status_code\n        \"\"\"\n\n        self.content = content\n        self.status_code = status_code\n\n    def __call__(self, url):\n        \"\"\"\n        The way I set this up GoGetter is going to call an instance of this\n        class, so the easiest way to make it work was to implement __call__.\n        \"\"\"\n        self.url = url\n        return self\n\n\ndef test_success_get(mocker):\n    \"\"\"\n    Show that the GoGetter can handle successful calls.\n    \"\"\"\n    go_getter = GoGetter()\n\n    # Use the mocker fixture to change how requests.get works while inside of test_success_get\n    mocker.patch.object(requests, \"get\", DummyRequester(\"waylonwalker\", 200))\n    assert \"waylon\" in go_getter.get()\n\n\ndef test_failed_get(mocker):\n    \"\"\"\n    Show that the GoGetter can handle failed calls.\n    \"\"\"\n    go_getter = GoGetter()\n\n    # Use the mocker fixture to change how requests.get works while inside of test_failed_get\n    mocker.patch.object(requests, \"get\", DummyRequester(\"waylonwalker\", 404))\n    assert go_getter.get() is False\n```\n",
      "summary": "Last Thursday I learned about at a local python meetup. The presenter showed how he uses for his work, and it was kinda eye opening. I knew what mocking was,...",
      "date_published": "2022-03-14T00:19:02Z",
      "date_modified": "2022-03-14T00:19:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/walrus-comprehension/",
      "url": "https://go.waylonwalker.com/walrus-comprehension/",
      "title": "Python Walrus Inside List Comprehension",
      "content_html": "\u003cp\u003ePython 3.8 came out two and a half years ago and I have yet to really lean in\non the walrus operator.  Partly because it always seemed like something kinda\nsilly (my use cases) to require a python version bump for, and partly because I\nreally didn’t understand it the best.  Primarily I have wanted to use it in\ncomprehensions, but I did not really understand how.\u003c/p\u003e\n\u003cp\u003eNow that Python 3.6 is end of life, and most folks are using at least \u003ccode\u003e3.8\u003c/code\u003e it\nseems time to learn and use it.\u003c/p\u003e\n\u003ch2 id=\"whats-a-walrus\"\u003eWhat’s a Walrus \u003ca href=\"#whats-a-walrus\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e:=\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThe assignment operator in python is more commonly referred to as the walrus\noperator due to how \u003ccode\u003e:=\u003c/code\u003e looks like a walrus.  It allows you to assign and use\na variable in a single expression.\u003c/p\u003e\n\u003cp\u003eThis example from the docs avoids a second call to the \u003ccode\u003elen\u003c/code\u003e function.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e:=\u003c/span\u003e \u003cspan class=\"nb\"\u003elen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"sa\"\u003ef\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;List is too long (\u003c/span\u003e\u003cspan class=\"si\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e elements, expected \u0026lt;= 10)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"lets-get-some-data\"\u003eLet’s get some data \u003ca href=\"#lets-get-some-data\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ewithout a walrus\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIn this example we are going to do a dict comp to generate a map of content\nfrom urls, only if their status code is 200.  When doing this in a dictionary\ncomprehension we end up needing to hit the url twice for successful urls. Once\nfor the filter and once for the data going into the dictionary.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eurl\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/broken\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e200\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"gimme-some-walrus\"\u003eGimme some walrus \u003ca href=\"#gimme-some-walrus\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eusing walrus in a dict comp\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eUsing the walrus operator \u003ccode\u003e:=\u003c/code\u003e list comp allows us to only put things into the\ndictionary that we want to keep, and not hit the url twice.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003er\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eurl\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://waylonwalker.com/broken\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003er\u003c/span\u003e \u003cspan class=\"o\"\u003e:=\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estatus_code\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e200\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"fin\"\u003eFIN \u003ca href=\"#fin\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe walrus is a nice to have option to save on extra function/network calls, and\nmicro optimize your code without adding much extra.\u003c/p\u003e\n",
      "content_text": "\nPython 3.8 came out two and a half years ago and I have yet to really lean in\non the walrus operator.  Partly because it always seemed like something kinda\nsilly (my use cases) to require a python version bump for, and partly because I\nreally didn't understand it the best.  Primarily I have wanted to use it in\ncomprehensions, but I did not really understand how.\n\nNow that Python 3.6 is end of life, and most folks are using at least `3.8` it\nseems time to learn and use it.\n\n## What's a Walrus\n_:=_\n\nThe assignment operator in python is more commonly referred to as the walrus\noperator due to how `:=` looks like a walrus.  It allows you to assign and use\na variable in a single expression.\n\nThis example from the docs avoids a second call to the `len` function.\n\n``` python\nif (n := len(a)) \u003e 10:\n    print(f\"List is too long ({n} elements, expected \u003c= 10)\")\n```\n\n## Let's get some data\n_without a walrus_\n\nIn this example we are going to do a dict comp to generate a map of content\nfrom urls, only if their status code is 200.  When doing this in a dictionary\ncomprehension we end up needing to hit the url twice for successful urls. Once\nfor the filter and once for the data going into the dictionary.\n\n``` python\n{\n    url: requests.get(url).content\n    for url in [\"https://waylonwalker.com/\", \"https://waylonwalker.com/broken\"]\n    if requests.get(url).status_code == 200\n}\n```\n\n## Gimme some walrus\n_using walrus in a dict comp_\n\nUsing the walrus operator `:=` list comp allows us to only put things into the\ndictionary that we want to keep, and not hit the url twice.\n\n``` python\n{\n    url: r.content\n    for url in [\"https://waylonwalker.com/\", \"https://waylonwalker.com/broken\"]\n    if (r := requests.get(url)).status_code == 200\n}\n```\n\n## FIN\n\nThe walrus is a nice to have option to save on extra function/network calls, and\nmicro optimize your code without adding much extra.\n",
      "summary": "Python 3.8 came out two and a half years ago and I have yet to really lean in on the walrus operator. Partly because it always seemed like something kinda...",
      "date_published": "2022-03-12T15:01:59Z",
      "date_modified": "2022-03-12T15:01:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mixu-markdown-styles/",
      "url": "https://go.waylonwalker.com/mixu-markdown-styles/",
      "title": "⭐ mixu markdown-styles",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/mixu/markdown-styles\" 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\"\u003emarkdown-styles\u003c/a\u003e from \u003ca href=\"https://github.com/mixu\" 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\"\u003emixu\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMarkdown to static \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 generator and multiple CSS themes for Markdown\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [markdown-styles](https://github.com/mixu/markdown-styles) from [mixu](https://github.com/mixu).\n\nMarkdown to static HTML generator and multiple CSS themes for Markdown\n",
      "summary": "I'm impressed by markdown-styles from mixu.",
      "date_published": "2022-03-11T14:50:46Z",
      "date_modified": "2022-03-11T14:50:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-rich/",
      "url": "https://go.waylonwalker.com/kedro-rich/",
      "title": "Make Kedro Runs Beautiful",
      "content_html": "\u003cp\u003eKedro rich is a very new and unstable (it’s good, just not ready) plugin for\nkedro to make the command line prettier.\u003c/p\u003e\n\u003ch2 id=\"install-kedro-rich\"\u003eInstall kedro rich \u003ca href=\"#install-kedro-rich\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere is no pypi package yet, but it’s on github.  You can pip install it with\nthe \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e url.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install git+https://github.com/datajoely/kedro-rich\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"kedro-run\"\u003eKedro run \u003ca href=\"#kedro-run\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can run your pipeline just as you normally would, except you get progress\nbars and pretty prints.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ekedro run\n\u003c/code\u003e\u003c/pre\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/kedro-rich-run.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/kedro-rich-run.png\" alt=\"kedro rich pretty run\"/ data-glightbox=\"description: kedro rich pretty run\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"kedro-catalog\"\u003eKedro catalog \u003ca href=\"#kedro-catalog\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eListing out catalog entries from the command line now print out a nice pretty\ntable.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekedro catalog list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/kedro-rich-catalog-list.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/kedro-rich-catalog-list.png\" alt=\"kedro rich catalog list table output\"/ data-glightbox=\"description: kedro rich catalog list table output\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"give-it-a-star\"\u003eGive it a star \u003ca href=\"#give-it-a-star\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eGo to the \u003ca href=\"https://github.com/datajoely/kedro-rich\" 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\"\u003eGitHub repo\u003c/a\u003e and give it a\nstar, Joel deserves it.\u003c/p\u003e\n",
      "content_text": "\nKedro rich is a very new and unstable (it's good, just not ready) plugin for\nkedro to make the command line prettier.\n\n## Install kedro rich\n\nThere is no pypi package yet, but it's on github.  You can pip install it with\nthe git url.\n\n``` bash\npip install git+https://github.com/datajoely/kedro-rich\n```\n\n## Kedro run\n\nYou can run your pipeline just as you normally would, except you get progress\nbars and pretty prints.\n\n```\nkedro run\n```\n\n![kedro rich pretty run](https://images.waylonwalker.com/kedro-rich-run.png)\n\n\n## Kedro catalog\n\nListing out catalog entries from the command line now print out a nice pretty\ntable.\n\n``` bash\nkedro catalog list\n```\n\n![kedro rich catalog list table output](https://images.waylonwalker.com/kedro-rich-catalog-list.png)\n\n## Give it a star\n\nGo to the [GitHub repo](https://github.com/datajoely/kedro-rich) and give it a\nstar, Joel deserves it.\n",
      "summary": "Kedro rich is a very new and unstable (it's good, just not ready) plugin for kedro to make the command line prettier.",
      "date_published": "2022-03-11T13:14:51Z",
      "date_modified": "2022-03-11T13:14:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "kedro",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-checkout-worktree/",
      "url": "https://go.waylonwalker.com/git-checkout-worktree/",
      "title": "Git Worktrees are not so Scary",
      "content_html": "\u003cp\u003eSo worktrees, I always thought they were a big scary things.  Turns out they\nare much simpler than I thought.\u003c/p\u003e\n\u003ch2 id=\"myth-1\"\u003eMyth #1 \u003ca href=\"#myth-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eno special setup\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI thought you had to be all in or worktrees or normal \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e, but not both.  When\nI see folks go all in on worktrees they start with a bare repo, while its true\nthis is the way you go all in, its not true that this is required.\u003c/p\u003e\n\u003ch2 id=\"lets-make-a-worktree\"\u003eLets make a worktree \u003ca href=\"#lets-make-a-worktree\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMaking a worktree is as easy as making a branch.  It’s actually just a branch\nthat lives in another place in your filesystem.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# checkout a new worktree called compare based on main in /tmp/project\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree add -b compare /tmp/project main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# checkout a new worktree called compare based on HEAD in /tmp/project\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree add -b compare /tmp/project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# checkout a worktree from an existing feature branch in /tmp/project\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree add /tmp/project my-existing-feature-branch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eThe worktree that you create is considered a \u003cem\u003elinked worktree\u003c/em\u003e, while the\noriginal worktree is called the \u003cem\u003emain worktree\u003c/em\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNote that I put this in my tmp directory because I don’t expect it to live very\nlong, my recent use case was to compare two files after a big formatting\nchange.  You put these where you want, but dont come at me when your /tmp gets\nwiped and you loose work.\u003c/p\u003e\n\u003ch2 id=\"myth-2\"\u003eMyth #2 \u003ca href=\"#myth-2\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ethey are hidden mysterious creatures\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eJust like branches git has some nice commands to help us understand what\nworktrees we have on our system.  Firstly we have something very specific to\nworktrees to list them out.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003egives the output\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/u_walkews/git/git-work-play  b202442 \u003cspan class=\"o\"\u003e[\u003c/span\u003emain\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/tmp/another                       d9b2cf1 \u003cspan class=\"o\"\u003e[\u003c/span\u003eanother\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eEven the branch command gives a bit different output for a worktree.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit branch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003egives this output, notice the + denotes an actively linked worktree, and the *\ngives the active branch.  If you cd over to the worktree directory, these will\nswitch roles.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e+ another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  just-a-branch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e* main\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"you-can-only-checkout-a-branch-in-one-place\"\u003eYou can only checkout a branch in one place \u003ca href=\"#you-can-only-checkout-a-branch-in-one-place\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you try to checkout a branch that is checked out in a linked worktree, you\nwill be presented with an error, and it will not let you check out a second\ncopy of that branch.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e❯ git checkout another\nfatal: \u0026#39;another\u0026#39; is already checked out at \u0026#39;/tmp/another\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"myth-3\"\u003eMyth #3 \u003ca href=\"#myth-3\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eonce you go worktree, you worktree\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eOnce you have worktrees on your system, you have a few ways to get rid of them.\nUsing git’s way feels much superior, but if your a doof like me and didn’t read\nthe manual before you \u003ccode\u003erm /tmp/another -rf\u003c/code\u003e you will notice that the worktree\nis still active.  If you run \u003ccode\u003egit worktree prune\u003c/code\u003e it will clean that right up.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree remove another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm /tmp/another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit worktree prune\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"it-wont-let-you-remove-if-you-have-changes\"\u003eIt won’t let you remove if you have changes \u003ca href=\"#it-wont-let-you-remove-if-you-have-changes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis makes me think that \u003ccode\u003eremove\u003c/code\u003e is a much safer option.  If you have\nuncommitted changes, \u003ccode\u003egit worktree remove\u003c/code\u003e will throw an error, and make you\ncommit or use \u003ccode\u003e--force\u003c/code\u003e to remove the worktree.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git worktree remove another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efatal: \u003cspan class=\"s1\"\u003e\u0026#39;another\u0026#39;\u003c/span\u003e contains modified or untracked files, use --force to delete it\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"rtfm\"\u003eRTFM \u003ca href=\"#rtfm\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eread the friendly manual\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThere is a ton more information in the man page for worktrees, these are just\nthe parts that seemed really useful to me out of the gate.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eman git worktree\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nSo worktrees, I always thought they were a big scary things.  Turns out they\nare much simpler than I thought.\n\n## Myth #1\n_no special setup_\n\nI thought you had to be all in or worktrees or normal git, but not both.  When\nI see folks go all in on worktrees they start with a bare repo, while its true\nthis is the way you go all in, its not true that this is required.\n\n## Lets make a worktree\n\nMaking a worktree is as easy as making a branch.  It's actually just a branch\nthat lives in another place in your filesystem.\n\n``` bash\n# checkout a new worktree called compare based on main in /tmp/project\ngit worktree add -b compare /tmp/project main\n\n# checkout a new worktree called compare based on HEAD in /tmp/project\ngit worktree add -b compare /tmp/project\n\n# checkout a worktree from an existing feature branch in /tmp/project\ngit worktree add /tmp/project my-existing-feature-branch\n```\n\n\u003e The worktree that you create is considered a _linked worktree_, while the\n\u003e original worktree is called the _main worktree_\n\nNote that I put this in my tmp directory because I don't expect it to live very\nlong, my recent use case was to compare two files after a big formatting\nchange.  You put these where you want, but dont come at me when your /tmp gets\nwiped and you loose work.\n\n ## Myth #2\n _they are hidden mysterious creatures_\n\nJust like branches git has some nice commands to help us understand what\nworktrees we have on our system.  Firstly we have something very specific to\nworktrees to list them out.\n\n``` bash\ngit worktree list\n```\n\ngives the output\n\n``` bash\n/home/u_walkews/git/git-work-play  b202442 [main]\n/tmp/another                       d9b2cf1 [another]\n```\n\nEven the branch command gives a bit different output for a worktree.\n\n``` bash\ngit branch\n```\n\ngives this output, notice the + denotes an actively linked worktree, and the *\ngives the active branch.  If you cd over to the worktree directory, these will\nswitch roles.\n\n``` bash\n+ another\n  just-a-branch\n* main\n```\n\n## You can only checkout a branch in one place\n\nIf you try to checkout a branch that is checked out in a linked worktree, you\nwill be presented with an error, and it will not let you check out a second\ncopy of that branch.\n\n```\n❯ git checkout another\nfatal: 'another' is already checked out at '/tmp/another'\n```\n\n## Myth #3\n_once you go worktree, you worktree_\n\nOnce you have worktrees on your system, you have a few ways to get rid of them.\nUsing git's way feels much superior, but if your a doof like me and didn't read\nthe manual before you `rm /tmp/another -rf` you will notice that the worktree\nis still active.  If you run `git worktree prune` it will clean that right up.\n\n``` bash\ngit worktree remove another\n\nrm /tmp/another\ngit worktree prune\n```\n\n## It won't let you remove if you have changes\n\nThis makes me think that `remove` is a much safer option.  If you have\nuncommitted changes, `git worktree remove` will throw an error, and make you\ncommit or use `--force` to remove the worktree.\n\n``` bash\n❯ git worktree remove another\nfatal: 'another' contains modified or untracked files, use --force to delete it\n```\n\n## RTFM\n_read the friendly manual_\n\nThere is a ton more information in the man page for worktrees, these are just\nthe parts that seemed really useful to me out of the gate.\n\n``` bash\nman git worktree\n```\n",
      "summary": "So worktrees, I always thought they were a big scary things. Turns out they are much simpler than I thought.",
      "date_published": "2022-03-10T19:19:34Z",
      "date_modified": "2022-03-10T19:19:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "cli",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nicoddemus-pytest-rich/",
      "url": "https://go.waylonwalker.com/nicoddemus-pytest-rich/",
      "title": "⭐ nicoddemus pytest-rich",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/nicoddemus\" 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\"\u003enicoddemus\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/nicoddemus/pytest-rich\" 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\"\u003epytest-rich\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003epytest + rich integration (proof of concept)\u003c/p\u003e\n",
      "content_text": "\n[nicoddemus](https://github.com/nicoddemus) has done a fantastic job with [pytest-rich](https://github.com/nicoddemus/pytest-rich). Highly recommend taking a look.\n\npytest + rich integration (proof of concept)\n",
      "summary": "nicoddemus has done a fantastic job with pytest-rich. Highly recommend taking a look.",
      "date_published": "2022-03-09T14:51:32Z",
      "date_modified": "2022-03-09T14:51:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-push-default-current/",
      "url": "https://go.waylonwalker.com/git-push-default-current/",
      "title": "Configure Git to Always Push to the Current Branch",
      "content_html": "\u003cp\u003eHas no upstream branch errors in \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e can be such a damn productivity killer.\nYou gotta stop your flow and swap over the branch, there is a config so that\nyou don’t have to do this.\u003c/p\u003e\n\u003ch2 id=\"fatal-has-no-upstream-branch\"\u003e\u003cstrong\u003efatal\u003c/strong\u003e has no upstream branch \u003ca href=\"#fatal-has-no-upstream-branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you have not yet configured git to always push to the current branch, you\nwill get a \u003ccode\u003ehas no upstream branch\u003c/code\u003e error if you don’t explicitly set it.\u003c/p\u003e\n\u003cp\u003eLet’s show an example\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b feat/ingest-inventory-data\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add conf/base/catalog.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;feat: ingest inventory data from abc-db\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou will be presented with the following error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efatal: The current branch feat/ingest-inventory-data has no upstream branch.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTo push the current branch and \u003cspan class=\"nb\"\u003eset\u003c/span\u003e the remote as upstream, use\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    git push --set-upstream origin feat/ingest-inventory-data\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"option-1-follow-the-instructions\"\u003eOption 1: follow the instructions \u003ca href=\"#option-1-follow-the-instructions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo resolve this fatal error your first option is simply to follow the\ninstructions given.  Just copy and paste it in.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push --set-upstream origin feat/ingest-inventory-data\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"option-2-push-to-the-current-branch-without-setting-upstream\"\u003eOption 2: push to the current branch without setting upstream \u003ca href=\"#option-2-push-to-the-current-branch-without-setting-upstream\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHonestly, I am pretty aware of the branch I am on, and Very few times have I\never accidentally pushed to the wrong branch.  The one that you might have a\nbigger chance with a more detrimental effect is \u003ccode\u003emain\u003c/code\u003e, which I will argue you\nshould have blocked to require a passing \u003ccode\u003eci\u003c/code\u003e, and potential reviewers to\nmerge in.  Therefore you can’t even push to \u003ccode\u003emain\u003c/code\u003e anyway.\u003c/p\u003e\n\u003cp\u003eTo just push to the branch you are currently on each and every time and never\nsee this error again, you can run this to configure git to always push to your\ncurrent branch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global push.default current\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nHas no upstream branch errors in git can be such a damn productivity killer.\nYou gotta stop your flow and swap over the branch, there is a config so that\nyou don't have to do this.\n\n## **fatal** has no upstream branch\n\nIf you have not yet configured git to always push to the current branch, you\nwill get a `has no upstream branch` error if you don't explicitly set it.\n\nLet's show an example\n\n``` bash\ngit checkout -b feat/ingest-inventory-data\ngit add conf/base/catalog.yml\ngit commit -m \"feat: ingest inventory data from abc-db\"\ngit push\n```\n\nYou will be presented with the following error.\n\n``` bash\nfatal: The current branch feat/ingest-inventory-data has no upstream branch.\nTo push the current branch and set the remote as upstream, use\n\n    git push --set-upstream origin feat/ingest-inventory-data\n```\n## Option 1: follow the instructions\n\nTo resolve this fatal error your first option is simply to follow the\ninstructions given.  Just copy and paste it in.\n\n``` bash\ngit push --set-upstream origin feat/ingest-inventory-data\n```\n\n## Option 2: push to the current branch without setting upstream\n\nHonestly, I am pretty aware of the branch I am on, and Very few times have I\never accidentally pushed to the wrong branch.  The one that you might have a\nbigger chance with a more detrimental effect is `main`, which I will argue you\nshould have blocked to require a passing `ci`, and potential reviewers to\nmerge in.  Therefore you can't even push to `main` anyway.\n\nTo just push to the branch you are currently on each and every time and never\nsee this error again, you can run this to configure git to always push to your\ncurrent branch.\n\n``` bash\ngit config --global push.default current\n```\n",
      "summary": "Has no upstream branch errors in git can be such a damn productivity killer. You gotta stop your flow and swap over the branch, there is a config so that you...",
      "date_published": "2022-03-09T13:45:18Z",
      "date_modified": "2022-03-09T13:45:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/open-ssh-setup/",
      "url": "https://go.waylonwalker.com/open-ssh-setup/",
      "title": "Setup SSH from chromebook to home desktop",
      "content_html": "\u003cp\u003eI write many of these posts from a 10 year old desktop that sits in my\noffice these days.  It does a very fine job running all of the things I\nneed it to for my side work, but sometimes I want a mobile setup.  I\ndon’t really want to spend the $$ on a new laptop just for the few times\nI want to be somewhere else in the house.  What I do have though is a\nchromebook.\u003c/p\u003e\n\u003cp\u003eI’ve tried to get the chromebook into my workflow in the past, but have\nfailed.  Much because by the time I got all of my tools up and running\nin the linux vm it was taking up quite a bit of space on the device and\nmade it harder for others to use as a chromebook.\u003c/p\u003e\n\u003cp\u003eToday I am giving it a second try, but this time with ssh.\u003c/p\u003e\n\u003ch2 id=\"checking-for-existing-sshd\"\u003eChecking for existing sshd \u003ca href=\"#checking-for-existing-sshd\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBefore doing anything I checked to see if sshd is already running. Using\nthe following command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo service ssh status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epgrep -l sshd\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBoth returned nothing so I know that its not running.\u003c/p\u003e\n\u003ch2 id=\"setting-up-sshd\"\u003esetting up sshd \u003ca href=\"#setting-up-sshd\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ejust apt install it\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNext install the openssh-client and openssh-server\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install openssh-client -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install openssh-server -y\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAfter this I can see that its now running by checking its status once\nagain.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo service ssh status\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eGives me the result.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e● ssh.service - OpenBSD Secure Shell server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     Loaded: loaded \u003cspan class=\"o\"\u003e(\u003c/span\u003e/lib/systemd/system/ssh.service\u003cspan class=\"p\"\u003e;\u003c/span\u003e enabled\u003cspan class=\"p\"\u003e;\u003c/span\u003e vendor preset: enabled\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     Active: active \u003cspan class=\"o\"\u003e(\u003c/span\u003erunning\u003cspan class=\"o\"\u003e)\u003c/span\u003e since Tue 2022-03-08 08:17:05 CST\u003cspan class=\"p\"\u003e;\u003c/span\u003e 12min ago\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       Docs: man:sshd\u003cspan class=\"o\"\u003e(\u003c/span\u003e8\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             man:sshd_config\u003cspan class=\"o\"\u003e(\u003c/span\u003e5\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Process: \u003cspan class=\"m\"\u003e181185\u003c/span\u003e \u003cspan class=\"nv\"\u003eExecStartPre\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/sbin/sshd -t \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003ecode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eexited, \u003cspan class=\"nv\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e0/SUCCESS\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   Main PID: \u003cspan class=\"m\"\u003e181189\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003esshd\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      Tasks: \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003elimit: 19119\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     Memory: 2.8M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        CPU: 96ms\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     CGroup: /system.slice/ssh.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             └─181189 sshd: /usr/sbin/sshd -D \u003cspan class=\"o\"\u003e[\u003c/span\u003elistener\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e of 10-100 startups\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"accessing-the-desktop\"\u003eAccessing the desktop \u003ca href=\"#accessing-the-desktop\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have already enabled the Linux terminal on my chromebook, so I just\nopened the terminal, and ran the following.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh \u0026lt;username\u0026gt;@\u0026lt;ip-address\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt prompted for my password and I was in.  I had all of my vim, tmux,\nand zsh comforts that I enjoy without installing anything.  It worked so\nwell that this whole post was written from my chromebook.\u003c/p\u003e\n\u003ch2 id=\"limitations\"\u003eLimitations \u003ca href=\"#limitations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis does limit me to being on the same network as my desktop, which\nthese days is almost always true.\u003c/p\u003e\n\u003ch2 id=\"ssh-keys\"\u003essh keys \u003ca href=\"#ssh-keys\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOut of the box I am just using passwords to get in, but if this were\npublic I would lock down to requiring an ssh key to enter.  I’ll likey\ndo this in a future post.\u003c/p\u003e\n",
      "content_text": "\nI write many of these posts from a 10 year old desktop that sits in my\noffice these days.  It does a very fine job running all of the things I\nneed it to for my side work, but sometimes I want a mobile setup.  I\ndon't really want to spend the $$ on a new laptop just for the few times\nI want to be somewhere else in the house.  What I do have though is a\nchromebook.\n\nI've tried to get the chromebook into my workflow in the past, but have\nfailed.  Much because by the time I got all of my tools up and running\nin the linux vm it was taking up quite a bit of space on the device and\nmade it harder for others to use as a chromebook.\n\nToday I am giving it a second try, but this time with ssh.\n\n## Checking for existing sshd\n\nBefore doing anything I checked to see if sshd is already running. Using\nthe following command.\n\n``` bash\nsudo service ssh status\n# or\npgrep -l sshd\n```\n\nBoth returned nothing so I know that its not running.\n\n## setting up sshd\n\n_just apt install it_\n\nNext install the openssh-client and openssh-server\n\n``` bash\nsudo apt install openssh-client -y\nsudo apt install openssh-server -y\n```\n\nAfter this I can see that its now running by checking its status once\nagain.\n\n\n``` bash\nsudo service ssh status\n```\n\nGives me the result.\n\n``` bash\n● ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n     Active: active (running) since Tue 2022-03-08 08:17:05 CST; 12min ago\n       Docs: man:sshd(8)\n             man:sshd_config(5)\n    Process: 181185 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)\n   Main PID: 181189 (sshd)\n      Tasks: 1 (limit: 19119)\n     Memory: 2.8M\n        CPU: 96ms\n     CGroup: /system.slice/ssh.service\n             └─181189 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups\n```\n\n## Accessing the desktop\n\nI have already enabled the Linux terminal on my chromebook, so I just\nopened the terminal, and ran the following.\n\n``` bash\nssh \u003cusername\u003e@\u003cip-address\u003e\n```\n\nIt prompted for my password and I was in.  I had all of my vim, tmux,\nand zsh comforts that I enjoy without installing anything.  It worked so\nwell that this whole post was written from my chromebook.\n\n## Limitations\n\nThis does limit me to being on the same network as my desktop, which\nthese days is almost always true.\n\n## ssh keys\n\nOut of the box I am just using passwords to get in, but if this were\npublic I would lock down to requiring an ssh key to enter.  I'll likey\ndo this in a future post.\n",
      "summary": "I write many of these posts from a 10 year old desktop that sits in my office these days. It does a very fine job running all of the things I need it to for...",
      "date_published": "2022-03-08T14:20:52Z",
      "date_modified": "2022-03-08T14:20:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/patrick-kidger-mkposters/",
      "url": "https://go.waylonwalker.com/patrick-kidger-mkposters/",
      "title": "⭐ patrick-kidger mkposters",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/patrick-kidger\" 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\"\u003epatrick-kidger\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/patrick-kidger/mkposters\" 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\"\u003emkposters\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eMake posters from Markdown files.\u003c/p\u003e\n",
      "content_text": "\n[patrick-kidger](https://github.com/patrick-kidger) has done a fantastic job with [mkposters](https://github.com/patrick-kidger/mkposters). Highly recommend taking a look.\n\nMake posters from Markdown files.\n",
      "summary": "patrick-kidger has done a fantastic job with mkposters. Highly recommend taking a look.",
      "date_published": "2022-03-08T02:00:44Z",
      "date_modified": "2022-03-08T02:00:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mermaid-highlight/",
      "url": "https://go.waylonwalker.com/mermaid-highlight/",
      "title": "Mermaid Highlight",
      "content_html": "\u003cp\u003eMermaid gives us a way to style nodes through the use of css, but rather than\nusing normal css selectors we need to use \u003ccode\u003estyle \u0026lt;nodeid\u0026gt;\u003c/code\u003e.  This also applies\nto subgraphs, and we can use the name of the subgraph in place of the nodeid.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egraph\u003c/span\u003e \u003cspan class=\"no\"\u003eTD\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eA\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eA\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eB\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eB\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eC\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"n\"\u003eA\u003c/span\u003e \u003cspan class=\"ss\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"c1\"\u003e#f9f,stroke:#333,stroke-width:4px\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"n\"\u003eB\u003c/span\u003e \u003cspan class=\"ss\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"c1\"\u003e#f9f,stroke:#333,stroke-width:4px\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esubgraph\u003c/span\u003e \u003cspan class=\"n\"\u003eone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ea\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"n\"\u003eone\u003c/span\u003e \u003cspan class=\"ss\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"c1\"\u003e#BADA55\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eproduces the following graph\u003c/p\u003e\n\u003cscript src=\"https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js\"\u003e\u003c/script\u003e\n\u003cdiv class=\"mermaid\"\u003e\ngraph TD;\na --\u0026gt; A\nA --\u0026gt; B\nB --\u0026gt; C\nstyle A fill:#f9f,stroke:#333,stroke-width:4px\nstyle B fill:#f9f,stroke:#333,stroke-width:4px\nsubgraph one\n  a\nend\n\u003cp\u003estyle one fill:#BADA55\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cscript type=\"module\"\u003e\n  import mermaid from '/assets/vendor/mermaid/mermaid.esm.min.mjs';\n  const rootStyle = getComputedStyle(document.documentElement);\n  const css = (name, fallback) =\u003e (rootStyle.getPropertyValue(name) || fallback).trim();\n  const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches ||\n    document.documentElement.dataset.theme === 'dark';\n  const accent = css('--color-primary', '#ffcd11');\n  const flowchart = {\n    nodeSpacing: 60,\n    rankSpacing: 90,\n    padding: 12,\n  };\n  const themeCSS = `\n    .label foreignObject \u003e div { padding: 14px 14px 10px; line-height: 1.2; }\n    .nodeLabel { padding: 14px 14px 10px; line-height: 1.2; }\n    * { cursor: pointer; }\n  `;\n  const themeVariables = {\n    background: css('--color-background', '#ffffff'),\n    primaryColor: css('--color-code-bg', '#0a0a0a'),\n    primaryTextColor: css('--color-text', '#1f2937'),\n    primaryBorderColor: accent,\n    lineColor: accent,\n    textColor: css('--color-text', '#1f2937'),\n    nodeBkg: css('--color-code-bg', '#0a0a0a'),\n    nodeBorder: accent,\n    nodeTextColor: css('--color-text', '#1f2937'),\n    fontSize: '16px',\n    nodePadding: 20,\n    nodeTextMargin: 14,\n    clusterBkg: isDark ? css('--color-background', '#0f0f0f') : css('--color-surface', '#f9fafb'),\n    clusterBorder: accent,\n    clusterTextColor: css('--color-text', '#1f2937'),\n    titleColor: css('--color-text', '#1f2937'),\n    edgeLabelBackground: css('--color-code-bg', '#0a0a0a'),\n  };\n\n  const SVG_PAN_ZOOM_CDN = 'https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.2/dist/svg-pan-zoom.min.js';\n  let mermaidLightbox = null;\n  let activePanZoom = null;\n\n  // Inject lightbox styles once\n  const injectLightboxStyles = () =\u003e {\n    if (document.getElementById('mermaid-lightbox-css')) return;\n    const style = document.createElement('style');\n    style.id = 'mermaid-lightbox-css';\n    style.textContent = `\n      /* Container fills the GLightbox slide */\n      .mermaid-lightbox-wrap {\n        width: 100%;\n        height: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        background: transparent;\n        position: relative;\n      }\n      .mermaid-lightbox-wrap svg {\n        width: 100% !important;\n        height: 100% !important;\n        max-width: 100%;\n        max-height: 100%;\n      }\n      /* Hide GLightbox prev/next arrows (single-slide lightbox) */\n      .glightbox-container .gprev,\n      .glightbox-container .gnext {\n        display: none !important;\n      }\n      /* Hide description area that renders as a white box */\n      .glightbox-container .gslide-description,\n      .glightbox-container .gslide-title,\n      .glightbox-container .gdesc-inner,\n      .glightbox-container .gslide-desc {\n        display: none !important;\n      }\n      /* Remove white background from inline slide content */\n      .glightbox-container .gslide-inline {\n        background: transparent !important;\n      }\n      /* Make the inline content area fill the slide */\n      .glightbox-container .ginlined-content {\n        max-width: none !important;\n        max-height: none !important;\n        width: 100%;\n        height: 100%;\n        padding: 0 !important;\n      }\n      /* Remove box-shadow from the media container */\n      .glightbox-container .gslide-media {\n        box-shadow: none !important;\n      }\n      /* Toolbar styling */\n      .mermaid-lightbox-toolbar {\n        position: absolute;\n        top: 8px;\n        right: 8px;\n        z-index: 10;\n        display: flex;\n        gap: 4px;\n      }\n      .mermaid-pz-btn {\n        background: rgba(0,0,0,0.6);\n        color: #fff;\n        border: 1px solid rgba(255,255,255,0.3);\n        border-radius: 4px;\n        padding: 4px 10px;\n        cursor: pointer;\n        font-size: 14px;\n        line-height: 1;\n      }\n      .mermaid-pz-btn:hover {\n        background: rgba(0,0,0,0.8);\n        border-color: rgba(255,255,255,0.6);\n      }\n    `;\n    document.head.appendChild(style);\n  };\n\n  // Lazy-load svg-pan-zoom from CDN, returns a promise\n  const loadSvgPanZoom = () =\u003e {\n    if (typeof svgPanZoom !== 'undefined') return Promise.resolve();\n    return new Promise((resolve, reject) =\u003e {\n      const s = document.createElement('script');\n      s.src = SVG_PAN_ZOOM_CDN;\n      s.onload = resolve;\n      s.onerror = reject;\n      document.head.appendChild(s);\n    });\n  };\n\n  // Initialize svg-pan-zoom on the SVG inside the lightbox.\n  // Retries until the lightbox container has settled dimensions.\n  let _pzRetries = 0;\n  const initPanZoom = () =\u003e {\n    if (activePanZoom) return;\n    const container = document.querySelector('.glightbox-container .gslide.current .mermaid-lightbox-wrap');\n    if (!container) return;\n    const svgEl = container.querySelector('svg');\n    if (!svgEl) return;\n\n    // Ensure the container has layout dimensions before initializing.\n    const cRect = container.getBoundingClientRect();\n    if (cRect.width \u003c 10 || cRect.height \u003c 10) {\n      if (_pzRetries \u003c 20) { _pzRetries++; setTimeout(initPanZoom, 50); }\n      return;\n    }\n\n    // svg-pan-zoom needs a viewBox. Pre-rendered SVGs from mermaid\n    // usually have one; browser-rendered ones may not.\n    if (!svgEl.getAttribute('viewBox')) {\n      let w = parseFloat(svgEl.getAttribute('width'));\n      let h = parseFloat(svgEl.getAttribute('height'));\n      if (!w \u0026\u0026 svgEl.style.maxWidth) w = parseFloat(svgEl.style.maxWidth);\n      if (!w || !h) {\n        const r = svgEl.getBoundingClientRect();\n        if (!w) w = r.width;\n        if (!h) h = r.height;\n      }\n      if (w \u003e 0 \u0026\u0026 h \u003e 0) {\n        svgEl.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n      } else if (_pzRetries \u003c 20) {\n        _pzRetries++; setTimeout(initPanZoom, 50); return;\n      }\n    }\n    _pzRetries = 0;\n\n    // Clear inline dimensions so SVG can be sized by the container\n    // and svg-pan-zoom can manage transforms.\n    svgEl.removeAttribute('width');\n    svgEl.removeAttribute('height');\n    svgEl.style.cssText = 'width:100%;height:100%;';\n\n    try {\n      activePanZoom = svgPanZoom(svgEl, {\n        zoomEnabled: true,\n        panEnabled: true,\n        controlIconsEnabled: false,\n        fit: true,\n        center: true,\n        contain: false,\n        minZoom: 0.3,\n        maxZoom: 10,\n        zoomScaleSensitivity: 0.3,\n        mouseWheelZoomEnabled: true,\n        preventMouseEventsDefault: true,\n      });\n      // Double-check fit after a frame in case dimensions shifted\n      requestAnimationFrame(() =\u003e {\n        if (!activePanZoom) return;\n        activePanZoom.resize();\n        activePanZoom.fit();\n        activePanZoom.center();\n      });\n    } catch (_) {\n      activePanZoom = null;\n    }\n\n    // Add reset/fit buttons\n    let toolbar = container.querySelector('.mermaid-lightbox-toolbar');\n    if (!toolbar) {\n      toolbar = document.createElement('div');\n      toolbar.className = 'mermaid-lightbox-toolbar';\n      toolbar.innerHTML =\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"fit\" title=\"Fit to view\"\u003eFit\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomin\" title=\"Zoom in\"\u003e+\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomout\" title=\"Zoom out\"\u003e\u0026minus;\u003c/button\u003e';\n      toolbar.addEventListener('click', (ev) =\u003e {\n        const btn = ev.target.closest('[data-action]');\n        if (!btn || !activePanZoom) return;\n        ev.preventDefault();\n        ev.stopPropagation();\n        const action = btn.dataset.action;\n        if (action === 'fit') { activePanZoom.resize(); activePanZoom.fit(); activePanZoom.center(); }\n        else if (action === 'zoomin') { activePanZoom.zoomIn(); }\n        else if (action === 'zoomout') { activePanZoom.zoomOut(); }\n      });\n      container.prepend(toolbar);\n    }\n  };\n\n  // Destroy pan-zoom on lightbox close\n  const destroyPanZoom = () =\u003e {\n    if (activePanZoom) {\n      try { activePanZoom.destroy(); } catch (_) { /* no-op */ }\n      activePanZoom = null;\n    }\n  };\n\n  let _lbRetries = 0;\n  const ensureMermaidLightbox = () =\u003e {\n    const diagrams = document.querySelectorAll('.mermaid svg');\n    if (!diagrams.length) {\n      // Mermaid ESM may still be rendering -- retry up to 2s\n      if (_lbRetries \u003c 20) { _lbRetries++; setTimeout(ensureMermaidLightbox, 100); }\n      return;\n    }\n    _lbRetries = 0;\n    injectLightboxStyles();\n    diagrams.forEach((svg) =\u003e {\n      if (svg.dataset.lightboxBound) return;\n      svg.dataset.lightboxBound = 'true';\n      svg.style.cursor = 'pointer';\n      svg.addEventListener('click', (e) =\u003e {\n        e.preventDefault();\n        e.stopPropagation();\n        const svgHtml = svg.outerHTML;\n        const openLightbox = () =\u003e {\n          if (!mermaidLightbox) {\n            mermaidLightbox = GLightbox({\n              selector: false,\n              openEffect: 'fade',\n              closeEffect: 'fade',\n              zoomable: false,\n              draggable: false,\n              skin: 'clean',\n            });\n            mermaidLightbox.on('slide_after_load', () =\u003e {\n              destroyPanZoom();\n              _pzRetries = 0;\n              loadSvgPanZoom().then(() =\u003e initPanZoom());\n            });\n            mermaidLightbox.on('close', destroyPanZoom);\n          }\n          mermaidLightbox.setElements([{\n            content: '\u003cdiv class=\"mermaid-lightbox-wrap\"\u003e' + svgHtml + '\u003c/div\u003e',\n            width: '90vw',\n            height: '90vh'\n          }]);\n          mermaidLightbox.open();\n          loadSvgPanZoom();\n        };\n        if (typeof GLightbox !== 'undefined') {\n          openLightbox();\n        } else if (window.initGLightbox) {\n          window.initGLightbox();\n          openLightbox();\n        } else {\n          window.addEventListener('glightbox-ready', () =\u003e { openLightbox(); }, { once: true });\n        }\n      });\n    });\n  };\n\n  mermaid.initialize({ startOnLoad: false, theme: 'base', themeVariables, flowchart, themeCSS });\n  window.initMermaid = async () =\u003e {\n    try {\n      await mermaid.run();\n    } catch (e) {\n      console.error('mermaid.run failed:', e);\n    }\n    ensureMermaidLightbox();\n  };\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () =\u003e window.initMermaid());\n  } else {\n    window.initMermaid();\n  }\n\u003c/script\u003e",
      "content_text": "\nMermaid gives us a way to style nodes through the use of css, but rather than\nusing normal css selectors we need to use `style \u003cnodeid\u003e`.  This also applies\nto subgraphs, and we can use the name of the subgraph in place of the nodeid.\n\n``` ruby\ngraph TD;\n    a --\u003e A\n    A --\u003e B\n    B --\u003e C\n\n    style A fill:#f9f,stroke:#333,stroke-width:4px\n    style B fill:#f9f,stroke:#333,stroke-width:4px\n\n    subgraph one\n        a\n    end\n\n    style one fill:#BADA55\n```\n\nproduces the following graph\n\n\u003cscript src='https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js'\u003e\u003c/script\u003e\n\u003cdiv class='mermaid'\u003e\ngraph TD;\na --\u003e A\nA --\u003e B\nB --\u003e C\nstyle A fill:#f9f,stroke:#333,stroke-width:4px\nstyle B fill:#f9f,stroke:#333,stroke-width:4px\nsubgraph one\n  a\nend\n\nstyle one fill:#BADA55\n\u003c/div\u003e\n",
      "summary": "Mermaid gives us a way to style nodes through the use of css, but rather than using normal css selectors we need to use . This also applies to subgraphs, and...",
      "date_published": "2022-03-07T07:22:04Z",
      "date_modified": "2022-03-07T07:22:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvr-open-files/",
      "url": "https://go.waylonwalker.com/nvr-open-files/",
      "title": "Open Files with Nvim Remote",
      "content_html": "\u003cp\u003eI recently found a really great \u003ca href=\"https://github.com/mhinz/neovim-remote\" 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\"\u003eplugin\u003c/a\u003e by\n\u003ca href=\"https://github.com/mhinz\" 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\"\u003emhinz\u003c/a\u003e to open files in neovim from a\ndifferent tmux split, without touching neovim at all.\u003c/p\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/mhinz/neovim-remote\" 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\"\u003eneovim-remote\u003c/a\u003e is not a neovim\nplugin at all, it’s a python cli that you can install with pip.  Unlike\nthe repo suggests, I use pipx to install \u003ccode\u003envr\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install neovim-remote\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"how-i-use-it\"\u003eHow I use it \u003ca href=\"#how-i-use-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have this added to my \u003ccode\u003e.envrc\u003c/code\u003e that is in every one of my projects.\nThis will tie a neovim session to that directory, and all directories\nunder it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eNVIM_LISTEN_ADDRESS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/tmp/nvim-\u003cspan class=\"k\"\u003e$(\u003c/span\u003ebasename \u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eIn my workflow I open a tmux session for each project, so this\nessentially ties a neovim session to a tmux session.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"open-neovim\"\u003eOpen neovim \u003ca href=\"#open-neovim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eFirst open neovim, but with the \u003ccode\u003envr\u003c/code\u003e command.  This will open neovim,\nand look pretty much the same as always.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envr\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you try to run \u003ccode\u003envr\u003c/code\u003e again in another shell nothing will happen as\nits already runnin under that address, but if you give it a filename it\nwill open the file in the first instance of neovim that you opened.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envr readme.md\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mhinz/neovim-remote\" 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\"\u003eGitHub\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nI recently found a really great [plugin](https://github.com/mhinz/neovim-remote) by\n[mhinz](https://github.com/mhinz) to open files in neovim from a\ndifferent tmux split, without touching neovim at all.\n\n## Installation\n\n[neovim-remote](https://github.com/mhinz/neovim-remote) is not a neovim\nplugin at all, it's a python cli that you can install with pip.  Unlike\nthe repo suggests, I use pipx to install `nvr`.\n\n\n``` bash\npipx install neovim-remote\n```\n\n## How I use it\n\nI have this added to my `.envrc` that is in every one of my projects.\nThis will tie a neovim session to that directory, and all directories\nunder it.\n\n``` bash\nexport NVIM_LISTEN_ADDRESS=/tmp/nvim-$(basename $PWD)\n```\n\n\u003e In my workflow I open a tmux session for each project, so this\n\u003e essentially ties a neovim session to a tmux session.\n\n### Open neovim\n\nFirst open neovim, but with the `nvr` command.  This will open neovim,\nand look pretty much the same as always.\n\n``` bash\nnvr\n```\n\nIf you try to run `nvr` again in another shell nothing will happen as\nits already runnin under that address, but if you give it a filename it\nwill open the file in the first instance of neovim that you opened.\n\n``` bash\nnvr readme.md\n````\n\n## Links\n\n* [GitHub](https://github.com/mhinz/neovim-remote)\n",
      "summary": "I recently found a really great plugin by mhinz to open files in neovim from a different tmux split, without touching neovim at all.",
      "date_published": "2022-03-06T16:22:49Z",
      "date_modified": "2022-03-06T16:22:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "vim",
        "tmux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mermaid-subgraphs/",
      "url": "https://go.waylonwalker.com/mermaid-subgraphs/",
      "title": "Grouping Mermaid nodes in Subgraphs",
      "content_html": "\u003cp\u003eMermaid provides some really great ways to group or fence in parts of your\ngraphs through the use of subgraphs.\u003c/p\u003e\n\u003cp\u003eHere we can model some sort of data ingest with some raw iot device and our\nwarehouse in different groups.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egraph TD;\n\n    subgraph raw_iot\n        a\n    end\n\n    subgraph warehouse\n        A --\u0026gt; B\n        B --\u0026gt; C\n    end\n\u003c/code\u003e\u003c/pre\u003e\n\u003cscript src=\"https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js\"\u003e\u003c/script\u003e\n\u003cdiv class=\"mermaid\"\u003e\ngraph TD;\n\u003cpre\u003e\u003ccode\u003esubgraph raw_iot\n    a\nend\n\nsubgraph warehouse\n    A --\u0026gt; B\n    B --\u0026gt; C\nend\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 id=\"connecting-subgroups\"\u003econnecting subgroups \u003ca href=\"#connecting-subgroups\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf we want to connect them, we can make a connection between a and A outside of\nthe subgraphs.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egraph TD;\n\n    subgraph raw_iot\n        a\n    end\n\n    a --\u0026gt; A\n\n    subgraph warehouse\n        A --\u0026gt; B\n        B --\u0026gt; C\n    end\n\u003c/code\u003e\u003c/pre\u003e\n\u003cscript src=\"https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js\"\u003e\u003c/script\u003e\n\u003cdiv class=\"mermaid\"\u003e\ngraph TD;\n\u003cpre\u003e\u003ccode\u003esubgraph raw_iot\n    a\nend\n\na --\u0026gt; A\n\nsubgraph warehouse\n    A --\u0026gt; B\n    B --\u0026gt; C\nend\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 id=\"separation-of-concerns\"\u003eseparation of concerns \u003ca href=\"#separation-of-concerns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt’s also possible to specify subgraphs separate from where you define your\nnodes. which allows for some different levels of grouping that would not be\npossible if you were to define all your nodes inside of a subgraph.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egraph TD;\n    a --\u0026gt; A\n    A --\u0026gt; B\n    B --\u0026gt; C\n\n    subgraph one\n        A\n        C\n    end\n\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv class=\"mermaid\"\u003e\ngraph TD;\n    a --\u0026gt; A\n    A --\u0026gt; B\n    B --\u0026gt; C\n\u003cpre\u003e\u003ccode\u003esubgraph warehouse\n    A\n    C\nend\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\n\u003cscript type=\"module\"\u003e\n  import mermaid from '/assets/vendor/mermaid/mermaid.esm.min.mjs';\n  const rootStyle = getComputedStyle(document.documentElement);\n  const css = (name, fallback) =\u003e (rootStyle.getPropertyValue(name) || fallback).trim();\n  const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches ||\n    document.documentElement.dataset.theme === 'dark';\n  const accent = css('--color-primary', '#ffcd11');\n  const flowchart = {\n    nodeSpacing: 60,\n    rankSpacing: 90,\n    padding: 12,\n  };\n  const themeCSS = `\n    .label foreignObject \u003e div { padding: 14px 14px 10px; line-height: 1.2; }\n    .nodeLabel { padding: 14px 14px 10px; line-height: 1.2; }\n    * { cursor: pointer; }\n  `;\n  const themeVariables = {\n    background: css('--color-background', '#ffffff'),\n    primaryColor: css('--color-code-bg', '#0a0a0a'),\n    primaryTextColor: css('--color-text', '#1f2937'),\n    primaryBorderColor: accent,\n    lineColor: accent,\n    textColor: css('--color-text', '#1f2937'),\n    nodeBkg: css('--color-code-bg', '#0a0a0a'),\n    nodeBorder: accent,\n    nodeTextColor: css('--color-text', '#1f2937'),\n    fontSize: '16px',\n    nodePadding: 20,\n    nodeTextMargin: 14,\n    clusterBkg: isDark ? css('--color-background', '#0f0f0f') : css('--color-surface', '#f9fafb'),\n    clusterBorder: accent,\n    clusterTextColor: css('--color-text', '#1f2937'),\n    titleColor: css('--color-text', '#1f2937'),\n    edgeLabelBackground: css('--color-code-bg', '#0a0a0a'),\n  };\n\n  const SVG_PAN_ZOOM_CDN = 'https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.2/dist/svg-pan-zoom.min.js';\n  let mermaidLightbox = null;\n  let activePanZoom = null;\n\n  // Inject lightbox styles once\n  const injectLightboxStyles = () =\u003e {\n    if (document.getElementById('mermaid-lightbox-css')) return;\n    const style = document.createElement('style');\n    style.id = 'mermaid-lightbox-css';\n    style.textContent = `\n      /* Container fills the GLightbox slide */\n      .mermaid-lightbox-wrap {\n        width: 100%;\n        height: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        background: transparent;\n        position: relative;\n      }\n      .mermaid-lightbox-wrap svg {\n        width: 100% !important;\n        height: 100% !important;\n        max-width: 100%;\n        max-height: 100%;\n      }\n      /* Hide GLightbox prev/next arrows (single-slide lightbox) */\n      .glightbox-container .gprev,\n      .glightbox-container .gnext {\n        display: none !important;\n      }\n      /* Hide description area that renders as a white box */\n      .glightbox-container .gslide-description,\n      .glightbox-container .gslide-title,\n      .glightbox-container .gdesc-inner,\n      .glightbox-container .gslide-desc {\n        display: none !important;\n      }\n      /* Remove white background from inline slide content */\n      .glightbox-container .gslide-inline {\n        background: transparent !important;\n      }\n      /* Make the inline content area fill the slide */\n      .glightbox-container .ginlined-content {\n        max-width: none !important;\n        max-height: none !important;\n        width: 100%;\n        height: 100%;\n        padding: 0 !important;\n      }\n      /* Remove box-shadow from the media container */\n      .glightbox-container .gslide-media {\n        box-shadow: none !important;\n      }\n      /* Toolbar styling */\n      .mermaid-lightbox-toolbar {\n        position: absolute;\n        top: 8px;\n        right: 8px;\n        z-index: 10;\n        display: flex;\n        gap: 4px;\n      }\n      .mermaid-pz-btn {\n        background: rgba(0,0,0,0.6);\n        color: #fff;\n        border: 1px solid rgba(255,255,255,0.3);\n        border-radius: 4px;\n        padding: 4px 10px;\n        cursor: pointer;\n        font-size: 14px;\n        line-height: 1;\n      }\n      .mermaid-pz-btn:hover {\n        background: rgba(0,0,0,0.8);\n        border-color: rgba(255,255,255,0.6);\n      }\n    `;\n    document.head.appendChild(style);\n  };\n\n  // Lazy-load svg-pan-zoom from CDN, returns a promise\n  const loadSvgPanZoom = () =\u003e {\n    if (typeof svgPanZoom !== 'undefined') return Promise.resolve();\n    return new Promise((resolve, reject) =\u003e {\n      const s = document.createElement('script');\n      s.src = SVG_PAN_ZOOM_CDN;\n      s.onload = resolve;\n      s.onerror = reject;\n      document.head.appendChild(s);\n    });\n  };\n\n  // Initialize svg-pan-zoom on the SVG inside the lightbox.\n  // Retries until the lightbox container has settled dimensions.\n  let _pzRetries = 0;\n  const initPanZoom = () =\u003e {\n    if (activePanZoom) return;\n    const container = document.querySelector('.glightbox-container .gslide.current .mermaid-lightbox-wrap');\n    if (!container) return;\n    const svgEl = container.querySelector('svg');\n    if (!svgEl) return;\n\n    // Ensure the container has layout dimensions before initializing.\n    const cRect = container.getBoundingClientRect();\n    if (cRect.width \u003c 10 || cRect.height \u003c 10) {\n      if (_pzRetries \u003c 20) { _pzRetries++; setTimeout(initPanZoom, 50); }\n      return;\n    }\n\n    // svg-pan-zoom needs a viewBox. Pre-rendered SVGs from mermaid\n    // usually have one; browser-rendered ones may not.\n    if (!svgEl.getAttribute('viewBox')) {\n      let w = parseFloat(svgEl.getAttribute('width'));\n      let h = parseFloat(svgEl.getAttribute('height'));\n      if (!w \u0026\u0026 svgEl.style.maxWidth) w = parseFloat(svgEl.style.maxWidth);\n      if (!w || !h) {\n        const r = svgEl.getBoundingClientRect();\n        if (!w) w = r.width;\n        if (!h) h = r.height;\n      }\n      if (w \u003e 0 \u0026\u0026 h \u003e 0) {\n        svgEl.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n      } else if (_pzRetries \u003c 20) {\n        _pzRetries++; setTimeout(initPanZoom, 50); return;\n      }\n    }\n    _pzRetries = 0;\n\n    // Clear inline dimensions so SVG can be sized by the container\n    // and svg-pan-zoom can manage transforms.\n    svgEl.removeAttribute('width');\n    svgEl.removeAttribute('height');\n    svgEl.style.cssText = 'width:100%;height:100%;';\n\n    try {\n      activePanZoom = svgPanZoom(svgEl, {\n        zoomEnabled: true,\n        panEnabled: true,\n        controlIconsEnabled: false,\n        fit: true,\n        center: true,\n        contain: false,\n        minZoom: 0.3,\n        maxZoom: 10,\n        zoomScaleSensitivity: 0.3,\n        mouseWheelZoomEnabled: true,\n        preventMouseEventsDefault: true,\n      });\n      // Double-check fit after a frame in case dimensions shifted\n      requestAnimationFrame(() =\u003e {\n        if (!activePanZoom) return;\n        activePanZoom.resize();\n        activePanZoom.fit();\n        activePanZoom.center();\n      });\n    } catch (_) {\n      activePanZoom = null;\n    }\n\n    // Add reset/fit buttons\n    let toolbar = container.querySelector('.mermaid-lightbox-toolbar');\n    if (!toolbar) {\n      toolbar = document.createElement('div');\n      toolbar.className = 'mermaid-lightbox-toolbar';\n      toolbar.innerHTML =\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"fit\" title=\"Fit to view\"\u003eFit\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomin\" title=\"Zoom in\"\u003e+\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomout\" title=\"Zoom out\"\u003e\u0026minus;\u003c/button\u003e';\n      toolbar.addEventListener('click', (ev) =\u003e {\n        const btn = ev.target.closest('[data-action]');\n        if (!btn || !activePanZoom) return;\n        ev.preventDefault();\n        ev.stopPropagation();\n        const action = btn.dataset.action;\n        if (action === 'fit') { activePanZoom.resize(); activePanZoom.fit(); activePanZoom.center(); }\n        else if (action === 'zoomin') { activePanZoom.zoomIn(); }\n        else if (action === 'zoomout') { activePanZoom.zoomOut(); }\n      });\n      container.prepend(toolbar);\n    }\n  };\n\n  // Destroy pan-zoom on lightbox close\n  const destroyPanZoom = () =\u003e {\n    if (activePanZoom) {\n      try { activePanZoom.destroy(); } catch (_) { /* no-op */ }\n      activePanZoom = null;\n    }\n  };\n\n  let _lbRetries = 0;\n  const ensureMermaidLightbox = () =\u003e {\n    const diagrams = document.querySelectorAll('.mermaid svg');\n    if (!diagrams.length) {\n      // Mermaid ESM may still be rendering -- retry up to 2s\n      if (_lbRetries \u003c 20) { _lbRetries++; setTimeout(ensureMermaidLightbox, 100); }\n      return;\n    }\n    _lbRetries = 0;\n    injectLightboxStyles();\n    diagrams.forEach((svg) =\u003e {\n      if (svg.dataset.lightboxBound) return;\n      svg.dataset.lightboxBound = 'true';\n      svg.style.cursor = 'pointer';\n      svg.addEventListener('click', (e) =\u003e {\n        e.preventDefault();\n        e.stopPropagation();\n        const svgHtml = svg.outerHTML;\n        const openLightbox = () =\u003e {\n          if (!mermaidLightbox) {\n            mermaidLightbox = GLightbox({\n              selector: false,\n              openEffect: 'fade',\n              closeEffect: 'fade',\n              zoomable: false,\n              draggable: false,\n              skin: 'clean',\n            });\n            mermaidLightbox.on('slide_after_load', () =\u003e {\n              destroyPanZoom();\n              _pzRetries = 0;\n              loadSvgPanZoom().then(() =\u003e initPanZoom());\n            });\n            mermaidLightbox.on('close', destroyPanZoom);\n          }\n          mermaidLightbox.setElements([{\n            content: '\u003cdiv class=\"mermaid-lightbox-wrap\"\u003e' + svgHtml + '\u003c/div\u003e',\n            width: '90vw',\n            height: '90vh'\n          }]);\n          mermaidLightbox.open();\n          loadSvgPanZoom();\n        };\n        if (typeof GLightbox !== 'undefined') {\n          openLightbox();\n        } else if (window.initGLightbox) {\n          window.initGLightbox();\n          openLightbox();\n        } else {\n          window.addEventListener('glightbox-ready', () =\u003e { openLightbox(); }, { once: true });\n        }\n      });\n    });\n  };\n\n  mermaid.initialize({ startOnLoad: false, theme: 'base', themeVariables, flowchart, themeCSS });\n  window.initMermaid = async () =\u003e {\n    try {\n      await mermaid.run();\n    } catch (e) {\n      console.error('mermaid.run failed:', e);\n    }\n    ensureMermaidLightbox();\n  };\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () =\u003e window.initMermaid());\n  } else {\n    window.initMermaid();\n  }\n\u003c/script\u003e",
      "content_text": "\nMermaid provides some really great ways to group or fence in parts of your\ngraphs through the use of subgraphs.\n\nHere we can model some sort of data ingest with some raw iot device and our\nwarehouse in different groups.\n\n```\ngraph TD;\n\n    subgraph raw_iot\n        a\n    end\n\n    subgraph warehouse\n        A --\u003e B\n        B --\u003e C\n    end\n```\n\u003cscript src='https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js'\u003e\u003c/script\u003e\n\u003cdiv class='mermaid'\u003e\ngraph TD;\n\n    subgraph raw_iot\n        a\n    end\n\n    subgraph warehouse\n        A --\u003e B\n        B --\u003e C\n    end\n\u003c/div\u003e\n\n## connecting subgroups\n\nIf we want to connect them, we can make a connection between a and A outside of\nthe subgraphs.\n\n```\ngraph TD;\n\n    subgraph raw_iot\n        a\n    end\n\n    a --\u003e A\n\n    subgraph warehouse\n        A --\u003e B\n        B --\u003e C\n    end\n```\n\u003cscript src='https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js'\u003e\u003c/script\u003e\n\u003cdiv class='mermaid'\u003e\ngraph TD;\n\n    subgraph raw_iot\n        a\n    end\n\n    a --\u003e A\n\n    subgraph warehouse\n        A --\u003e B\n        B --\u003e C\n    end\n\u003c/div\u003e\n\n## separation of concerns\n\nIt's also possible to specify subgraphs separate from where you define your\nnodes. which allows for some different levels of grouping that would not be\npossible if you were to define all your nodes inside of a subgraph.\n\n```\ngraph TD;\n    a --\u003e A\n    A --\u003e B\n    B --\u003e C\n\n    subgraph one\n        A\n        C\n    end\n```\n\n\n\u003cdiv class='mermaid'\u003e\ngraph TD;\n    a --\u003e A\n    A --\u003e B\n    B --\u003e C\n\n    subgraph warehouse\n        A\n        C\n    end\n\u003c/div\u003e\n",
      "summary": "Mermaid provides some really great ways to group or fence in parts of your graphs through the use of subgraphs.",
      "date_published": "2022-03-05T16:23:42Z",
      "date_modified": "2022-03-05T16:23:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-pype-dev/",
      "url": "https://go.waylonwalker.com/pypeaday-pype-dev/",
      "title": "⭐ pypeaday pype.dev",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/pypeaday/pype.dev\" 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\"\u003epype.dev\u003c/a\u003e from \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003emy blog?\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pype.dev](https://github.com/pypeaday/pype.dev) from [pypeaday](https://github.com/pypeaday).\n\nmy blog?\n",
      "summary": "I'm impressed by pype.dev from pypeaday.",
      "date_published": "2022-03-04T21:19:25Z",
      "date_modified": "2022-03-04T21:19:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/datajoely-kedro-rich/",
      "url": "https://go.waylonwalker.com/datajoely-kedro-rich/",
      "title": "⭐ datajoely kedro-rich",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/datajoely/kedro-rich\" 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\"\u003ekedro-rich\u003c/a\u003e by \u003ca href=\"https://github.com/datajoely\" 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\"\u003edatajoely\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eMake your Kedro experience snazzy\u003c/p\u003e\n",
      "content_text": "\nJust starred [kedro-rich](https://github.com/datajoely/kedro-rich) by [datajoely](https://github.com/datajoely). It's an exciting project with a lot to offer.\n\nMake your Kedro experience snazzy\n",
      "summary": "Just starred kedro-rich by datajoely. It's an exciting project with a lot to offer.",
      "date_published": "2022-03-04T20:58:39Z",
      "date_modified": "2022-03-04T20:58:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dedupe-your-shell-paths/",
      "url": "https://go.waylonwalker.com/dedupe-your-shell-paths/",
      "title": "Dedupe your shell paths",
      "content_html": "\u003cp\u003eIf you have ever ran \u003ccode\u003ewhich \u0026lt;command\u0026gt;\u003c/code\u003e and see duplicate entries it’s likely\nthat you have duplicate entries in your $PATH.  You can clean this up with a\none liner at the end of your bashrc or zshrc.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;typeset -U path\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIf you have ever ran `which \u003ccommand\u003e` and see duplicate entries it's likely\nthat you have duplicate entries in your $PATH.  You can clean this up with a\none liner at the end of your bashrc or zshrc.\n\n``` bash\neval \"typeset -U path\"\n```\n",
      "summary": "If you have ever ran and see duplicate entries it's likely that you have duplicate entries in your $PATH. You can clean this up with a one liner at the end...",
      "date_published": "2022-03-04T19:08:49Z",
      "date_modified": "2022-03-04T19:08:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mermaid-html/",
      "url": "https://go.waylonwalker.com/mermaid-html/",
      "title": "Simple Plain Text Diagrams in HTML",
      "content_html": "\u003cp\u003eSince GitHub started supporting mermaid in their markdown I wanted to\ntake another look at how to implement it on my site, I think it has some\nvery nice opportunities in teaching, documenting, and explaining things.\u003c/p\u003e\n\u003cp\u003eThe docs kinda just jumped right into their mermaid language and really\nwent through that in a lot of depth, and skipped over how to implement\nit yourself, turns out its pretty simple. You  just write mermaid syntax\nin a div with a class of mermaid on it!\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e \u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;mermaid\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egraph TD;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ea --\u0026gt; A\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eA --\u0026gt; B\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eB --\u0026gt; C\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ediv\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eYou  just write mermaid syntax in a div with a class of mermaid on\nit!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThe above gets me this diagram.\u003c/p\u003e\n\u003cscript src=\"https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js\"\u003e\u003c/script\u003e\n\u003cdiv class=\"mermaid\"\u003e\ngraph TD;\na --\u0026gt; A\nA --\u0026gt; B\nB --\u0026gt; C\n\u003c/div\u003e\n\u003cp\u003eThis feels so quick and easy to start getting some graphs up and running, but\ndoes lead to layout shift and extra bytes down the pipe.  The best solution in\nmy opionion would be to forgo the js and ship svg.  That said, this is do dang\nconvenient I will be using it for some things.\u003c/p\u003e\n\n\u003cscript type=\"module\"\u003e\n  import mermaid from '/assets/vendor/mermaid/mermaid.esm.min.mjs';\n  const rootStyle = getComputedStyle(document.documentElement);\n  const css = (name, fallback) =\u003e (rootStyle.getPropertyValue(name) || fallback).trim();\n  const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches ||\n    document.documentElement.dataset.theme === 'dark';\n  const accent = css('--color-primary', '#ffcd11');\n  const flowchart = {\n    nodeSpacing: 60,\n    rankSpacing: 90,\n    padding: 12,\n  };\n  const themeCSS = `\n    .label foreignObject \u003e div { padding: 14px 14px 10px; line-height: 1.2; }\n    .nodeLabel { padding: 14px 14px 10px; line-height: 1.2; }\n    * { cursor: pointer; }\n  `;\n  const themeVariables = {\n    background: css('--color-background', '#ffffff'),\n    primaryColor: css('--color-code-bg', '#0a0a0a'),\n    primaryTextColor: css('--color-text', '#1f2937'),\n    primaryBorderColor: accent,\n    lineColor: accent,\n    textColor: css('--color-text', '#1f2937'),\n    nodeBkg: css('--color-code-bg', '#0a0a0a'),\n    nodeBorder: accent,\n    nodeTextColor: css('--color-text', '#1f2937'),\n    fontSize: '16px',\n    nodePadding: 20,\n    nodeTextMargin: 14,\n    clusterBkg: isDark ? css('--color-background', '#0f0f0f') : css('--color-surface', '#f9fafb'),\n    clusterBorder: accent,\n    clusterTextColor: css('--color-text', '#1f2937'),\n    titleColor: css('--color-text', '#1f2937'),\n    edgeLabelBackground: css('--color-code-bg', '#0a0a0a'),\n  };\n\n  const SVG_PAN_ZOOM_CDN = 'https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.2/dist/svg-pan-zoom.min.js';\n  let mermaidLightbox = null;\n  let activePanZoom = null;\n\n  // Inject lightbox styles once\n  const injectLightboxStyles = () =\u003e {\n    if (document.getElementById('mermaid-lightbox-css')) return;\n    const style = document.createElement('style');\n    style.id = 'mermaid-lightbox-css';\n    style.textContent = `\n      /* Container fills the GLightbox slide */\n      .mermaid-lightbox-wrap {\n        width: 100%;\n        height: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        background: transparent;\n        position: relative;\n      }\n      .mermaid-lightbox-wrap svg {\n        width: 100% !important;\n        height: 100% !important;\n        max-width: 100%;\n        max-height: 100%;\n      }\n      /* Hide GLightbox prev/next arrows (single-slide lightbox) */\n      .glightbox-container .gprev,\n      .glightbox-container .gnext {\n        display: none !important;\n      }\n      /* Hide description area that renders as a white box */\n      .glightbox-container .gslide-description,\n      .glightbox-container .gslide-title,\n      .glightbox-container .gdesc-inner,\n      .glightbox-container .gslide-desc {\n        display: none !important;\n      }\n      /* Remove white background from inline slide content */\n      .glightbox-container .gslide-inline {\n        background: transparent !important;\n      }\n      /* Make the inline content area fill the slide */\n      .glightbox-container .ginlined-content {\n        max-width: none !important;\n        max-height: none !important;\n        width: 100%;\n        height: 100%;\n        padding: 0 !important;\n      }\n      /* Remove box-shadow from the media container */\n      .glightbox-container .gslide-media {\n        box-shadow: none !important;\n      }\n      /* Toolbar styling */\n      .mermaid-lightbox-toolbar {\n        position: absolute;\n        top: 8px;\n        right: 8px;\n        z-index: 10;\n        display: flex;\n        gap: 4px;\n      }\n      .mermaid-pz-btn {\n        background: rgba(0,0,0,0.6);\n        color: #fff;\n        border: 1px solid rgba(255,255,255,0.3);\n        border-radius: 4px;\n        padding: 4px 10px;\n        cursor: pointer;\n        font-size: 14px;\n        line-height: 1;\n      }\n      .mermaid-pz-btn:hover {\n        background: rgba(0,0,0,0.8);\n        border-color: rgba(255,255,255,0.6);\n      }\n    `;\n    document.head.appendChild(style);\n  };\n\n  // Lazy-load svg-pan-zoom from CDN, returns a promise\n  const loadSvgPanZoom = () =\u003e {\n    if (typeof svgPanZoom !== 'undefined') return Promise.resolve();\n    return new Promise((resolve, reject) =\u003e {\n      const s = document.createElement('script');\n      s.src = SVG_PAN_ZOOM_CDN;\n      s.onload = resolve;\n      s.onerror = reject;\n      document.head.appendChild(s);\n    });\n  };\n\n  // Initialize svg-pan-zoom on the SVG inside the lightbox.\n  // Retries until the lightbox container has settled dimensions.\n  let _pzRetries = 0;\n  const initPanZoom = () =\u003e {\n    if (activePanZoom) return;\n    const container = document.querySelector('.glightbox-container .gslide.current .mermaid-lightbox-wrap');\n    if (!container) return;\n    const svgEl = container.querySelector('svg');\n    if (!svgEl) return;\n\n    // Ensure the container has layout dimensions before initializing.\n    const cRect = container.getBoundingClientRect();\n    if (cRect.width \u003c 10 || cRect.height \u003c 10) {\n      if (_pzRetries \u003c 20) { _pzRetries++; setTimeout(initPanZoom, 50); }\n      return;\n    }\n\n    // svg-pan-zoom needs a viewBox. Pre-rendered SVGs from mermaid\n    // usually have one; browser-rendered ones may not.\n    if (!svgEl.getAttribute('viewBox')) {\n      let w = parseFloat(svgEl.getAttribute('width'));\n      let h = parseFloat(svgEl.getAttribute('height'));\n      if (!w \u0026\u0026 svgEl.style.maxWidth) w = parseFloat(svgEl.style.maxWidth);\n      if (!w || !h) {\n        const r = svgEl.getBoundingClientRect();\n        if (!w) w = r.width;\n        if (!h) h = r.height;\n      }\n      if (w \u003e 0 \u0026\u0026 h \u003e 0) {\n        svgEl.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n      } else if (_pzRetries \u003c 20) {\n        _pzRetries++; setTimeout(initPanZoom, 50); return;\n      }\n    }\n    _pzRetries = 0;\n\n    // Clear inline dimensions so SVG can be sized by the container\n    // and svg-pan-zoom can manage transforms.\n    svgEl.removeAttribute('width');\n    svgEl.removeAttribute('height');\n    svgEl.style.cssText = 'width:100%;height:100%;';\n\n    try {\n      activePanZoom = svgPanZoom(svgEl, {\n        zoomEnabled: true,\n        panEnabled: true,\n        controlIconsEnabled: false,\n        fit: true,\n        center: true,\n        contain: false,\n        minZoom: 0.3,\n        maxZoom: 10,\n        zoomScaleSensitivity: 0.3,\n        mouseWheelZoomEnabled: true,\n        preventMouseEventsDefault: true,\n      });\n      // Double-check fit after a frame in case dimensions shifted\n      requestAnimationFrame(() =\u003e {\n        if (!activePanZoom) return;\n        activePanZoom.resize();\n        activePanZoom.fit();\n        activePanZoom.center();\n      });\n    } catch (_) {\n      activePanZoom = null;\n    }\n\n    // Add reset/fit buttons\n    let toolbar = container.querySelector('.mermaid-lightbox-toolbar');\n    if (!toolbar) {\n      toolbar = document.createElement('div');\n      toolbar.className = 'mermaid-lightbox-toolbar';\n      toolbar.innerHTML =\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"fit\" title=\"Fit to view\"\u003eFit\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomin\" title=\"Zoom in\"\u003e+\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomout\" title=\"Zoom out\"\u003e\u0026minus;\u003c/button\u003e';\n      toolbar.addEventListener('click', (ev) =\u003e {\n        const btn = ev.target.closest('[data-action]');\n        if (!btn || !activePanZoom) return;\n        ev.preventDefault();\n        ev.stopPropagation();\n        const action = btn.dataset.action;\n        if (action === 'fit') { activePanZoom.resize(); activePanZoom.fit(); activePanZoom.center(); }\n        else if (action === 'zoomin') { activePanZoom.zoomIn(); }\n        else if (action === 'zoomout') { activePanZoom.zoomOut(); }\n      });\n      container.prepend(toolbar);\n    }\n  };\n\n  // Destroy pan-zoom on lightbox close\n  const destroyPanZoom = () =\u003e {\n    if (activePanZoom) {\n      try { activePanZoom.destroy(); } catch (_) { /* no-op */ }\n      activePanZoom = null;\n    }\n  };\n\n  let _lbRetries = 0;\n  const ensureMermaidLightbox = () =\u003e {\n    const diagrams = document.querySelectorAll('.mermaid svg');\n    if (!diagrams.length) {\n      // Mermaid ESM may still be rendering -- retry up to 2s\n      if (_lbRetries \u003c 20) { _lbRetries++; setTimeout(ensureMermaidLightbox, 100); }\n      return;\n    }\n    _lbRetries = 0;\n    injectLightboxStyles();\n    diagrams.forEach((svg) =\u003e {\n      if (svg.dataset.lightboxBound) return;\n      svg.dataset.lightboxBound = 'true';\n      svg.style.cursor = 'pointer';\n      svg.addEventListener('click', (e) =\u003e {\n        e.preventDefault();\n        e.stopPropagation();\n        const svgHtml = svg.outerHTML;\n        const openLightbox = () =\u003e {\n          if (!mermaidLightbox) {\n            mermaidLightbox = GLightbox({\n              selector: false,\n              openEffect: 'fade',\n              closeEffect: 'fade',\n              zoomable: false,\n              draggable: false,\n              skin: 'clean',\n            });\n            mermaidLightbox.on('slide_after_load', () =\u003e {\n              destroyPanZoom();\n              _pzRetries = 0;\n              loadSvgPanZoom().then(() =\u003e initPanZoom());\n            });\n            mermaidLightbox.on('close', destroyPanZoom);\n          }\n          mermaidLightbox.setElements([{\n            content: '\u003cdiv class=\"mermaid-lightbox-wrap\"\u003e' + svgHtml + '\u003c/div\u003e',\n            width: '90vw',\n            height: '90vh'\n          }]);\n          mermaidLightbox.open();\n          loadSvgPanZoom();\n        };\n        if (typeof GLightbox !== 'undefined') {\n          openLightbox();\n        } else if (window.initGLightbox) {\n          window.initGLightbox();\n          openLightbox();\n        } else {\n          window.addEventListener('glightbox-ready', () =\u003e { openLightbox(); }, { once: true });\n        }\n      });\n    });\n  };\n\n  mermaid.initialize({ startOnLoad: false, theme: 'base', themeVariables, flowchart, themeCSS });\n  window.initMermaid = async () =\u003e {\n    try {\n      await mermaid.run();\n    } catch (e) {\n      console.error('mermaid.run failed:', e);\n    }\n    ensureMermaidLightbox();\n  };\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () =\u003e window.initMermaid());\n  } else {\n    window.initMermaid();\n  }\n\u003c/script\u003e",
      "content_text": "\nSince GitHub started supporting mermaid in their markdown I wanted to\ntake another look at how to implement it on my site, I think it has some\nvery nice opportunities in teaching, documenting, and explaining things.\n\nThe docs kinda just jumped right into their mermaid language and really\nwent through that in a lot of depth, and skipped over how to implement\nit yourself, turns out its pretty simple. You  just write mermaid syntax\nin a div with a class of mermaid on it!\n\n``` html\n\u003cscript src='https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js'\u003e\u003c/script\u003e\n\u003cdiv class='mermaid'\u003e\ngraph TD;\na --\u003e A\nA --\u003e B\nB --\u003e C\n\u003c/div\u003e\n```\n\n\u003e  You  just write mermaid syntax in a div with a class of mermaid on\n\u003e  it!\n\nThe above gets me this diagram.\n\n\u003cscript src='https://unpkg.com/mermaid@8.1.0/dist/mermaid.min.js'\u003e\u003c/script\u003e\n\u003cdiv class='mermaid'\u003e\ngraph TD;\na --\u003e A\nA --\u003e B\nB --\u003e C\n\u003c/div\u003e\n\nThis feels so quick and easy to start getting some graphs up and running, but\ndoes lead to layout shift and extra bytes down the pipe.  The best solution in\nmy opionion would be to forgo the js and ship svg.  That said, this is do dang\nconvenient I will be using it for some things.\n",
      "summary": "Since GitHub started supporting mermaid in their markdown I wanted to take another look at how to implement it on my site, I think it has some very nice...",
      "date_published": "2022-03-03T14:40:01Z",
      "date_modified": "2022-03-03T14:40:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "webdev",
        "webdev",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bash-mktemp/",
      "url": "https://go.waylonwalker.com/bash-mktemp/",
      "title": "Bash mktemp",
      "content_html": "\u003cp\u003eThere is GNU coreutils command called \u003ccode\u003emktemp\u003c/code\u003e that is super handy in shell\nscripts to make temporary landing spots for files so that they never clash with\nanother instance, and will automatically get cleaned up when you restart, or\nwhenever \u003ccode\u003e/tmp\u003c/code\u003e gets wiped.  I’m not sure when that is, but I don’t expect it\nto be long.\u003c/p\u003e\n\u003ch2 id=\"making-temp-directories\"\u003eMaking temp directories \u003ca href=\"#making-temp-directories\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are some examples of making temp directories in different places, my\nfavorite is \u003ccode\u003emktemp -dt mytemp-XXXXXX\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# makes a temporary directory in /tmp/ with the defaul template tmp.XXXXXXXXXX\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# makes a temporary directory in your current directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp --directory mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# shorter version\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp -d mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# same thing, but makes a file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# makes a temporary directory in your /tmp/ directory (or what ever you have configured as your TMPDIR)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp --directory --tmpdir mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# shorter version\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp -dt mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# same thing, but makes a file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp --tmpdir mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# shorter version\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp -t mytemp-XXXXXX\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"use-case\"\u003eUse Case \u003ca href=\"#use-case\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a sample script that shows how to capture the tempdir as a variable and\nreuse it.  Here is an example of curling my bootstrap file into a temp\ndirectory and running it from that directory.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elocal\u003c/span\u003e \u003cspan class=\"nv\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003emktemp -dt bootstrap-XXXXXX\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epushd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://raw.githubusercontent.com/WaylonWalker/devtainer/main/bootstrap \u0026gt; bootstrap\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebash bootstrap\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epopd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"templates\"\u003eTemplates \u003ca href=\"#templates\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou must have at least 3 trailing X’s that mktemp will replace with random\ncharacters.  I played with it for a bit, it kinda allows for some trailing\ncharacters, and will not fill groups of X’s earlier in your template, only the\nlast consecutive string.\u003c/p\u003e\n\u003cp\u003eMy randomm samples I played with.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylonwalker.com on  main \u003cspan class=\"o\"\u003e[\u003c/span\u003e!?\u003cspan class=\"o\"\u003e]\u003c/span\u003e  v3.9.7 \u003cspan class=\"o\"\u003e(\u003c/span\u003ewaylonwalker.com\u003cspan class=\"o\"\u003e)\u003c/span\u003e took 2m24s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mktemp myXtemp-XaXbXXXX -dt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/tmp/myXtemp-XaXbx9hn\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylonwalker.com on  main \u003cspan class=\"o\"\u003e[\u003c/span\u003e!?\u003cspan class=\"o\"\u003e]\u003c/span\u003e  v3.9.7 \u003cspan class=\"o\"\u003e(\u003c/span\u003ewaylonwalker.com\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mktemp myXtemp-XaXbXXXXs -dt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/tmp/myXtemp-XaXb2tpGs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewaylonwalker.com on  main \u003cspan class=\"o\"\u003e[\u003c/span\u003e!?\u003cspan class=\"o\"\u003e]\u003c/span\u003e  v3.9.7 \u003cspan class=\"o\"\u003e(\u003c/span\u003ewaylonwalker.com\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ mktemp myXtemp-XaXbXXcXXs -dt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emktemp: too few X\u003cspan class=\"s1\"\u003e\u0026#39;s in template ‘myXtemp-XaXbXXcXXs’\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003ewaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e❯ mktemp myXtemp-XaXbXXcXXs -dt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003ewaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e❯ mktemp myXtemp-XaXbXXXXt -dt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e/tmp/myXtemp-XaXbe8PWt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003ewaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e❯ mktemp myXtemp-XXX-you-XXX -dt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e/tmp/myXtemp-XXX-you-48l\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003ewaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e❯ mktemp myXtemp-XXX-you-XX -dt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003emktemp: too few X\u0026#39;\u003c/span\u003es in template ‘myXtemp-XXX-you-XX’\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"rtfm\"\u003eRTFM \u003ca href=\"#rtfm\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe man page has good stuff on all the flags that you might need.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eman mktemp\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "There is GNU coreutils command called `mktemp` that is super handy in shell\nscripts to make temporary landing spots for files so that they never clash with\nanother instance, and will automatically get cleaned up when you restart, or\nwhenever `/tmp` gets wiped.  I'm not sure when that is, but I don't expect it\nto be long.\n\n## Making temp directories\n\nHere are some examples of making temp directories in different places, my\nfavorite is `mktemp -dt mytemp-XXXXXX`.\n\n``` bash\n# makes a temporary directory in /tmp/ with the defaul template tmp.XXXXXXXXXX\nmktemp\n\n# makes a temporary directory in your current directory\nmktemp --directory mytemp-XXXXXX\n# shorter version\nmktemp -d mytemp-XXXXXX\n\n# same thing, but makes a file\nmktemp mytemp-XXXXXX\n\n# makes a temporary directory in your /tmp/ directory (or what ever you have configured as your TMPDIR)\nmktemp --directory --tmpdir mytemp-XXXXXX\n# shorter version\nmktemp -dt mytemp-XXXXXX\n\n# same thing, but makes a file\nmktemp --tmpdir mytemp-XXXXXX\n# shorter version\nmktemp -t mytemp-XXXXXX\n```\n\n## Use Case\n\nHere is a sample script that shows how to capture the tempdir as a variable and\nreuse it.  Here is an example of curling my bootstrap file into a temp\ndirectory and running it from that directory.\n\n``` bash\nlocal tmp=`mktemp -dt bootstrap-XXXXXX`\npushd $tmp\ncurl https://raw.githubusercontent.com/WaylonWalker/devtainer/main/bootstrap \u003e bootstrap\nbash bootstrap\npopd\n```\n\n## Templates\n\nYou must have at least 3 trailing X's that mktemp will replace with random\ncharacters.  I played with it for a bit, it kinda allows for some trailing\ncharacters, and will not fill groups of X's earlier in your template, only the\nlast consecutive string.\n\nMy randomm samples I played with.\n\n``` bash\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com) took 2m24s\n❯ mktemp myXtemp-XaXbXXXX -dt\n/tmp/myXtemp-XaXbx9hn\n\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n❯ mktemp myXtemp-XaXbXXXXs -dt\n/tmp/myXtemp-XaXb2tpGs\n\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n❯ mktemp myXtemp-XaXbXXcXXs -dt\nmktemp: too few X's in template ‘myXtemp-XaXbXXcXXs’\n\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n❯ mktemp myXtemp-XaXbXXcXXs -dt\n\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n❯ mktemp myXtemp-XaXbXXXXt -dt\n/tmp/myXtemp-XaXbe8PWt\n\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n❯ mktemp myXtemp-XXX-you-XXX -dt\n/tmp/myXtemp-XXX-you-48l\n\nwaylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)\n❯ mktemp myXtemp-XXX-you-XX -dt\nmktemp: too few X's in template ‘myXtemp-XXX-you-XX’\n```\n\n## RTFM\n\nThe man page has good stuff on all the flags that you might need.\n``` bash\nman mktemp\n```\n",
      "summary": "There is GNU coreutils command called that is super handy in shell scripts to make temporary landing spots for files so that they never clash with another...",
      "date_published": "2022-03-02T14:52:08Z",
      "date_modified": "2022-03-02T14:52:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "cli",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-recover-checkout/",
      "url": "https://go.waylonwalker.com/git-recover-checkout/",
      "title": "Recover a lost git branch with checkout",
      "content_html": "\u003cp\u003eOnce you give a branch the big D (\u003ccode\u003egit branch -D mybranch\u003c/code\u003e) its gone,\nits lost from your history.  It’s completely removed from your log.\nThere will be no reference to these commits, or will there?\u003c/p\u003e\n\u003ch2 id=\"tldr\"\u003eTLDR \u003ca href=\"#tldr\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCheckout is your savior, all you need is the commit hash.\u003c/p\u003e\n\u003ch2 id=\"immediate-regret\"\u003eImmediate Regret \u003ca href=\"#immediate-regret\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eyour terminal is still open\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eWe have all done this, you give  branch the big D only to realize it was\nthe wrong one.  Don’t worry, not all is lost, this is the easiest to\nrecover from.  When you run the delete command you will see something\nlike this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git branch -D new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDeleted branch new \u003cspan class=\"o\"\u003e(\u003c/span\u003ewas bc02a64\u003cspan class=\"o\"\u003e)\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNotice the hash is right there is the hash of your commit.  You can use\nthat to get your content back.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b bc02a64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit branch new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or in one swoop checkout your new branch at the `start-point` you want\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b new bc02a64\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"delayed-reaction\"\u003eDelayed reaction \u003ca href=\"#delayed-reaction\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eyou have closed your terminal\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIf you have closed your terminal, or have deleted with a gui or\nsomething that does not tell you the hash as you run it, don’t fret, all\nyour work is still there (as long as you have commited).  You just have\nto dig it out.  The reflog contains a list of all \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e operations that\nhave occurred on your git repo, and can be incredibly helpful with this.\u003c/p\u003e\n\u003ch3 id=\"kinda-recent\"\u003eKinda Recent \u003ca href=\"#kinda-recent\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eIf your botched delete operation was recent just diving right into the\nreflog will show it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git reflog\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 \u003cspan class=\"o\"\u003e(\u003c/span\u003emain\u003cspan class=\"o\"\u003e)\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e0\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from new to main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebc02a64 \u003cspan class=\"o\"\u003e(\u003c/span\u003eHEAD -\u0026gt; another, new\u003cspan class=\"o\"\u003e)\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e4\u003cspan class=\"o\"\u003e}\u003c/span\u003e: commit: newfile\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 \u003cspan class=\"o\"\u003e(\u003c/span\u003emain\u003cspan class=\"o\"\u003e)\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e2\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to new\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eIn this example, I checked out a branch called new, commited a new\nfile, then switched back to main and deleted new.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNow That I have the commit hash I can use the same solution to get my\nbranch back.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b bc02a64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit branch new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or in one swoop checkout your new branch at the `start-point` you want\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b new bc02a64\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"a-lot-has-happened-since-then\"\u003eA lot has happened since then \u003ca href=\"#a-lot-has-happened-since-then\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eIf a lot has happened since then, you are going to need to pull out some\nmore tool to sift through that \u003ccode\u003ereflog\u003c/code\u003e, especially if its a big one.\nThe first suggestion that I have is to pipe into grep and look for\ncommit messages, or the name of the branch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git reflog \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;moving from\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e1\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to branch/oops\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e2\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from oops to main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e4\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to oops\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e5\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from another to main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebc02a64 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e6\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e7\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from another to main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebc02a64 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e8\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from new to another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebc02a64 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e9\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from bc02a64bbe5683d905e333e8dfcbbb91a5e77549 to new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebc02a64 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e10\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to bc02a64bbe56\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e11\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from new to main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e13\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e14\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from other to main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e03a3338 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e18\u003cspan class=\"o\"\u003e}\u003c/span\u003e: checkout: moving from main to other\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003egit has a built in \u003ccode\u003e--grep\u003c/code\u003e flag, but I don’t think there is a way to\nfilter by branch name, regardless it still is helpful.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git reflog --grep new\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebc02a64 \u003cspan class=\"o\"\u003e(\u003c/span\u003eHEAD -\u0026gt; another, new\u003cspan class=\"o\"\u003e)\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e4\u003cspan class=\"o\"\u003e}\u003c/span\u003e: commit: newfile\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eMaybe if you can remember a filename you can pass in \u003ccode\u003e-- \u0026lt;filename\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reflog -- readme.md\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"rtfm\"\u003eRTFM \u003ca href=\"#rtfm\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThere are many other ways to slice up a git log, and reflog alike. check\nout \u003ccode\u003eman git log\u003c/code\u003e for some more flags.\u003c/p\u003e\n",
      "content_text": "\nOnce you give a branch the big D (`git branch -D mybranch`) its gone,\nits lost from your history.  It's completely removed from your log.\nThere will be no reference to these commits, or will there?\n\n## TLDR\n\nCheckout is your savior, all you need is the commit hash.\n\n## Immediate Regret\n_your terminal is still open_\n\nWe have all done this, you give  branch the big D only to realize it was\nthe wrong one.  Don't worry, not all is lost, this is the easiest to\nrecover from.  When you run the delete command you will see something\nlike this.\n\n\n``` bash\n❯ git branch -D new\nDeleted branch new (was bc02a64).\n```\n\nNotice the hash is right there is the hash of your commit.  You can use\nthat to get your content back.\n\n``` bash\ngit checkout -b bc02a64\ngit branch new\n\n# or in one swoop checkout your new branch at the `start-point` you want\ngit checkout -b new bc02a64\n```\n\n## Delayed reaction\n_you have closed your terminal_\n\nIf you have closed your terminal, or have deleted with a gui or\nsomething that does not tell you the hash as you run it, don't fret, all\nyour work is still there (as long as you have commited).  You just have\nto dig it out.  The reflog contains a list of all git operations that\nhave occurred on your git repo, and can be incredibly helpful with this.\n\n### Kinda Recent\n\nIf your botched delete operation was recent just diving right into the\nreflog will show it.\n\n``` bash\n❯ git reflog\n03a3338 (main) HEAD@{0}: checkout: moving from new to main\nbc02a64 (HEAD -\u003e another, new) HEAD@{4}: commit: newfile\n03a3338 (main) HEAD@{2}: checkout: moving from main to new\n```\n\n\u003e In this example, I checked out a branch called new, commited a new\n\u003e file, then switched back to main and deleted new.\n\nNow That I have the commit hash I can use the same solution to get my\nbranch back.\n\n``` bash\ngit checkout -b bc02a64\ngit branch new\n\n# or in one swoop checkout your new branch at the `start-point` you want\ngit checkout -b new bc02a64\n```\n\n### A lot has happened since then\n\nIf a lot has happened since then, you are going to need to pull out some\nmore tool to sift through that `reflog`, especially if its a big one.\nThe first suggestion that I have is to pipe into grep and look for\ncommit messages, or the name of the branch.\n\n\n``` bash\n❯ git reflog | grep \"moving from\"\n03a3338 HEAD@{1}: checkout: moving from main to branch/oops\n03a3338 HEAD@{2}: checkout: moving from oops to main\n03a3338 HEAD@{4}: checkout: moving from main to oops\n03a3338 HEAD@{5}: checkout: moving from another to main\nbc02a64 HEAD@{6}: checkout: moving from main to another\n03a3338 HEAD@{7}: checkout: moving from another to main\nbc02a64 HEAD@{8}: checkout: moving from new to another\nbc02a64 HEAD@{9}: checkout: moving from bc02a64bbe5683d905e333e8dfcbbb91a5e77549 to new\nbc02a64 HEAD@{10}: checkout: moving from main to bc02a64bbe56\n03a3338 HEAD@{11}: checkout: moving from new to main\n03a3338 HEAD@{13}: checkout: moving from main to new\n03a3338 HEAD@{14}: checkout: moving from other to main\n03a3338 HEAD@{18}: checkout: moving from main to other\n```\n\ngit has a built in `--grep` flag, but I don't think there is a way to\nfilter by branch name, regardless it still is helpful.\n\n``` bash\n❯ git reflog --grep new\nbc02a64 (HEAD -\u003e another, new) HEAD@{4}: commit: newfile\n```\n\nMaybe if you can remember a filename you can pass in `-- \u003cfilename\u003e`.\n\n``` bash\ngit reflog -- readme.md\n```\n\n## RTFM\n\nThere are many other ways to slice up a git log, and reflog alike. check\nout `man git log` for some more flags.\n",
      "summary": "Once you give a branch the big D () its gone, its lost from your history. It's completely removed from your log. There will be no reference to these commits,...",
      "date_published": "2022-03-01T14:34:01Z",
      "date_modified": "2022-03-01T14:34:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-find-deleted-files/",
      "url": "https://go.waylonwalker.com/git-find-deleted-files/",
      "title": "git find deleted files",
      "content_html": "\u003cp\u003eIt’s nearly impossible to completely loose a file if it is commited to \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e.\nIt’s  likely harder to fully remove the file than it is to recover it, but how\ndo we go about recovering those precious files that we have lost.\u003c/p\u003e\n\u003cp\u003eListing all the deleted files in all of git history can be done by\ncombining \u003ccode\u003egit log\u003c/code\u003e with \u003ccode\u003e--diff-filter\u003c/code\u003e.  The log gives you lots of\noptions to show different bits of information about the commit that\nhappened at that point.  It’s even possible to get a completely clean\nlist of files that are in your git history but have been deleted.\u003c/p\u003e\n\u003ch2 id=\"git-log---diff-filter\"\u003egit log –diff-filter \u003ca href=\"#git-log---diff-filter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese various commands will show all files that were ever deleted on\nyour current branch.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This one includes the date, commit hash, and Author\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter D\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this one could be a git alias, but includes empty lines\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter D --pretty\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;format:\u0026#34;\u003c/span\u003e --name-only\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this one has the empty lines cleaned up\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter D --pretty\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;format:\u0026#34;\u003c/span\u003e --name-only \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;/^$/d\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/git-diff-filter/\" class=\"wikilink\" data-title=\"git diff-filter\" data-description=\"Git commands such as , , all take a flag called . This can filter for only certain types of diffs, such as added (A), modified (M), or deleted (D).\" data-date=\"2022-02-27\" data-preview=\"Git commands such as , , all take a flag called . This can filter for only certain types of diffs, such as added (A), modified (M), or deleted (D).\"\u003egit diff-filter\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"git-reflog---diff-filter\"\u003egit reflog –diff-filter \u003ca href=\"#git-reflog---diff-filter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe reflog can be super powerful in finding lost files here, as it only\ncares about git operations, not just the current branch.  It will search\naccross all branches for deleted files and report them.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This one includes the commit hash, branch, tag, and commit message\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reflog --diff-filter D\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# You might want to at least add the filename\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reflog --diff-filter D --name-only\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this one could be a git alias, but includes empty lines\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reflog --diff-filter D --pretty\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;format:\u0026#34;\u003c/span\u003e --name-only\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this one has the empty lines cleaned up\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reflog --diff-filter D --pretty\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;format:\u0026#34;\u003c/span\u003e --name-only \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;/^$/d\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"get-the-last-commit-from-a-file\"\u003eget the last commit from a file \u003ca href=\"#get-the-last-commit-from-a-file\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log -n \u003cspan class=\"m\"\u003e1\u003c/span\u003e --pretty\u003cspan class=\"o\"\u003e=\u003c/span\u003eformat:%H -- file\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you want dont like how the output looks or you want your default pager to be\ndifferent you can configure the default pager see \u003ca href=\"/git-pager/\" class=\"wikilink\" data-title=\"Set Your Git Pager Config\" data-description=\"Setting up your git pager to your liking can help you navigate diffs and logs much more efficiently. You can set it to whatever pager you like so that your...\" data-date=\"2022-03-16\" data-preview=\"Setting up your git pager to your liking can help you navigate diffs and logs much more efficiently. You can set it to whatever pager you like so that your...\"\u003eSet Your Git Pager Config\u003c/a\u003e.\u003c/p\u003e\n",
      "content_text": "\nIt's nearly impossible to completely loose a file if it is commited to git.\nIt's  likely harder to fully remove the file than it is to recover it, but how\ndo we go about recovering those precious files that we have lost.\n\nListing all the deleted files in all of git history can be done by\ncombining `git log` with `--diff-filter`.  The log gives you lots of\noptions to show different bits of information about the commit that\nhappened at that point.  It's even possible to get a completely clean\nlist of files that are in your git history but have been deleted.\n\n## git log --diff-filter\n\nThese various commands will show all files that were ever deleted on\nyour current branch.\n\n``` bash\n# This one includes the date, commit hash, and Author\ngit log --diff-filter D\n\n# this one could be a git alias, but includes empty lines\ngit log --diff-filter D --pretty=\"format:\" --name-only\n\n# this one has the empty lines cleaned up\ngit log --diff-filter D --pretty=\"format:\" --name-only | sed '/^$/d'\n```\n\n\u003ca href=\"/git-diff-filter/\" class=\"wikilink\" data-title=\"git diff-filter\" data-description=\"Git commands such as , , all take a flag called . This can filter for only certain types of diffs, such as added (A), modified (M), or deleted (D).\" data-date=\"2022-02-27\"\u003egit diff-filter\u003c/a\u003e\n\n## git reflog --diff-filter\n\nThe reflog can be super powerful in finding lost files here, as it only\ncares about git operations, not just the current branch.  It will search\naccross all branches for deleted files and report them.\n\n``` bash\n# This one includes the commit hash, branch, tag, and commit message\ngit reflog --diff-filter D\n\n# You might want to at least add the filename\ngit reflog --diff-filter D --name-only\n\n# this one could be a git alias, but includes empty lines\ngit reflog --diff-filter D --pretty=\"format:\" --name-only\n\n# this one has the empty lines cleaned up\ngit reflog --diff-filter D --pretty=\"format:\" --name-only | sed '/^$/d'\n```\n\n## get the last commit from a file\n\n``` bash\ngit log -n 1 --pretty=format:%H -- file\n```\n\nIf you want dont like how the output looks or you want your default pager to be\ndifferent you can configure the default pager see \u003ca href=\"/git-pager/\" class=\"wikilink\" data-title=\"Set Your Git Pager Config\" data-description=\"Setting up your git pager to your liking can help you navigate diffs and logs much more efficiently. You can set it to whatever pager you like so that your...\" data-date=\"2022-03-16\"\u003eSet Your Git Pager Config\u003c/a\u003e.\n",
      "summary": "It's nearly impossible to completely loose a file if it is commited to git. It's likely harder to fully remove the file than it is to recover it, but how do...",
      "date_published": "2022-02-28T16:45:19Z",
      "date_modified": "2022-02-28T16:45:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-diff-filter/",
      "url": "https://go.waylonwalker.com/git-diff-filter/",
      "title": "git diff-filter",
      "content_html": "\u003cp\u003e\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e commands such as \u003ccode\u003ediff\u003c/code\u003e, \u003ccode\u003elog\u003c/code\u003e, \u003ccode\u003ewhatchanged\u003c/code\u003e all take a flag called\n\u003ccode\u003e--diff-filter\u003c/code\u003e.  This can filter for only certain types of diffs, such\nas added (A), modified (M), or deleted (D).\u003c/p\u003e\n\u003ch2 id=\"man-page\"\u003eMan page \u003ca href=\"#man-page\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can find the full description by searching for \u003ccode\u003e--diff-filter\u003c/code\u003e in\nthe \u003ccode\u003eman git diff\u003c/code\u003e page.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--diff-filter\u003cspan class=\"o\"\u003e=[(\u003c/span\u003eA\u003cspan class=\"p\"\u003e|\u003c/span\u003eC\u003cspan class=\"p\"\u003e|\u003c/span\u003eD\u003cspan class=\"p\"\u003e|\u003c/span\u003eM\u003cspan class=\"p\"\u003e|\u003c/span\u003eR\u003cspan class=\"p\"\u003e|\u003c/span\u003eT\u003cspan class=\"p\"\u003e|\u003c/span\u003eU\u003cspan class=\"p\"\u003e|\u003c/span\u003eX\u003cspan class=\"p\"\u003e|\u003c/span\u003eB\u003cspan class=\"o\"\u003e)\u003c/span\u003e...\u003cspan class=\"o\"\u003e[\u003c/span\u003e*\u003cspan class=\"o\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Select only files that are Added \u003cspan class=\"o\"\u003e(\u003c/span\u003eA\u003cspan class=\"o\"\u003e)\u003c/span\u003e, Copied \u003cspan class=\"o\"\u003e(\u003c/span\u003eC\u003cspan class=\"o\"\u003e)\u003c/span\u003e, Deleted \u003cspan class=\"o\"\u003e(\u003c/span\u003eD\u003cspan class=\"o\"\u003e)\u003c/span\u003e, Modified \u003cspan class=\"o\"\u003e(\u003c/span\u003eM\u003cspan class=\"o\"\u003e)\u003c/span\u003e, Renamed \u003cspan class=\"o\"\u003e(\u003c/span\u003eR\u003cspan class=\"o\"\u003e)\u003c/span\u003e, have their \u003cspan class=\"nb\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003ei.e. regular file, symlink, submodule, ...\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    changed \u003cspan class=\"o\"\u003e(\u003c/span\u003eT\u003cspan class=\"o\"\u003e)\u003c/span\u003e, are Unmerged \u003cspan class=\"o\"\u003e(\u003c/span\u003eU\u003cspan class=\"o\"\u003e)\u003c/span\u003e, are Unknown \u003cspan class=\"o\"\u003e(\u003c/span\u003eX\u003cspan class=\"o\"\u003e)\u003c/span\u003e, or have had their pairing Broken \u003cspan class=\"o\"\u003e(\u003c/span\u003eB\u003cspan class=\"o\"\u003e)\u003c/span\u003e. Any combination of the filter characters \u003cspan class=\"o\"\u003e(\u003c/span\u003eincluding none\u003cspan class=\"o\"\u003e)\u003c/span\u003e can be used.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    When * \u003cspan class=\"o\"\u003e(\u003c/span\u003eAll-or-none\u003cspan class=\"o\"\u003e)\u003c/span\u003e is added to the combination, all paths are selected \u003cspan class=\"k\"\u003eif\u003c/span\u003e there is any file that matches other criteria in the comparison\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e there is no\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    file that matches other criteria, nothing is selected.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Also, these upper-case letters can be downcased to exclude. E.g.  --diff-filter\u003cspan class=\"o\"\u003e=\u003c/span\u003ead excludes added and deleted paths.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Note that not all diffs can feature all types. For instance, diffs from the index to the working tree can never have Added entries \u003cspan class=\"o\"\u003e(\u003c/span\u003ebecause the \u003cspan class=\"nb\"\u003eset\u003c/span\u003e of paths\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    included in the diff is limited by what is in the index\u003cspan class=\"o\"\u003e)\u003c/span\u003e. Similarly, copied and renamed entries cannot appear \u003cspan class=\"k\"\u003eif\u003c/span\u003e detection \u003cspan class=\"k\"\u003efor\u003c/span\u003e those types is disabled.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"try-it-out\"\u003eTry it out \u003ca href=\"#try-it-out\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOpen up a git repo and play around with this, here are some example that\nI played with that seemed useful to me.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# find when any files were deleted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter D\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# find when all files were added\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter A\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# only one specific file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter A -- readme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# partial match to a single file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter A -- read*\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find when all python files were added\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log --diff-filter A -- *.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nGit commands such as `diff`, `log`, `whatchanged` all take a flag called\n`--diff-filter`.  This can filter for only certain types of diffs, such\nas added (A), modified (M), or deleted (D).\n\n## Man page\n\nYou can find the full description by searching for `--diff-filter` in\nthe `man git diff` page.\n\n``` bash\n--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]\n    Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, symlink, submodule, ...)\n    changed (T), are Unmerged (U), are Unknown (X), or have had their pairing Broken (B). Any combination of the filter characters (including none) can be used.\n    When * (All-or-none) is added to the combination, all paths are selected if there is any file that matches other criteria in the comparison; if there is no\n    file that matches other criteria, nothing is selected.\n\n    Also, these upper-case letters can be downcased to exclude. E.g.  --diff-filter=ad excludes added and deleted paths.\n\n    Note that not all diffs can feature all types. For instance, diffs from the index to the working tree can never have Added entries (because the set of paths\n    included in the diff is limited by what is in the index). Similarly, copied and renamed entries cannot appear if detection for those types is disabled.\n```\n\n## Try it out\n\nOpen up a git repo and play around with this, here are some example that\nI played with that seemed useful to me.\n\n``` bash\n# find when any files were deleted\ngit log --diff-filter D\n\n# find when all files were added\ngit log --diff-filter A\n\n# only one specific file\ngit log --diff-filter A -- readme.md\n\n# partial match to a single file\ngit log --diff-filter A -- read*\n\n# Find when all python files were added\ngit log --diff-filter A -- *.py\n```\n",
      "summary": "Git commands such as , , all take a flag called . This can filter for only certain types of diffs, such as added (A), modified (M), or deleted (D).",
      "date_published": "2022-02-27T16:34:31Z",
      "date_modified": "2022-02-27T16:34:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textual-popup-hack/",
      "url": "https://go.waylonwalker.com/textual-popup-hack/",
      "title": "Textual Popup Hack",
      "content_html": "\u003cp\u003eAs I am toying around with textual, I am wanting some popup user input\nto take over.  Textual is still pretty new and likely to change quite\nsignificantly, so I don’t want to overdo the work I put into it, So for\nnow on my personal tuis I am going to shell out to tmux.\u003c/p\u003e\n\u003ch2 id=\"the-problem\"\u003eThe Problem \u003ca href=\"#the-problem\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe main issue is that when you are in a textual app, it kinda owns the\ninput.  So if you try to run another python function that calls for\n\u003ccode\u003einput\u003c/code\u003e it just cant get there.  There is a\n\u003ca href=\"https://github.com/sirfuzzalot/textual-inputs\" 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\"\u003etextual-inputs\u003c/a\u003e library\nthat covers this, and it might work really well for some use cases, but\nmany of my use cases have been for things that are pre-built like\ncopier, and I am trying to throw something together quick.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003etextual is still very beta\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ePart of this comes down to the fact that textual is still very beta and\nlikely to change a lot, so all of the work I have done with it is for\nquick and dirty, or fun side projects.\u003c/p\u003e\n\u003ch2 id=\"the-solution\"\u003eThe Solution \u003ca href=\"#the-solution\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo the solution that was easiest for me… shell out to a tmux popup.\nThe application I am working on wants to create new documents using\ncopier templates.  copier has a fantastic cli that walks throught he\ntemplate variables and asks the user to fill them in, so I just shell\nout to that with \u003ccode\u003ePopen\u003c/code\u003e.  Make sure that you wait for this process to\nfinish otherwise there will be bit of jank in your textual app.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eaction_new_post\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eproc\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s1\"\u003e\u0026#39;tmux popup \u0026#34;copier copy plugins/todo-template tasks\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewait\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"example\"\u003eexample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is what the running todo application looks like with the copier\npopup over it.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/textual-popup-hack.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/textual-popup-hack.png\" alt=\"example of the popup running over textual\"/ data-glightbox=\"description: example of the popup running over textual\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003e\u003ca href=\"/tmux-popups/\" class=\"wikilink\" data-title=\"tmux popups\" data-description=\"https://youtu.be/2I8fB28zfB4\" data-date=\"2021-07-14\" data-preview=\"https://youtu.be/2I8fB28zfB4\"\u003etmux popups\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ea bit more on tmux-popus [here] \u003ca href=\"https://waylonwalker.com/tmux-popups/\" 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\"\u003ehttps://waylonwalker.com/tmux-popups/\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Textualize/textual/\" 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\"\u003etextual repo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sirfuzzalot/textual-inputs\" 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\"\u003etextual-inputs repo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/tmux-popups/\" 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\"\u003emy article on tmux popups\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nAs I am toying around with textual, I am wanting some popup user input\nto take over.  Textual is still pretty new and likely to change quite\nsignificantly, so I don't want to overdo the work I put into it, So for\nnow on my personal tuis I am going to shell out to tmux.\n\n## The Problem\n\nThe main issue is that when you are in a textual app, it kinda owns the\ninput.  So if you try to run another python function that calls for\n`input` it just cant get there.  There is a\n[textual-inputs](https://github.com/sirfuzzalot/textual-inputs) library\nthat covers this, and it might work really well for some use cases, but\nmany of my use cases have been for things that are pre-built like\ncopier, and I am trying to throw something together quick.\n\n\u003e textual is still very beta\n\nPart of this comes down to the fact that textual is still very beta and\nlikely to change a lot, so all of the work I have done with it is for\nquick and dirty, or fun side projects.\n\n## The Solution\n\nSo the solution that was easiest for me... shell out to a tmux popup.\nThe application I am working on wants to create new documents using\ncopier templates.  copier has a fantastic cli that walks throught he\ntemplate variables and asks the user to fill them in, so I just shell\nout to that with `Popen`.  Make sure that you wait for this process to\nfinish otherwise there will be bit of jank in your textual app.\n\n``` python\nasync def action_new_post(self) -\u003e None:\n    proc = subprocess.Popen(\n        'tmux popup \"copier copy plugins/todo-template tasks\"', shell=True\n    )\n    proc.wait()\n```\n\n## example\n\nHere is what the running todo application looks like with the copier\npopup over it.\n\n![example of the popup running over textual](https://images.waylonwalker.com/textual-popup-hack.png)\n\n\u003ca href=\"/tmux-popups/\" class=\"wikilink\" data-title=\"tmux popups\" data-description=\"https://youtu.be/2I8fB28zfB4\" data-date=\"2021-07-14\"\u003etmux popups\u003c/a\u003e\n\n\u003e a bit more on tmux-popus [here] \u003chttps://waylonwalker.com/tmux-popups/\u003e)\n\n## Links\n\n* [textual repo](https://github.com/Textualize/textual/)\n* [textual-inputs repo](https://github.com/sirfuzzalot/textual-inputs)\n* [my article on tmux popups](https://waylonwalker.com/tmux-popups/)\n",
      "summary": "As I am toying around with textual, I am wanting some popup user input to take over. Textual is still pretty new and likely to change quite significantly, so...",
      "date_published": "2022-02-26T15:41:12Z",
      "date_modified": "2022-02-26T15:41:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "tmux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/samuelcolvin-dirty-equals/",
      "url": "https://go.waylonwalker.com/samuelcolvin-dirty-equals/",
      "title": "⭐ samuelcolvin dirty-equals",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/samuelcolvin/dirty-equals\" 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\"\u003edirty-equals\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/samuelcolvin\" 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\"\u003esamuelcolvin\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eDoing dirty (but extremely useful) things with equals.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [dirty-equals](https://github.com/samuelcolvin/dirty-equals), an amazing project by [samuelcolvin](https://github.com/samuelcolvin). It's worth exploring!\n\nDoing dirty (but extremely useful) things with equals.\n",
      "summary": "I'm really excited about dirty-equals, an amazing project by samuelcolvin. It's worth exploring!",
      "date_published": "2022-02-26T02:28:50Z",
      "date_modified": "2022-02-26T02:28:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/install-obs-flatpak/",
      "url": "https://go.waylonwalker.com/install-obs-flatpak/",
      "title": "Install obs flatpak",
      "content_html": "\u003cp\u003eBig announcement recently that obs studio now builds out to a flatpak,\nhopefully making it easier for all of us to install, especially us near\nnormies that don’t regularly compile anything from source.\u003c/p\u003e\n\u003ch2 id=\"install-flatpak\"\u003einstall flatpak \u003ca href=\"#install-flatpak\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI did not have flatpak installed so the first thing I had to do was get\nthe \u003ccode\u003eflatpak\u003c/code\u003e command installed, and add their default repo.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install flatpak\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eflatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce I had flatpak, I was able to get obs installed with the following\ncommand.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eflatpak install flathub com.obsproject.Studio\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce Installed it fired right up for me with the next command they\nsuggested.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eflatpak run com.obsproject.Studio\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"it-works\"\u003eIt Works \u003ca href=\"#it-works\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePretty straightforward, following the instructions given it all worked\nfor me, but it was missing a lot of the plugins that the current snap\npackage I am using gives me (namely virtual webcam).  So I am not ready\nto jump onto it until I figure out how to manage my own obs plugins.\nFor now I think the snap is working just well enough.\u003c/p\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://flatpak.org/setup/Ubuntu\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/flatpak.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/flatpak.org.ico\" class=\"has-avatar  has-avatar-before\"\u003eflatpak setup for ubuntu\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/obsproject/obs-studio/releases/tag/27.2.0\" 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\"\u003eobs release notes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://flathub.org/apps/details/com.obsproject.Studio\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/flathub.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/flathub.org.png\" class=\"has-avatar  has-avatar-before\"\u003eobs flatpak\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nBig announcement recently that obs studio now builds out to a flatpak,\nhopefully making it easier for all of us to install, especially us near\nnormies that don't regularly compile anything from source.\n\n## install flatpak\n\nI did not have flatpak installed so the first thing I had to do was get\nthe `flatpak` command installed, and add their default repo.\n\n``` bash\nsudo apt install flatpak\nflatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\n```\n\nOnce I had flatpak, I was able to get obs installed with the following\ncommand.\n\n``` bash\nflatpak install flathub com.obsproject.Studio\n```\n\nOnce Installed it fired right up for me with the next command they\nsuggested.\n\n``` bash\nflatpak run com.obsproject.Studio\n```\n\n## It Works\n\nPretty straightforward, following the instructions given it all worked\nfor me, but it was missing a lot of the plugins that the current snap\npackage I am using gives me (namely virtual webcam).  So I am not ready\nto jump onto it until I figure out how to manage my own obs plugins.\nFor now I think the snap is working just well enough.\n\n## Links\n\n* [flatpak setup for ubuntu](https://flatpak.org/setup/Ubuntu)\n* [obs release notes](https://github.com/obsproject/obs-studio/releases/tag/27.2.0)\n* [obs flatpak](https://flathub.org/apps/details/com.obsproject.Studio)\n",
      "summary": "Big announcement recently that obs studio now builds out to a flatpak, hopefully making it easier for all of us to install, especially us near normies that...",
      "date_published": "2022-02-25T02:33:16Z",
      "date_modified": "2022-02-25T02:33:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "linux",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/github-supports-mermaid/",
      "url": "https://go.waylonwalker.com/github-supports-mermaid/",
      "title": "GitHub Markdown now Supports Mermaid Diagrams",
      "content_html": "\u003cp\u003eMermaid diagrams provide a way to display graphs defined as plain text.\nSome markdown renderers support this as a plugin.  GitHub now supports\nit.\u003c/p\u003e\n\u003ch2 id=\"example\"\u003eexample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can define nodes like this in mermaid, and GitHub will now render\nthem as a pretty graph diagram.  Its rendered in svg, so its searchable\nwith \u003ccode\u003econtrol f\u003c/code\u003e and everything.\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003e\ngraph TD;\n      A--\u003eB;\n      A--\u003eC;\n      B--\u003eD;\n      C--\u003eD--\u003eOUT;\n      E--\u003eF--\u003eG--\u003eOUT\n\u003c/pre\u003e\n\u003cp\u003e\u003ca href=\"https://images.waylonwalker.com/example-gh-mermaid.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/example-gh-mermaid.png\" alt=\"Here is what the example looks like on\nGitHub\"/ data-glightbox=\"description: Here is what the example looks like on\nGitHub\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/github.blog.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/github.blog.png\" class=\"has-avatar  has-avatar-before\"\u003eGitHub support announcement\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://mermaid-js.github.io/mermaid/#/\"\u003emermaid docs\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cscript type=\"module\"\u003e\n  import mermaid from '/assets/vendor/mermaid/mermaid.esm.min.mjs';\n  const rootStyle = getComputedStyle(document.documentElement);\n  const css = (name, fallback) =\u003e (rootStyle.getPropertyValue(name) || fallback).trim();\n  const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches ||\n    document.documentElement.dataset.theme === 'dark';\n  const accent = css('--color-primary', '#ffcd11');\n  const flowchart = {\n    nodeSpacing: 60,\n    rankSpacing: 90,\n    padding: 12,\n  };\n  const themeCSS = `\n    .label foreignObject \u003e div { padding: 14px 14px 10px; line-height: 1.2; }\n    .nodeLabel { padding: 14px 14px 10px; line-height: 1.2; }\n    * { cursor: pointer; }\n  `;\n  const themeVariables = {\n    background: css('--color-background', '#ffffff'),\n    primaryColor: css('--color-code-bg', '#0a0a0a'),\n    primaryTextColor: css('--color-text', '#1f2937'),\n    primaryBorderColor: accent,\n    lineColor: accent,\n    textColor: css('--color-text', '#1f2937'),\n    nodeBkg: css('--color-code-bg', '#0a0a0a'),\n    nodeBorder: accent,\n    nodeTextColor: css('--color-text', '#1f2937'),\n    fontSize: '16px',\n    nodePadding: 20,\n    nodeTextMargin: 14,\n    clusterBkg: isDark ? css('--color-background', '#0f0f0f') : css('--color-surface', '#f9fafb'),\n    clusterBorder: accent,\n    clusterTextColor: css('--color-text', '#1f2937'),\n    titleColor: css('--color-text', '#1f2937'),\n    edgeLabelBackground: css('--color-code-bg', '#0a0a0a'),\n  };\n\n  const SVG_PAN_ZOOM_CDN = 'https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.2/dist/svg-pan-zoom.min.js';\n  let mermaidLightbox = null;\n  let activePanZoom = null;\n\n  // Inject lightbox styles once\n  const injectLightboxStyles = () =\u003e {\n    if (document.getElementById('mermaid-lightbox-css')) return;\n    const style = document.createElement('style');\n    style.id = 'mermaid-lightbox-css';\n    style.textContent = `\n      /* Container fills the GLightbox slide */\n      .mermaid-lightbox-wrap {\n        width: 100%;\n        height: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        background: transparent;\n        position: relative;\n      }\n      .mermaid-lightbox-wrap svg {\n        width: 100% !important;\n        height: 100% !important;\n        max-width: 100%;\n        max-height: 100%;\n      }\n      /* Hide GLightbox prev/next arrows (single-slide lightbox) */\n      .glightbox-container .gprev,\n      .glightbox-container .gnext {\n        display: none !important;\n      }\n      /* Hide description area that renders as a white box */\n      .glightbox-container .gslide-description,\n      .glightbox-container .gslide-title,\n      .glightbox-container .gdesc-inner,\n      .glightbox-container .gslide-desc {\n        display: none !important;\n      }\n      /* Remove white background from inline slide content */\n      .glightbox-container .gslide-inline {\n        background: transparent !important;\n      }\n      /* Make the inline content area fill the slide */\n      .glightbox-container .ginlined-content {\n        max-width: none !important;\n        max-height: none !important;\n        width: 100%;\n        height: 100%;\n        padding: 0 !important;\n      }\n      /* Remove box-shadow from the media container */\n      .glightbox-container .gslide-media {\n        box-shadow: none !important;\n      }\n      /* Toolbar styling */\n      .mermaid-lightbox-toolbar {\n        position: absolute;\n        top: 8px;\n        right: 8px;\n        z-index: 10;\n        display: flex;\n        gap: 4px;\n      }\n      .mermaid-pz-btn {\n        background: rgba(0,0,0,0.6);\n        color: #fff;\n        border: 1px solid rgba(255,255,255,0.3);\n        border-radius: 4px;\n        padding: 4px 10px;\n        cursor: pointer;\n        font-size: 14px;\n        line-height: 1;\n      }\n      .mermaid-pz-btn:hover {\n        background: rgba(0,0,0,0.8);\n        border-color: rgba(255,255,255,0.6);\n      }\n    `;\n    document.head.appendChild(style);\n  };\n\n  // Lazy-load svg-pan-zoom from CDN, returns a promise\n  const loadSvgPanZoom = () =\u003e {\n    if (typeof svgPanZoom !== 'undefined') return Promise.resolve();\n    return new Promise((resolve, reject) =\u003e {\n      const s = document.createElement('script');\n      s.src = SVG_PAN_ZOOM_CDN;\n      s.onload = resolve;\n      s.onerror = reject;\n      document.head.appendChild(s);\n    });\n  };\n\n  // Initialize svg-pan-zoom on the SVG inside the lightbox.\n  // Retries until the lightbox container has settled dimensions.\n  let _pzRetries = 0;\n  const initPanZoom = () =\u003e {\n    if (activePanZoom) return;\n    const container = document.querySelector('.glightbox-container .gslide.current .mermaid-lightbox-wrap');\n    if (!container) return;\n    const svgEl = container.querySelector('svg');\n    if (!svgEl) return;\n\n    // Ensure the container has layout dimensions before initializing.\n    const cRect = container.getBoundingClientRect();\n    if (cRect.width \u003c 10 || cRect.height \u003c 10) {\n      if (_pzRetries \u003c 20) { _pzRetries++; setTimeout(initPanZoom, 50); }\n      return;\n    }\n\n    // svg-pan-zoom needs a viewBox. Pre-rendered SVGs from mermaid\n    // usually have one; browser-rendered ones may not.\n    if (!svgEl.getAttribute('viewBox')) {\n      let w = parseFloat(svgEl.getAttribute('width'));\n      let h = parseFloat(svgEl.getAttribute('height'));\n      if (!w \u0026\u0026 svgEl.style.maxWidth) w = parseFloat(svgEl.style.maxWidth);\n      if (!w || !h) {\n        const r = svgEl.getBoundingClientRect();\n        if (!w) w = r.width;\n        if (!h) h = r.height;\n      }\n      if (w \u003e 0 \u0026\u0026 h \u003e 0) {\n        svgEl.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n      } else if (_pzRetries \u003c 20) {\n        _pzRetries++; setTimeout(initPanZoom, 50); return;\n      }\n    }\n    _pzRetries = 0;\n\n    // Clear inline dimensions so SVG can be sized by the container\n    // and svg-pan-zoom can manage transforms.\n    svgEl.removeAttribute('width');\n    svgEl.removeAttribute('height');\n    svgEl.style.cssText = 'width:100%;height:100%;';\n\n    try {\n      activePanZoom = svgPanZoom(svgEl, {\n        zoomEnabled: true,\n        panEnabled: true,\n        controlIconsEnabled: false,\n        fit: true,\n        center: true,\n        contain: false,\n        minZoom: 0.3,\n        maxZoom: 10,\n        zoomScaleSensitivity: 0.3,\n        mouseWheelZoomEnabled: true,\n        preventMouseEventsDefault: true,\n      });\n      // Double-check fit after a frame in case dimensions shifted\n      requestAnimationFrame(() =\u003e {\n        if (!activePanZoom) return;\n        activePanZoom.resize();\n        activePanZoom.fit();\n        activePanZoom.center();\n      });\n    } catch (_) {\n      activePanZoom = null;\n    }\n\n    // Add reset/fit buttons\n    let toolbar = container.querySelector('.mermaid-lightbox-toolbar');\n    if (!toolbar) {\n      toolbar = document.createElement('div');\n      toolbar.className = 'mermaid-lightbox-toolbar';\n      toolbar.innerHTML =\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"fit\" title=\"Fit to view\"\u003eFit\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomin\" title=\"Zoom in\"\u003e+\u003c/button\u003e' +\n        '\u003cbutton class=\"mermaid-pz-btn\" data-action=\"zoomout\" title=\"Zoom out\"\u003e\u0026minus;\u003c/button\u003e';\n      toolbar.addEventListener('click', (ev) =\u003e {\n        const btn = ev.target.closest('[data-action]');\n        if (!btn || !activePanZoom) return;\n        ev.preventDefault();\n        ev.stopPropagation();\n        const action = btn.dataset.action;\n        if (action === 'fit') { activePanZoom.resize(); activePanZoom.fit(); activePanZoom.center(); }\n        else if (action === 'zoomin') { activePanZoom.zoomIn(); }\n        else if (action === 'zoomout') { activePanZoom.zoomOut(); }\n      });\n      container.prepend(toolbar);\n    }\n  };\n\n  // Destroy pan-zoom on lightbox close\n  const destroyPanZoom = () =\u003e {\n    if (activePanZoom) {\n      try { activePanZoom.destroy(); } catch (_) { /* no-op */ }\n      activePanZoom = null;\n    }\n  };\n\n  let _lbRetries = 0;\n  const ensureMermaidLightbox = () =\u003e {\n    const diagrams = document.querySelectorAll('.mermaid svg');\n    if (!diagrams.length) {\n      // Mermaid ESM may still be rendering -- retry up to 2s\n      if (_lbRetries \u003c 20) { _lbRetries++; setTimeout(ensureMermaidLightbox, 100); }\n      return;\n    }\n    _lbRetries = 0;\n    injectLightboxStyles();\n    diagrams.forEach((svg) =\u003e {\n      if (svg.dataset.lightboxBound) return;\n      svg.dataset.lightboxBound = 'true';\n      svg.style.cursor = 'pointer';\n      svg.addEventListener('click', (e) =\u003e {\n        e.preventDefault();\n        e.stopPropagation();\n        const svgHtml = svg.outerHTML;\n        const openLightbox = () =\u003e {\n          if (!mermaidLightbox) {\n            mermaidLightbox = GLightbox({\n              selector: false,\n              openEffect: 'fade',\n              closeEffect: 'fade',\n              zoomable: false,\n              draggable: false,\n              skin: 'clean',\n            });\n            mermaidLightbox.on('slide_after_load', () =\u003e {\n              destroyPanZoom();\n              _pzRetries = 0;\n              loadSvgPanZoom().then(() =\u003e initPanZoom());\n            });\n            mermaidLightbox.on('close', destroyPanZoom);\n          }\n          mermaidLightbox.setElements([{\n            content: '\u003cdiv class=\"mermaid-lightbox-wrap\"\u003e' + svgHtml + '\u003c/div\u003e',\n            width: '90vw',\n            height: '90vh'\n          }]);\n          mermaidLightbox.open();\n          loadSvgPanZoom();\n        };\n        if (typeof GLightbox !== 'undefined') {\n          openLightbox();\n        } else if (window.initGLightbox) {\n          window.initGLightbox();\n          openLightbox();\n        } else {\n          window.addEventListener('glightbox-ready', () =\u003e { openLightbox(); }, { once: true });\n        }\n      });\n    });\n  };\n\n  mermaid.initialize({ startOnLoad: false, theme: 'base', themeVariables, flowchart, themeCSS });\n  window.initMermaid = async () =\u003e {\n    try {\n      await mermaid.run();\n    } catch (e) {\n      console.error('mermaid.run failed:', e);\n    }\n    ensureMermaidLightbox();\n  };\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () =\u003e window.initMermaid());\n  } else {\n    window.initMermaid();\n  }\n\u003c/script\u003e",
      "content_text": "\nMermaid diagrams provide a way to display graphs defined as plain text.\nSome markdown renderers support this as a plugin.  GitHub now supports\nit.\n\n## example\n\nYou can define nodes like this in mermaid, and GitHub will now render\nthem as a pretty graph diagram.  Its rendered in svg, so its searchable\nwith `control f` and everything.\n\n```mermaid\n  graph TD;\n      A--\u003eB;\n      A--\u003eC;\n      B--\u003eD;\n      C--\u003eD--\u003eOUT;\n      E--\u003eF--\u003eG--\u003eOUT\n```\n\n![Here is what the example looks like on\nGitHub](https://images.waylonwalker.com/example-gh-mermaid.png)\n\n## Links\n\n* [GitHub support announcement](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/)\n* [mermaid docs](https://mermaid-js.github.io/mermaid/#/)\n",
      "summary": "Mermaid diagrams provide a way to display graphs defined as plain text. Some markdown renderers support this as a plugin. GitHub now supports it.",
      "date_published": "2022-02-24T15:22:31Z",
      "date_modified": "2022-02-24T15:22:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-rebase-root/",
      "url": "https://go.waylonwalker.com/git-rebase-root/",
      "title": "Git rebase to the beginning of time",
      "content_html": "\u003cp\u003e\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e has a built in way to rebase all the way back to the beginning of\ntime.  There is no need to scroll through the log to find the first\nhash, or find the total number of commits. Just use \u003ccode\u003e--root\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit rebase --root\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nGit has a built in way to rebase all the way back to the beginning of\ntime.  There is no need to scroll through the log to find the first\nhash, or find the total number of commits. Just use `--root`.\n\n``` bash\ngit rebase --root\n```\n",
      "summary": "Git has a built in way to rebase all the way back to the beginning of time. There is no need to scroll through the log to find the first hash, or find the...",
      "date_published": "2022-02-23T15:57:37Z",
      "date_modified": "2022-02-23T15:57:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/glances-docker/",
      "url": "https://go.waylonwalker.com/glances-docker/",
      "title": "Glances can watch docker processes",
      "content_html": "\u003cp\u003eGlances is a system monitor with a ton of features, including docker processes.\u003c/p\u003e\n\u003cp\u003eI have started using portainer to look at running docker processes, its a great\nheavy-weight docker process monitor.  glances works as a great lightweight\nmonitor to just give you the essentials, ( Name, Status, CPU%, MEM, /MAX,\nIOR/s, IOW/s, Rx/s, Tx/s, Command)\u003c/p\u003e\n\u003ch2 id=\"install\"\u003einstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need to install glances to use the glances webui.  We can still use\n\u003ccode\u003epipx\u003c/code\u003e to manage our \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e for us so that we do not need to do so\nmanually or run the risk of globally installed package dependency hell.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install glances\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx inject glances \u003cspan class=\"s2\"\u003e\u0026#34;glances[docker]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou will be presented with this success message.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  injected package glances into venv glances\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e! ✨ 🌟 ✨\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"results\"\u003eresults \u003ca href=\"#results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow running glances will also show information about your running docker\ncontainers.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/glances-docker.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/glances-docker.png\" alt=\"running glances with docker installed will show your docker processes\"/ data-glightbox=\"description: running glances with docker installed will show your docker processes\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://glances.readthedocs.io/en/catest/docker.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/glances.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/glances.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003eglances docker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://pipx.pypa.io/stable/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pipx.pypa.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pipx.pypa.io.png\" class=\"has-avatar  has-avatar-before\"\u003epipx\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://nicolargo.github.io/glances/\"\u003ewebsite\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://glances.readthedocs.io/en/latest/index.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/glances.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/glances.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003edocs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nicolargo/glances\" 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\"\u003egithub\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nGlances is a system monitor with a ton of features, including docker processes.\n\nI have started using portainer to look at running docker processes, its a great\nheavy-weight docker process monitor.  glances works as a great lightweight\nmonitor to just give you the essentials, ( Name, Status, CPU%, MEM, /MAX,\nIOR/s, IOW/s, Rx/s, Tx/s, Command)\n\n## install\n\nYou will need to install glances to use the glances webui.  We can still use\n`pipx` to manage our virtual environment for us so that we do not need to do so\nmanually or run the risk of globally installed package dependency hell.\n\n``` bash\npipx install glances\npipx inject glances \"glances[docker]\"\n```\n\nYou will be presented with this success message.\n\n``` bash\n  injected package glances into venv glances\ndone! ✨ 🌟 ✨\n```\n\n## results\n\nNow running glances will also show information about your running docker\ncontainers.\n\n![running glances with docker installed will show your docker processes](https://images.waylonwalker.com/glances-docker.png)\n\n## Links\n\n* [glances docker](https://glances.readthedocs.io/en/catest/docker.html)\n* [pipx](https://pipx.pypa.io/stable/)\n* [website](https://nicolargo.github.io/glances/)\n* [docs](https://glances.readthedocs.io/en/latest/index.html)\n* [github](https://github.com/nicolargo/glances)\n",
      "summary": "Glances is a system monitor with a ton of features, including docker processes.",
      "date_published": "2022-02-22T16:38:42Z",
      "date_modified": "2022-02-22T16:38:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-bubbletea/",
      "url": "https://go.waylonwalker.com/charmbracelet-bubbletea/",
      "title": "⭐ charmbracelet bubbletea",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/charmbracelet/bubbletea\" 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\"\u003ebubbletea\u003c/a\u003e by \u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA powerful little TUI framework 🏗\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [bubbletea](https://github.com/charmbracelet/bubbletea) by [charmbracelet](https://github.com/charmbracelet).\n\nA powerful little TUI framework 🏗\n",
      "summary": "Looking for inspiration? bubbletea by charmbracelet.",
      "date_published": "2022-02-21T21:15:03Z",
      "date_modified": "2022-02-21T21:15:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-revive-dead-files/",
      "url": "https://go.waylonwalker.com/git-revive-dead-files/",
      "title": "Revive files from the dead with git",
      "content_html": "\u003cp\u003e\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e reflog can perform some serious magic in reviving your hard work\nfrom the dead if you happen to loose it.\u003c/p\u003e\n\u003ch2 id=\"caveat\"\u003ecaveat \u003ca href=\"#caveat\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou must git commit!  If you never commit the file, git cannot help you.\nYou might look into your trashcan, filesystem versions, onedrive, box, dropbox.\nIf you have none of this, then you are probably hosed.\u003c/p\u003e\n\u003ch2 id=\"practice\"\u003epractice \u003ca href=\"#practice\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI really like to practice these techniques before I need to use them so\nthat I understand how they work in a low stakes fashion.  This helps me\nunderstand what I can and cannot do, and how to do it in a place that\ndoes not matter in any way at all.\u003c/p\u003e\n\u003cp\u003eThis is what I did to revive a dropped \u003ccode\u003edocker-compose.yml\u003c/code\u003e file.  The\nidea is that if I can find the commit hash, I can \u003ccode\u003echerry-pick\u003c/code\u003e it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etouch readme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add readme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;add readme\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etouch docker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add docker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;add docker-compose\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reset 3cfc --hard\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reflog\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# copy the hash of the commit with my docker-compose commit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit cherry-pick fd74df3\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"reflog\"\u003ereflog \u003ca href=\"#reflog\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere was the final reflog that shows all of my git actions.  \u003cstrong\u003enote\u003c/strong\u003e I\ndid reset twice.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git reflog --name-only\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e0404b6a \u003cspan class=\"o\"\u003e(\u003c/span\u003eHEAD -\u0026gt; main\u003cspan class=\"o\"\u003e)\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e0\u003cspan class=\"o\"\u003e}\u003c/span\u003e: cherry-pick: add docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e1\u003cspan class=\"o\"\u003e}\u003c/span\u003e: reset: moving to 3cfc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e9175695\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e2\u003cspan class=\"o\"\u003e}\u003c/span\u003e: cherry-pick: add docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e3\u003cspan class=\"o\"\u003e}\u003c/span\u003e: reset: moving to 3cfc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efd74df3 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e4\u003cspan class=\"o\"\u003e}\u003c/span\u003e: commit: add docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e5\u003cspan class=\"o\"\u003e}\u003c/span\u003e: reset: moving to HEAD\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e6\u003cspan class=\"o\"\u003e}\u003c/span\u003e: commit \u003cspan class=\"o\"\u003e(\u003c/span\u003einitial\u003cspan class=\"o\"\u003e)\u003c/span\u003e: add readme\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nGit reflog can perform some serious magic in reviving your hard work\nfrom the dead if you happen to loose it.\n\n## caveat\n\nYou must git commit!  If you never commit the file, git cannot help you.\nYou might look into your trashcan, filesystem versions, onedrive, box, dropbox.\nIf you have none of this, then you are probably hosed.\n\n## practice\n\nI really like to practice these techniques before I need to use them so\nthat I understand how they work in a low stakes fashion.  This helps me\nunderstand what I can and cannot do, and how to do it in a place that\ndoes not matter in any way at all.\n\nThis is what I did to revive a dropped `docker-compose.yml` file.  The\nidea is that if I can find the commit hash, I can `cherry-pick` it.\n\n``` bash\ngit init\ntouch readme.md\ngit add readme.md\ngit commit -m \"add readme\"\ntouch docker-compose.yml\ngit add docker-compose.yml\ngit commit -m \"add docker-compose\"\ngit reset 3cfc --hard\ngit reflog\n# copy the hash of the commit with my docker-compose commit\ngit cherry-pick fd74df3\n```\n\n## reflog\n\nHere was the final reflog that shows all of my git actions.  **note** I\ndid reset twice.\n\n``` bash\n❯ git reflog --name-only\n0404b6a (HEAD -\u003e main) HEAD@{0}: cherry-pick: add docker-compose\ndocker-compose.yml\n3cfcab9 HEAD@{1}: reset: moving to 3cfc\nreadme.md\n9175695 HEAD@{2}: cherry-pick: add docker-compose\ndocker-compose.yml\n3cfcab9 HEAD@{3}: reset: moving to 3cfc\nreadme.md\nfd74df3 HEAD@{4}: commit: add docker-compose\ndocker-compose.yml\n3cfcab9 HEAD@{5}: reset: moving to HEAD\nreadme.md\n3cfcab9 HEAD@{6}: commit (initial): add readme\nreadme.md\n```\n",
      "summary": "Git reflog can perform some serious magic in reviving your hard work from the dead if you happen to loose it.",
      "date_published": "2022-02-21T15:44:02Z",
      "date_modified": "2022-02-21T15:44:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pipx-w/",
      "url": "https://go.waylonwalker.com/pipx-w/",
      "title": "Glances webui with pipx",
      "content_html": "\u003cp\u003eGlances has a pretty incredible webui to view system processes and information\nlike htop, or task manager for windows.\u003c/p\u003e\n\u003cp\u003eThe nice thing about the webui is that it can be accessed from a remote system.\nThis would be super nice on something like a raspberry pi, or a vm running in\nthe cloud.  Its also less intimidating and easier to search if you are not a\nterminal junky.\u003c/p\u003e\n\u003ch2 id=\"install\"\u003einstall \u003ca href=\"#install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need to install glances to use the glances webui.  We can still use\n\u003ccode\u003epipx\u003c/code\u003e to manage our \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e for us so that we do not need to do so\nmanually or run the risk of globally installed package dependency hell.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install glances\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx inject glances \u003cspan class=\"s2\"\u003e\u0026#34;glances[web]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou will be presented with this success message.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  injected package glances into venv glances\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e! ✨ 🌟 ✨\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"running-the-webui\"\u003erunning the webui \u003ca href=\"#running-the-webui\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that you have glances installed you can run it with the \u003ccode\u003e-w\u003c/code\u003e flag to run\nthe webui.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eglances -w\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis will present you with the following success message.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGlances Web User Interface started on http://0.0.0.0:61208/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"open-it-in-your-browser\"\u003eOpen it in your browser \u003ca href=\"#open-it-in-your-browser\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that its running you can open your web browser to \u003ccode\u003elocalhost:61208\u003c/code\u003e and be\npresented with the glances webui.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/glances-w.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/glances-w.png\" alt=\"running the glances webui on my system\"/ data-glightbox=\"description: running the glances webui on my system\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://pipx.pypa.io/stable/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pipx.pypa.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pipx.pypa.io.png\" class=\"has-avatar  has-avatar-before\"\u003epipx\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://nicolargo.github.io/glances/\"\u003ewebsite\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://glances.readthedocs.io/en/latest/index.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/glances.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/glances.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003edocs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nicolargo/glances\" 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\"\u003egithub\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nGlances has a pretty incredible webui to view system processes and information\nlike htop, or task manager for windows.\n\nThe nice thing about the webui is that it can be accessed from a remote system.\nThis would be super nice on something like a raspberry pi, or a vm running in\nthe cloud.  Its also less intimidating and easier to search if you are not a\nterminal junky.\n\n## install\n\nYou will need to install glances to use the glances webui.  We can still use\n`pipx` to manage our virtual environment for us so that we do not need to do so\nmanually or run the risk of globally installed package dependency hell.\n\n``` bash\npipx install glances\npipx inject glances \"glances[web]\"\n```\n\nYou will be presented with this success message.\n\n``` bash\n  injected package glances into venv glances\ndone! ✨ 🌟 ✨\n```\n\n## running the webui\n\nNow that you have glances installed you can run it with the `-w` flag to run\nthe webui.\n\n``` bash\nglances -w\n```\n\nThis will present you with the following success message.\n\n``` bash\nGlances Web User Interface started on http://0.0.0.0:61208/\n```\n\n## Open it in your browser\n\nNow that its running you can open your web browser to `localhost:61208` and be\npresented with the glances webui.\n\n![running the glances webui on my system](https://images.waylonwalker.com/glances-w.png)\n\n## Links\n\n* [pipx](https://pipx.pypa.io/stable/)\n* [website](https://nicolargo.github.io/glances/)\n* [docs](https://glances.readthedocs.io/en/latest/index.html)\n* [github](https://github.com/nicolargo/glances)\n",
      "summary": "Glances has a pretty incredible webui to view system processes and information like htop, or task manager for windows.",
      "date_published": "2022-02-20T16:25:49Z",
      "date_modified": "2022-02-20T16:25:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bashbunni-pjs/",
      "url": "https://go.waylonwalker.com/bashbunni-pjs/",
      "title": "⭐ bashbunni pjs",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/bashbunni/pjs\" 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\"\u003epjs\u003c/a\u003e, created by \u003ca href=\"https://github.com/bashbunni\" 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\"\u003ebashbunni\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA basic CLI for regularly updating your project’s status\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [pjs](https://github.com/bashbunni/pjs), created by [bashbunni](https://github.com/bashbunni).\n\nA basic CLI for regularly updating your project's status\n",
      "summary": "If you're into interesting projects, don't miss out on pjs, created by bashbunni.",
      "date_published": "2022-02-19T19:38:10Z",
      "date_modified": "2022-02-19T19:38:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/git-reflog-is-an-alias/",
      "url": "https://go.waylonwalker.com/git-reflog-is-an-alias/",
      "title": "Git reflog is an alias for git log -g",
      "content_html": "\u003cp\u003eRight inside the \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e \u003ca href=\"https://git-scm.com/docs/git-reflog#_description\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/git-scm.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/git-scm.com.ico\" class=\"has-avatar  has-avatar-before\"\u003edocs\u003c/a\u003e,\nis states that the \u003ccode\u003egit reflog\u003c/code\u003e command runs \u003ccode\u003egit reflog show\u003c/code\u003e by default which\nis an alias for \u003ccode\u003egit log -g --abbrev-commit --pretty=oneline\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis epiphany deepens my understanding of git, and lets me understand that most\n\u003ccode\u003egit log\u003c/code\u003e flags might also work with \u003ccode\u003egit log -g\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"full-or-short-format\"\u003efull or short format \u003ca href=\"#full-or-short-format\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are some git commands for you to try out on your own that are all pretty\nsimilar, but vary in how much information they show.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-stat\"\u003e# These show only first line of the commit message subject, the hash, and index\ngit reflog\ngit log -g --abbrev-commit --pretty=oneline\n\n# similar to git log, this is a fully featured log with author, date, and full\n# commit message\ngit log -g\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"add-files\"\u003eadd files \u003ca href=\"#add-files\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf I am looking for a missing file, I might want to leverage \u003ccode\u003e--name-only\u003c/code\u003e or\n\u003ccode\u003e--stat\u003c/code\u003e, to see where I might have hard reset that file, or deleted it.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egit reflog --stat\ngit log -g --stat --abbrev-commit --pretty=oneline\n\ngit reflog --name-only\ngit log -g --name-only --abbrev-commit --pretty=oneline\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"example\"\u003eexample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is an example where I lost my \u003ccode\u003edocker-compose.yml\u003c/code\u003e file in a git reset,\nand got it back by finding the commit hash with \u003ccode\u003egit reflog\u003c/code\u003e and cherry picked\nit back.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git reflog --name-only\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e0404b6a \u003cspan class=\"o\"\u003e(\u003c/span\u003eHEAD -\u0026gt; main\u003cspan class=\"o\"\u003e)\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e0\u003cspan class=\"o\"\u003e}\u003c/span\u003e: cherry-pick: add docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e1\u003cspan class=\"o\"\u003e}\u003c/span\u003e: reset: moving to 3cfc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e9175695\u003c/span\u003e HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e2\u003cspan class=\"o\"\u003e}\u003c/span\u003e: cherry-pick: add docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e3\u003cspan class=\"o\"\u003e}\u003c/span\u003e: reset: moving to 3cfc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efd74df3 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e4\u003cspan class=\"o\"\u003e}\u003c/span\u003e: commit: add docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e5\u003cspan class=\"o\"\u003e}\u003c/span\u003e: reset: moving to HEAD\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3cfcab9 HEAD@\u003cspan class=\"o\"\u003e{\u003c/span\u003e6\u003cspan class=\"o\"\u003e}\u003c/span\u003e: commit \u003cspan class=\"o\"\u003e(\u003c/span\u003einitial\u003cspan class=\"o\"\u003e)\u003c/span\u003e: add readme\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereadme.md\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis just proves that its harder to remove something from git, than it is to\nget it back.  It can feel impossible to get something back, but once its in, it\nfeels even more impossible to get it out.\u003c/p\u003e\n",
      "content_text": "\n\nRight inside the git [docs](https://git-scm.com/docs/git-reflog#_description),\nis states that the `git reflog` command runs `git reflog show` by default which\nis an alias for `git log -g --abbrev-commit --pretty=oneline`\n\nThis epiphany deepens my understanding of git, and lets me understand that most\n`git log` flags might also work with `git log -g`.\n\n\n## full or short format\n\nHere are some git commands for you to try out on your own that are all pretty\nsimilar, but vary in how much information they show.\n\n``` stat\n# These show only first line of the commit message subject, the hash, and index\ngit reflog\ngit log -g --abbrev-commit --pretty=oneline\n\n# similar to git log, this is a fully featured log with author, date, and full\n# commit message\ngit log -g\n```\n\n## add files\n\nIf I am looking for a missing file, I might want to leverage `--name-only` or\n`--stat`, to see where I might have hard reset that file, or deleted it.\n\n```\ngit reflog --stat\ngit log -g --stat --abbrev-commit --pretty=oneline\n\ngit reflog --name-only\ngit log -g --name-only --abbrev-commit --pretty=oneline\n```\n\n## example\n\nHere is an example where I lost my `docker-compose.yml` file in a git reset,\nand got it back by finding the commit hash with `git reflog` and cherry picked\nit back.\n\n``` bash\n❯ git reflog --name-only\n0404b6a (HEAD -\u003e main) HEAD@{0}: cherry-pick: add docker-compose\ndocker-compose.yml\n3cfcab9 HEAD@{1}: reset: moving to 3cfc\nreadme.md\n9175695 HEAD@{2}: cherry-pick: add docker-compose\ndocker-compose.yml\n3cfcab9 HEAD@{3}: reset: moving to 3cfc\nreadme.md\nfd74df3 HEAD@{4}: commit: add docker-compose\ndocker-compose.yml\n3cfcab9 HEAD@{5}: reset: moving to HEAD\nreadme.md\n3cfcab9 HEAD@{6}: commit (initial): add readme\nreadme.md\n```\n\nThis just proves that its harder to remove something from git, than it is to\nget it back.  It can feel impossible to get something back, but once its in, it\nfeels even more impossible to get it out.\n",
      "summary": "Right inside the git docs, is states that the command runs by default which is an alias for",
      "date_published": "2022-02-19T15:02:52Z",
      "date_modified": "2022-02-19T15:02:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pipx-run-glances/",
      "url": "https://go.waylonwalker.com/pipx-run-glances/",
      "title": "Run glances without install with pipx",
      "content_html": "\u003cp\u003eGlances is a fully featured system monitoring tool written in python.  Out of\nthe box it’s quite similar to htop, but has quite a few more features, and can\nbe ran without installing anything other than \u003ccode\u003epipx\u003c/code\u003e, which you should already\nhave installed if you do anything with python.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx run glances\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce you run this you will be in a tui application similar to htop.  You can\nkill processes with k, use left and right arrows to change the sorting column,\nand up and down to select different processes.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/pipx-run-glances.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/pipx-run-glances.png\" alt=\"running pipx run glances on my ubuntu 21.10 machine inside the kitty terminal\"/ data-glightbox=\"description: running pipx run glances on my ubuntu 21.10 machine inside the kitty terminal\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://pipx.pypa.io/stable/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pipx.pypa.io.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pipx.pypa.io.png\" class=\"has-avatar  has-avatar-before\"\u003epipx\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://nicolargo.github.io/glances/\"\u003ewebsite\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://glances.readthedocs.io/en/latest/index.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/glances.readthedocs.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/glances.readthedocs.io.ico\" class=\"has-avatar  has-avatar-before\"\u003edocs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nicolargo/glances\" 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\"\u003egithub\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nGlances is a fully featured system monitoring tool written in python.  Out of\nthe box it's quite similar to htop, but has quite a few more features, and can\nbe ran without installing anything other than `pipx`, which you should already\nhave installed if you do anything with python.\n\n``` bash\npipx run glances\n```\n\nOnce you run this you will be in a tui application similar to htop.  You can\nkill processes with k, use left and right arrows to change the sorting column,\nand up and down to select different processes.\n\n![running pipx run glances on my ubuntu 21.10 machine inside the kitty terminal](https://images.waylonwalker.com/pipx-run-glances.png)\n\n## Links\n\n* [pipx](https://pipx.pypa.io/stable/)\n* [website](https://nicolargo.github.io/glances/)\n* [docs](https://glances.readthedocs.io/en/latest/index.html)\n* [github](https://github.com/nicolargo/glances)\n",
      "summary": "Glances is a fully featured system monitoring tool written in python. Out of the box it's quite similar to htop, but has quite a few more features, and can...",
      "date_published": "2022-02-18T16:17:26Z",
      "date_modified": "2022-02-18T16:17:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-nested-requires/",
      "url": "https://go.waylonwalker.com/python-nested-requires/",
      "title": "Nested requirements.txt in python",
      "content_html": "\u003cp\u003epython requirements text files can in fact depend on each other due to\nthe fact that you can pass pip install arguments right into your\n\u003ccode\u003erequirements.txt\u003c/code\u003e file.  The trick is to just prefix the file with a\n\u003ccode\u003e-r\u003c/code\u003e flag, just like you would if you were installing it with \u003ccode\u003epip install\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"try-it-out\"\u003etry it out \u003ca href=\"#try-it-out\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLets create two requirements files in a new directory to play with.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir requirements-nest\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e requirements-nest\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etouch requirements.txt requirements_dev.txt\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen add the following to each requirements file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# requirements.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekedro[pandas.ParquetDataSet]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# requirements_dev.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r requirements.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eipython\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"installing\"\u003eInstalling \u003ca href=\"#installing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstalling requirements_dev.txt will install both ipython and pandas\nsince it includes the base requirements file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this will install only pandas\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install -r requirements.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this will install both ipython and pandas\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install -r requirements_dev.txt\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is covered in the\n\u003ca href=\"https://pip.pypa.io/en/stable/user_guide/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pip.pypa.io.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pip.pypa.io.ico\" class=\"has-avatar  has-avatar-before\"\u003epip user guide\u003c/a\u003e,\nbut it is not obvious that this can be done in a requirements.txt\nfile.\u003c/p\u003e\n",
      "content_text": "\npython requirements text files can in fact depend on each other due to\nthe fact that you can pass pip install arguments right into your\n`requirements.txt` file.  The trick is to just prefix the file with a\n`-r` flag, just like you would if you were installing it with `pip\ninstall`\n\n## try it out\nLets create two requirements files in a new directory to play with.\n\n``` bash\nmkdir requirements-nest\ncd requirements-nest\ntouch requirements.txt requirements_dev.txt\n```\n\nThen add the following to each requirements file.\n\n``` txt\n# requirements.txt\nkedro[pandas.ParquetDataSet]\n```\n\n```txt\n# requirements_dev.txt\n-r requirements.txt\nipython\n```\n\n## Installing\n\nInstalling requirements_dev.txt will install both ipython and pandas\nsince it includes the base requirements file.\n\n``` bash\n# this will install only pandas\npip install -r requirements.txt\n\n# this will install both ipython and pandas\npip install -r requirements_dev.txt\n```\n\n## Links\n\nThis is covered in the\n[pip user guide](https://pip.pypa.io/en/stable/user_guide/),\nbut it is not obvious that this can be done in a requirements.txt\nfile.\n",
      "summary": "python requirements text files can in fact depend on each other due to the fact that you can pass pip install arguments right into your file. The trick is to...",
      "date_published": "2022-02-17T15:53:20Z",
      "date_modified": "2022-02-17T15:53:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/modded-minecraft-in-docker/",
      "url": "https://go.waylonwalker.com/modded-minecraft-in-docker/",
      "title": "Modded Minecraft in Docker",
      "content_html": "\u003cp\u003eIn my adventure to put more \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 in docker, I moved our modded\nminecraft setup to docker.\u003c/p\u003e\n\u003ch2 id=\"getting-mods\"\u003eGetting Mods \u003ca href=\"#getting-mods\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo far I have found all of our mods from \u003ca href=\"https://www.curseforge.com/minecraft/mc-mods\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.curseforge.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.curseforge.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ecurse\nforge\u003c/a\u003e.  modpacks make\ngetting multiple mods working together much easier, someone else has\nalready vetted a pack of often times 100+ mods that all play well\ntogether.  I have yet to get these working in docker, I will, but for\nnot I just have individual mods.\u003c/p\u003e\n\u003ch2 id=\"download-file\"\u003edownload file \u003ca href=\"#download-file\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eunder the hood docker is using wget to get the mod. The link you click\non from curseforge will block wget.  What I do is pop open the devtools\n(f12 in chrome), click on the network tab, click the download link on\nthe web page, and watch the real link show up.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/minecraft-mod-wget-file.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/minecraft-mod-wget-file.png\" alt=\"minecraft mod in netwrok tab\"/ data-glightbox=\"description: minecraft mod in netwrok tab\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"docker-compose\"\u003eDocker-compose \u003ca href=\"#docker-compose\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI am using docker compose, it makes the command much easier to start,\nand all the things needed stored in a file.  I am not using compose to\nrun multiple things, just for the simple start command.\u003c/p\u003e\n\u003cp\u003eCreate a directory for your server and add the following to a\n\u003ccode\u003edocker-compose.yml\u003c/code\u003e file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;3.8\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eservices\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003emc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainer_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ewalkercraft\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eitzg/minecraft-server\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eports\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eEULA\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;TRUE\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eTYPE\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;FORGE\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eVERSION\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1.16.5\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eMODS_FILE\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/extras/mods.txt\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eREMOVE_OLD_MODS\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etty\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003estdin_open\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erestart\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eunless-stopped\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eports\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003e./minecraft-data:/data\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003e./mods.txt:/extras/mods.txt:ro\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"modstxt\"\u003emods.txt \u003ca href=\"#modstxt\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce you have your mod file link from the network tab add them to a\nmods.txt file next to your docker-compose file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttps://media.forgecdn.net/files/3620/189/engineersdecor-1.16.5-1.1.16.jar\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"start-your-server\"\u003estart your server \u003ca href=\"#start-your-server\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce you have made it this far starting the server is pretty simple.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker compose up -d\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"kill-your-server\"\u003ekill your server \u003ca href=\"#kill-your-server\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf your still in the same directory, taking down the server should be\npretty easy as well.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker compose down\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# if that does not work you can kill it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker ps\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# copy the id of your container\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker \u003cspan class=\"nb\"\u003ekill\u003c/span\u003e \u0026lt;id\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIn my adventure to put more homelab in docker, I moved our modded\nminecraft setup to docker.\n\n## Getting Mods\n\nSo far I have found all of our mods from [curse\nforge](https://www.curseforge.com/minecraft/mc-mods).  modpacks make\ngetting multiple mods working together much easier, someone else has\nalready vetted a pack of often times 100+ mods that all play well\ntogether.  I have yet to get these working in docker, I will, but for\nnot I just have individual mods.\n\n## download file\n\nunder the hood docker is using wget to get the mod. The link you click\non from curseforge will block wget.  What I do is pop open the devtools\n(f12 in chrome), click on the network tab, click the download link on\nthe web page, and watch the real link show up.\n\n![minecraft mod in netwrok tab](https://images.waylonwalker.com/minecraft-mod-wget-file.png)\n\n## Docker-compose\n\nI am using docker compose, it makes the command much easier to start,\nand all the things needed stored in a file.  I am not using compose to\nrun multiple things, just for the simple start command.\n\nCreate a directory for your server and add the following to a\n`docker-compose.yml` file.\n\n``` yaml\nversion: \"3.8\"\n\nservices:\n  mc:\n    container_name: walkercraft\n    image: itzg/minecraft-server\n    ports:\n      - 25565:25565\n    environment:\n      EULA: \"TRUE\"\n      TYPE: \"FORGE\"\n      VERSION: 1.16.5\n      MODS_FILE: /extras/mods.txt\n      REMOVE_OLD_MODS: \"true\"\n    tty: true\n    stdin_open: true\n    restart: unless-stopped\n    ports:\n      - 25565:25565\n    volumes:\n      - ./minecraft-data:/data\n      - ./mods.txt:/extras/mods.txt:ro\n\nvolumes:\n  data:\n```\n\n## mods.txt\n\nOnce you have your mod file link from the network tab add them to a\nmods.txt file next to your docker-compose file.\n\n``` txt\nhttps://media.forgecdn.net/files/3620/189/engineersdecor-1.16.5-1.1.16.jar\n```\n\n## start your server\n\nOnce you have made it this far starting the server is pretty simple.\n\n``` bash\ndocker compose up -d\n```\n\n## kill your server\n\nIf your still in the same directory, taking down the server should be\npretty easy as well.\n\n``` bash\ndocker compose down\n\n# if that does not work you can kill it\ndocker ps\n# copy the id of your container\ndocker kill \u003cid\u003e\n```\n",
      "summary": "In my adventure to put more homelab in docker, I moved our modded minecraft setup to docker.",
      "date_published": "2022-02-16T14:44:38Z",
      "date_modified": "2022-02-16T14:44:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "homelab",
        "docker",
        "minecraft",
        "gaming"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/aws-eventbridge-visidata/",
      "url": "https://go.waylonwalker.com/aws-eventbridge-visidata/",
      "title": "View AWS event bridge rules with visidata",
      "content_html": "\u003cp\u003eReading eventbridge rules from the command line can be a total drag, pipe it\ninto visidata to make it a breeze.\u003c/p\u003e\n\u003cp\u003eI just love when I start thinking through how to parse a bunch of json at the\ncommand line, maybe building out my own custom cli, then the solution is as\nsimple as piping it into visidata.  Which is a fantastic tui application that\nhad a ton of vim-like keybindings and data features.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ealias\u003c/span\u003e \u003cspan class=\"n\"\u003eawsevents\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eaws\u003c/span\u003e \u003cspan class=\"n\"\u003eevents\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003erules\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003evisidata\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"n\"\u003ejson\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nReading eventbridge rules from the command line can be a total drag, pipe it\ninto visidata to make it a breeze.\n\nI just love when I start thinking through how to parse a bunch of json at the\ncommand line, maybe building out my own custom cli, then the solution is as\nsimple as piping it into visidata.  Which is a fantastic tui application that\nhad a ton of vim-like keybindings and data features.\n\n\n``` python\nalias awsevents = aws events list-rules | visidata -f json\n```\n",
      "summary": "Reading eventbridge rules from the command line can be a total drag, pipe it into visidata to make it a breeze.",
      "date_published": "2022-02-15T03:04:26Z",
      "date_modified": "2022-02-15T03:04:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/vim-cmd/",
      "url": "https://go.waylonwalker.com/vim-cmd/",
      "title": "Vim remaps use cmd in place of :",
      "content_html": "\u003cp\u003eAnyone just starting out their vim customization journey is bound to run into this error.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eE5520\u003c/span\u003e: \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCmd\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nx\"\u003emapping\u003c/span\u003e \u003cspan class=\"nx\"\u003emust\u003c/span\u003e \u003cspan class=\"nx\"\u003eend\u003c/span\u003e \u003cspan class=\"nx\"\u003ewith\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCR\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"i-did-not-get-it\"\u003eI did not get it \u003ca href=\"#i-did-not-get-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’ll admit, in hindsight it’s very clear what this is trying to tell me, but\nfor whatever reason I still did not understand it and I just used a :\neverywhere.\u003c/p\u003e\n\u003ch2 id=\"from-the-docs\"\u003eFrom the docs \u003ca href=\"#from-the-docs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you run \u003ccode\u003e:h \u0026lt;cmd\u0026gt;\u003c/code\u003e you will see a lot of reasons why you should do it, from\nperformance, to hygene, to ergonomics.  You will also see another clear\nstatement about how to use \u003ccode\u003e\u0026lt;cmd\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                                          \u003cspan class=\"nx\"\u003eE5520\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCmd\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nx\"\u003ecommands\u003c/span\u003e \u003cspan class=\"nx\"\u003emust\u003c/span\u003e \u003cspan class=\"nx\"\u003eterminate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003ethat\u003c/span\u003e \u003cspan class=\"nx\"\u003eis\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nx\"\u003ethey\u003c/span\u003e \u003cspan class=\"nx\"\u003emust\u003c/span\u003e \u003cspan class=\"nx\"\u003ebe\u003c/span\u003e \u003cspan class=\"nx\"\u003efollowed\u003c/span\u003e \u003cspan class=\"nx\"\u003eby\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eCR\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nx\"\u003ein\u003c/span\u003e \u003cspan class=\"nx\"\u003ethe\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  {\u003cspan class=\"nx\"\u003erhs\u003c/span\u003e} \u003cspan class=\"nx\"\u003eof\u003c/span\u003e \u003cspan class=\"nx\"\u003ethe\u003c/span\u003e \u003cspan class=\"nx\"\u003emapping\u003c/span\u003e \u003cspan class=\"nx\"\u003edefinition\u003c/span\u003e.  \u003cspan class=\"nx\"\u003eCommand\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003eline\u003c/span\u003e \u003cspan class=\"nx\"\u003emode\u003c/span\u003e \u003cspan class=\"nx\"\u003eis\u003c/span\u003e \u003cspan class=\"nx\"\u003enever\u003c/span\u003e \u003cspan class=\"nx\"\u003eentered\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"when-to-map-with-a-\"\u003eWhen to map with a : \u003ca href=\"#when-to-map-with-a-\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou still need to map your remaps with a : if you do not close it with a\n\u003ccode\u003e\u0026lt;cr\u0026gt;\u003c/code\u003e.  This might be something like prefilling a command with a search term.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eleader\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eleader\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ef\u003c/span\u003e :\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/search/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"otherwise-use-cmd\"\u003eOtherwise use \u003ccmd\u003e\u003c/cmd\u003e \u003ca href=\"#otherwise-use-cmd\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you can close the \u003ccode\u003e\u0026lt;cmd\u0026gt;\u003c/code\u003e with a \u003ccode\u003e\u0026lt;cr\u0026gt;\u003c/code\u003e the command do so.  Your map will\nautomatically be silent, more ergonomic, performant, and all that good stuff.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eleader\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003eleader\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ef\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/search/\u003c/span\u003e\u003cspan class=\"nx\"\u003eSearch\u003c/span\u003e/\u003cspan class=\"nx\"\u003eg\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003ecr\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nAnyone just starting out their vim customization journey is bound to run into this error.\n\n``` vim\nE5520: \u003cCmd\u003e mapping must end with \u003cCR\u003e\n```\n\n## I did not get it\n\nI'll admit, in hindsight it's very clear what this is trying to tell me, but\nfor whatever reason I still did not understand it and I just used a :\neverywhere.\n\n## From the docs\n\n\nIf you run `:h \u003ccmd\u003e` you will see a lot of reasons why you should do it, from\nperformance, to hygene, to ergonomics.  You will also see another clear\nstatement about how to use `\u003ccmd\u003e`.\n\n``` vim\n                                                          E5520\n  \u003cCmd\u003e commands must terminate, that is, they must be followed by \u003cCR\u003e in the\n  {rhs} of the mapping definition.  Command-line mode is never entered.\n```\n\n## When to map with a :\n\nYou still need to map your remaps with a : if you do not close it with a\n`\u003ccr\u003e`.  This might be something like prefilling a command with a search term.\n\n``` vim\nnnoremap \u003cleader\u003e\u003cleader\u003ef :s/search/\n```\n\n## Otherwise use \u003ccmd\u003e\n\nIf you can close the `\u003ccmd\u003e` with a `\u003ccr\u003e` the command do so.  Your map will\nautomatically be silent, more ergonomic, performant, and all that good stuff.\n\n``` vim\nnnoremap \u003cleader\u003e\u003cleader\u003ef \u003ccmd\u003es/search/Search/g\u003ccr\u003e\n```\n",
      "summary": "Anyone just starting out their vim customization journey is bound to run into this error.",
      "date_published": "2022-02-14T14:53:17Z",
      "date_modified": "2022-02-14T14:53:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tmux-copy-mode-binding/",
      "url": "https://go.waylonwalker.com/tmux-copy-mode-binding/",
      "title": "A better copy-mode bind for Tmux",
      "content_html": "\u003cp\u003eThe default keybinding for copy-mode \u003ccode\u003e\u0026lt;prefix\u0026gt;-[\u003c/code\u003e is one that is just so\nawkward for me to hit that I end up not using it at all.  I was on a\ncall with my buddy Nic this week and saw him just fluidly jump into\n\u003ccode\u003ecopy-mode\u003c/code\u003e in an effortless fashion, so I had to ask him for his\nkeybinding and it just made sense. Enter, that’s it.  So I have addedt\nhis to my \u003ccode\u003e~/.tmux.conf\u003c/code\u003e along with one for \u003ccode\u003ealt-enter\u003c/code\u003e and have found\nmyself using it way more so far.\u003c/p\u003e\n\u003ch2 id=\"setting-copy-mode-to-enter\"\u003eSetting copy-mode to enter \u003ca href=\"#setting-copy-mode-to-enter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo do this I just popped open my \u003ccode\u003e~/.tmux.conf\u003c/code\u003e and added the following.\nNow I can get to \u003ccode\u003ecopy-mode\u003c/code\u003e with \u003ccode\u003e\u0026lt;prefix\u0026gt;-Enter\u003c/code\u003e which is \u003ccode\u003econtrol-b Enter\u003c/code\u003e, or \u003ccode\u003ealt-enter\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e Enter copy-mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -n M-Enter copy-mode\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"more-on-copy-mode\"\u003eMore on copy-mode \u003ca href=\"#more-on-copy-mode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have a full video on copy-mode you can find here.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/tmux-copy-mode/\" class=\"wikilink\" data-title=\"tmux copy-mode\" data-description=\"https://youtu.be/-ypY_-VmBKk\" data-date=\"2021-07-28\" data-preview=\"https://youtu.be/-ypY_-VmBKk\"\u003etmux copy-mode\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nThe default keybinding for copy-mode `\u003cprefix\u003e-[` is one that is just so\nawkward for me to hit that I end up not using it at all.  I was on a\ncall with my buddy Nic this week and saw him just fluidly jump into\n`copy-mode` in an effortless fashion, so I had to ask him for his\nkeybinding and it just made sense. Enter, that's it.  So I have addedt\nhis to my `~/.tmux.conf` along with one for `alt-enter` and have found\nmyself using it way more so far.\n\n## Setting copy-mode to enter\n\nTo do this I just popped open my `~/.tmux.conf` and added the following.\nNow I can get to `copy-mode` with `\u003cprefix\u003e-Enter` which is `control-b\nEnter`, or `alt-enter`.\n\n```bash\nbind Enter copy-mode\nbind -n M-Enter copy-mode\n```\n\n## More on copy-mode\n\nI have a full video on copy-mode you can find here.\n\n\u003ca href=\"/tmux-copy-mode/\" class=\"wikilink\" data-title=\"tmux copy-mode\" data-description=\"https://youtu.be/-ypY_-VmBKk\" data-date=\"2021-07-28\"\u003etmux copy-mode\u003c/a\u003e\n",
      "summary": "The default keybinding for copy-mode is one that is just so awkward for me to hit that I end up not using it at all. I was on a call with my buddy Nic this...",
      "date_published": "2022-02-13T17:05:23Z",
      "date_modified": "2022-02-13T17:05:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tmux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-string-is-string/",
      "url": "https://go.waylonwalker.com/python-string-is-string/",
      "title": "Python string of letters is a string of letters, but not with special",
      "content_html": "\u003cp\u003eIn python, a string is a string until you add special characters.\u003c/p\u003e\n\u003cp\u003eIn browsing twitter this morning I came accross this tweet, that showed that\nyou can use \u003ccode\u003eis\u003c/code\u003e accross two strings if they do not contain special characters.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://twitter.com/bascodes/status/1492147596688871424\"\u003ehttps://twitter.com/bascodes/status/1492147596688871424\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI popped open ipython to play with this.  I could confirm on \u003ccode\u003e3.9.7\u003c/code\u003e, short\nstrings that I typed in worked as expected.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;asdf\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;asdf\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUsing the \u003ccode\u003eupper()\u003c/code\u003e method on these strings does break down.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ASDF\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ASDF\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf You can also see this in the id of the objects as well, which is the memmory\naddress in CPython.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e140717359289568\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e140717359289568\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupper\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e140717359581824\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"nb\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupper\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e140717360337824\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFinally just as the post shows if you add a special character in there it also\nbreaks.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ASDF!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ASDF!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewaylonwalker\u003c/span\u003e \u003cspan class=\"err\"\u003e↪\u003c/span\u003e\u003cspan class=\"n\"\u003emain\u003c/span\u003e \u003cspan class=\"n\"\u003ev3\u003c/span\u003e\u003cspan class=\"mf\"\u003e.9.7\u003c/span\u003e \u003cspan class=\"n\"\u003eipython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e❯\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"what-should-you-do\"\u003eWhat should you do \u003ca href=\"#what-should-you-do\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFirst and foremost, these are the exact pitfalls that \u003ccode\u003eflake8\u003c/code\u003e guards you\nagainst.  So the very first things you should take away here is that there is a\nlot of wisdom and value in \u003ccode\u003eflake8\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSecond, the \u003ccode\u003eis\u003c/code\u003e comparison should be used for things that you want to compare\nto exact memmory addresses.  These include booleans and None.  Don’t use \u003ccode\u003eis\u003c/code\u003e\naccross two assigned variables.\u003c/p\u003e\n",
      "content_text": "\nIn python, a string is a string until you add special characters.\n\nIn browsing twitter this morning I came accross this tweet, that showed that\nyou can use `is` accross two strings if they do not contain special characters.\n\nhttps://twitter.com/bascodes/status/1492147596688871424\n\nI popped open ipython to play with this.  I could confirm on `3.9.7`, short\nstrings that I typed in worked as expected.\n\n``` python\nwaylonwalker ↪main v3.9.7 ipython\n❯ a = \"asdf\"\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ b = \"asdf\"\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ a is b\nTrue\n```\n\nUsing the `upper()` method on these strings does break down.\n\n``` python\nwaylonwalker ↪main v3.9.7 ipython\n❯ a.upper() is b.upper()\nFalse\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ a = \"ASDF\"\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ b = \"ASDF\"\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ a is b\nTrue\n```\n\nIf You can also see this in the id of the objects as well, which is the memmory\naddress in CPython.\n\n``` python\nwaylonwalker ↪main v3.9.7 ipython\n❯ id(a)\n140717359289568\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ id(b)\n140717359289568\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ id(a.upper())\n140717359581824\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ id(b.upper())\n140717360337824\n```\n\nFinally just as the post shows if you add a special character in there it also\nbreaks.\n\n``` python\nwaylonwalker ↪main v3.9.7 ipython\n❯ a = \"ASDF!\"\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ b = \"ASDF!\"\n\nwaylonwalker ↪main v3.9.7 ipython\n❯ a is b\nFalse\n```\n\n## What should you do\n\nFirst and foremost, these are the exact pitfalls that `flake8` guards you\nagainst.  So the very first things you should take away here is that there is a\nlot of wisdom and value in `flake8`.\n\nSecond, the `is` comparison should be used for things that you want to compare\nto exact memmory addresses.  These include booleans and None.  Don't use `is`\naccross two assigned variables.\n",
      "summary": "In python, a string is a string until you add special characters.",
      "date_published": "2022-02-12T16:05:55Z",
      "date_modified": "2022-02-12T16:05:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/norcalli-nvim-terminal-lua/",
      "url": "https://go.waylonwalker.com/norcalli-nvim-terminal-lua/",
      "title": "⭐ norcalli nvim-terminal.lua",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/norcalli/nvim-terminal.lua\" 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\"\u003envim-terminal.lua\u003c/a\u003e by \u003ca href=\"https://github.com/norcalli\" 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\"\u003enorcalli\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA high performance filetype mode for Neovim which leverages conceal and highlights your buffer with the correct color codes.\u003c/p\u003e\n",
      "content_text": "\nJust starred [nvim-terminal.lua](https://github.com/norcalli/nvim-terminal.lua) by [norcalli](https://github.com/norcalli). It's an exciting project with a lot to offer.\n\nA high performance filetype mode for Neovim which leverages conceal and highlights your buffer with the correct color codes.\n",
      "summary": "Just starred nvim-terminal.lua by norcalli. It's an exciting project with a lot to offer.",
      "date_published": "2022-02-12T03:06:40Z",
      "date_modified": "2022-02-12T03:06:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/linux-bluetoothctl/",
      "url": "https://go.waylonwalker.com/linux-bluetoothctl/",
      "title": "Bluetooth at the command line on Ubuntu",
      "content_html": "\u003cp\u003eOne thing about moving to a tiling window manager like awesome wm or i3 is that\nthey are so lightweight they are all missing things like bluetooth gui’s out of\nthe box, and you generally bring your own.  Today I just needed to connet a new\nset of headphones, so I decided to just give the \u003ccode\u003ebluetoothctl\u003c/code\u003e cli a try.  It\nseems to come with Ubuntu, I don’t think I did anything to get it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eRunning \u003ccode\u003ebluetoothctl\u003c/code\u003e pops you into a repl/shell like bah, python, or ipython.\nFrom here you can execute \u003ccode\u003ebluetoothctl\u003c/code\u003e commands.\u003c/p\u003e\n\u003cp\u003eHere is what I had to do to connect my headphones.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# list out the commands available\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ehelp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# scan for new devices and stop when you see your device show up\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# list devices\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edevices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epaired-devices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# pair the device\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epair XX:XX:XX:XX:XX:XX\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# now your device should show up in the paired list\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epaired-devices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# connet the device\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econnect XX:XX:XX:XX:XX:XX\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"help\"\u003ehelp \u003ca href=\"#help\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is the output of the help menu on my machine, it seems pretty straight\nforward to block, and remove devices from here.\u003c/p\u003e\n\u003cp\u003enote ctrl revers to the bluetooth controller on the machine you are on, and dev\nrefers to a device id.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMenu main:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAvailable commands:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-------------------\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadvertise                                         Advertise Options Submenu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan                                              Scan Options Submenu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egatt                                              Generic Attribute Submenu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elist                                              List available controllers\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eshow \u003cspan class=\"o\"\u003e[\u003c/span\u003ectrl\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                       Controller information\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eselect\u003c/span\u003e \u0026lt;ctrl\u0026gt;                                     Select default controller\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edevices                                           List available devices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epaired-devices                                    List paired devices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystem-alias \u0026lt;name\u0026gt;                               Set controller \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereset-alias                                       Reset controller \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epower \u0026lt;on/off\u0026gt;                                    Set controller power\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epairable \u0026lt;on/off\u0026gt;                                 Set controller pairable mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ediscoverable \u0026lt;on/off\u0026gt;                             Set controller discoverable mode\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eagent \u0026lt;on/off/capability\u0026gt;                         Enable/disable agent with given capability\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefault-agent                                     Set agent as the default one\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadvertise \u0026lt;on/off/type\u0026gt;                           Enable/disable advertising with given \u003cspan class=\"nb\"\u003etype\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eset-alias \u0026lt;alias\u0026gt;                                 Set device \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan \u0026lt;on/off\u0026gt;                                     Scan \u003cspan class=\"k\"\u003efor\u003c/span\u003e devices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                        Device information\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epair \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                        Pair with device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etrust \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                       Trust device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euntrust \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                     Untrust device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eblock \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                       Block device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eunblock \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                     Unblock device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eremove \u0026lt;dev\u0026gt;                                      Remove device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econnect \u0026lt;dev\u0026gt;                                     Connect device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edisconnect \u003cspan class=\"o\"\u003e[\u003c/span\u003edev\u003cspan class=\"o\"\u003e]\u003c/span\u003e                                  Disconnect device\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emenu \u0026lt;name\u0026gt;                                       Select submenu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eversion                                           Display version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003equit                                              Quit program\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e                                              Quit program\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ehelp\u003c/span\u003e                                              Display \u003cspan class=\"nb\"\u003ehelp\u003c/span\u003e about this program\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"final-impressions\"\u003eFinal Impressions \u003ca href=\"#final-impressions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis was something that I have never used, and thought it would be intimidating\nbut it worked great first try out of the box.  It could have been my device on\nthe other end, but this was one of the least frustrations I have had pairing a\nnew device.\u003c/p\u003e\n",
      "content_text": "\nOne thing about moving to a tiling window manager like awesome wm or i3 is that\nthey are so lightweight they are all missing things like bluetooth gui's out of\nthe box, and you generally bring your own.  Today I just needed to connet a new\nset of headphones, so I decided to just give the `bluetoothctl` cli a try.  It\nseems to come with Ubuntu, I don't think I did anything to get it.\n\n``` bash\nbluetoothctl\n```\n\nRunning `bluetoothctl` pops you into a repl/shell like bah, python, or ipython.\nFrom here you can execute `bluetoothctl` commands.\n\n\nHere is what I had to do to connect my headphones.\n\n``` bash\n# list out the commands available\nhelp\n\n# scan for new devices and stop when you see your device show up\nscan on\nscan off\n\n# list devices\ndevices\npaired-devices\n\n# pair the device\npair XX:XX:XX:XX:XX:XX\n\n# now your device should show up in the paired list\npaired-devices\n\n# connet the device\nconnect XX:XX:XX:XX:XX:XX\n```\n\n## help\n\nHere is the output of the help menu on my machine, it seems pretty straight\nforward to block, and remove devices from here.\n\nnote ctrl revers to the bluetooth controller on the machine you are on, and dev\nrefers to a device id.\n\n``` bash\nMenu main:\nAvailable commands:\n-------------------\nadvertise                                         Advertise Options Submenu\nscan                                              Scan Options Submenu\ngatt                                              Generic Attribute Submenu\nlist                                              List available controllers\nshow [ctrl]                                       Controller information\nselect \u003cctrl\u003e                                     Select default controller\ndevices                                           List available devices\npaired-devices                                    List paired devices\nsystem-alias \u003cname\u003e                               Set controller alias\nreset-alias                                       Reset controller alias\npower \u003con/off\u003e                                    Set controller power\npairable \u003con/off\u003e                                 Set controller pairable mode\ndiscoverable \u003con/off\u003e                             Set controller discoverable mode\nagent \u003con/off/capability\u003e                         Enable/disable agent with given capability\ndefault-agent                                     Set agent as the default one\nadvertise \u003con/off/type\u003e                           Enable/disable advertising with given type\nset-alias \u003calias\u003e                                 Set device alias\nscan \u003con/off\u003e                                     Scan for devices\ninfo [dev]                                        Device information\npair [dev]                                        Pair with device\ntrust [dev]                                       Trust device\nuntrust [dev]                                     Untrust device\nblock [dev]                                       Block device\nunblock [dev]                                     Unblock device\nremove \u003cdev\u003e                                      Remove device\nconnect \u003cdev\u003e                                     Connect device\ndisconnect [dev]                                  Disconnect device\nmenu \u003cname\u003e                                       Select submenu\nversion                                           Display version\nquit                                              Quit program\nexit                                              Quit program\nhelp                                              Display help about this program\n```\n\n## Final Impressions\n\nThis was something that I have never used, and thought it would be intimidating\nbut it worked great first try out of the box.  It could have been my device on\nthe other end, but this was one of the least frustrations I have had pairing a\nnew device.\n",
      "summary": "One thing about moving to a tiling window manager like awesome wm or i3 is that they are so lightweight they are all missing things like bluetooth gui's out...",
      "date_published": "2022-02-11T22:01:41Z",
      "date_modified": "2022-02-11T22:01:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "desktop"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/burntsushi-xsv/",
      "url": "https://go.waylonwalker.com/burntsushi-xsv/",
      "title": "⭐ BurntSushi xsv",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/BurntSushi/xsv\" 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\"\u003exsv\u003c/a\u003e by \u003ca href=\"https://github.com/BurntSushi\" 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\"\u003eBurntSushi\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA fast CSV command line toolkit written in Rust.\u003c/p\u003e\n",
      "content_text": "\nThe work on [xsv](https://github.com/BurntSushi/xsv) by [BurntSushi](https://github.com/BurntSushi).\n\nA fast CSV command line toolkit written in Rust.\n",
      "summary": "The work on xsv by BurntSushi.",
      "date_published": "2022-02-11T02:45:39Z",
      "date_modified": "2022-02-11T02:45:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/popen-stderr/",
      "url": "https://go.waylonwalker.com/popen-stderr/",
      "title": "Read stderr from python subprocess.Popen",
      "content_html": "\u003cp\u003eI often run shell commands from python with Popen, but not often enough\ndo I set up error handline for these subprocesses.  It’s not too hard,\nbut it can be a bit awkward if you don’t do it enough.\u003c/p\u003e\n\u003ch2 id=\"using-popen\"\u003eUsing Popen \u003ca href=\"#using-popen\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esubprocess\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003esubprocess\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this will run the shell command `cat me` and capture stdout and stderr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePopen\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;cat\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;me\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e \u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePIPE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estderr\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePIPE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# this will wait for the process to finish.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewait\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"reading-from-stderr\"\u003ereading from stderr \u003ca href=\"#reading-from-stderr\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo get the stderr we must get it from the proc, read it, and decode the\nbystring.  Note that we can only get the stderr object once, so if you want to\ndo more than just read it you will need to store a copy of it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estderr\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edecode\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"better-exception\"\u003eBetter Exception \u003ca href=\"#better-exception\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that we can read the \u003ccode\u003estderr\u003c/code\u003e we can make better error tracking for the\nuser so they can see what to do to resolve the issue rather than blindly\nfailing.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eerr_message\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estderr\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edecode\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eproc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereturncode\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# the process was not successful\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;No such file\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eerr_message\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eraise\u003c/span\u003e \u003cspan class=\"ne\"\u003eFileNotFoundError\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;No such file \u0026#34;me\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI often run shell commands from python with Popen, but not often enough\ndo I set up error handline for these subprocesses.  It's not too hard,\nbut it can be a bit awkward if you don't do it enough.\n\n## Using Popen\n\n\n``` python\nimport subprocess\nfrom subprocess import Popen\n\n# this will run the shell command `cat me` and capture stdout and stderr\nproc = Popen([\"cat\", \"me\"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n\n# this will wait for the process to finish.\nproc.wait()\n```\n\n## reading from stderr\n\nTo get the stderr we must get it from the proc, read it, and decode the\nbystring.  Note that we can only get the stderr object once, so if you want to\ndo more than just read it you will need to store a copy of it.\n\n``` python\nproc.stderr.read().decode()\n```\n\n## Better Exception\n\nNow that we can read the `stderr` we can make better error tracking for the\nuser so they can see what to do to resolve the issue rather than blindly\nfailing.\n\n``` python\nerr_message = proc.stderr.read().decode()\nif proc.returncode != 0:\n    # the process was not successful\n\n    if \"No such file\" in err_message:\n        raise FileNotFoundError('No such file \"me\"')\n```\n",
      "summary": "I often run shell commands from python with Popen, but not often enough do I set up error handline for these subprocesses. It's not too hard, but it can be a...",
      "date_published": "2022-02-10T03:57:32Z",
      "date_modified": "2022-02-10T03:57:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/simple-samba/",
      "url": "https://go.waylonwalker.com/simple-samba/",
      "title": "Simple Samba Share Setup",
      "content_html": "\u003cp\u003eSamba is an implementation of the smb protocol that allows me to setup network\nshares on my linux machine that I can open on a variety of devices.\u003c/p\u003e\n\u003cp\u003eI think 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 is starting to intrigue me enought to dive into the path of\nexperimenting with different things that I might want setup in my own home.\nOne key piece of this is network storage.  As I looked into nas, I realized\nthat it takes a dedicated machine, or one virtualized at a lower level than I\nhave capability for right now.\u003c/p\u003e\n\u003ch2 id=\"humble-beginnings\"\u003eHumble Beginnings \u003ca href=\"#humble-beginnings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo get goind I am going to make a directory \u003ccode\u003e/srv/samba/public\u003c/code\u003e open to anyone\non my network.  I am not going to worry too much about it, I just want\nsomething up and running so that I can learn.\u003c/p\u003e\n\u003cp\u003eInstall samba, open the firewall, and edit the \u003ccode\u003esmb.conf\u003c/code\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esudo apt install samba samba-common-bin\nsudo ufw allow samba\nsudo nvim /etc/samba/smb.conf\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eI added this to the end of my \u003ccode\u003esmb.conf\u003c/code\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e[public]\n\ncomment = public share, no need to enter username and password\npath = /srv/samba/public/\nbrowseable = yes\nwritable = yes\nguest ok = yes\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThen I made the \u003ccode\u003e/srv/samba/public\u003c/code\u003e directory and made it writable by anyone.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esudo mkdir -p /srv/samba/public\nsudo setfacl -R -m \u0026#34;u:nobody:rwx\u0026#34; /srv/samba/public/\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"windows-yes-windows\"\u003eWindows, yes windows \u003ca href=\"#windows-yes-windows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI have a windows desktop in my office, primarily for my wife to run premiere\npro, and my son to play Minecraft.  I walked over to it, opened the file\nexplorer, and ernt to \u003ccode\u003e\\\\\u0026lt;my-local-ip\u0026gt;\u003c/code\u003e.  It asked for the username and\npassword, I typed in the username and password of the linux device I have the\nshare running on, and I was in.  Right there I could see the Public folder.  I\nopened it and made a files successfully.\u003c/p\u003e\n",
      "content_text": "\nSamba is an implementation of the smb protocol that allows me to setup network\nshares on my linux machine that I can open on a variety of devices.\n\nI think the homelab is starting to intrigue me enought to dive into the path of\nexperimenting with different things that I might want setup in my own home.\nOne key piece of this is network storage.  As I looked into nas, I realized\nthat it takes a dedicated machine, or one virtualized at a lower level than I\nhave capability for right now.\n\n\n## Humble Beginnings\n\nTo get goind I am going to make a directory `/srv/samba/public` open to anyone\non my network.  I am not going to worry too much about it, I just want\nsomething up and running so that I can learn.\n\nInstall samba, open the firewall, and edit the `smb.conf`\n```\nsudo apt install samba samba-common-bin\nsudo ufw allow samba\nsudo nvim /etc/samba/smb.conf\n```\n\nI added this to the end of my `smb.conf`\n\n```\n[public]\n\ncomment = public share, no need to enter username and password\npath = /srv/samba/public/\nbrowseable = yes\nwritable = yes\nguest ok = yes\n```\n\nThen I made the `/srv/samba/public` directory and made it writable by anyone.\n\n```\nsudo mkdir -p /srv/samba/public\nsudo setfacl -R -m \"u:nobody:rwx\" /srv/samba/public/\n```\n\n## Windows, yes windows\n\nI have a windows desktop in my office, primarily for my wife to run premiere\npro, and my son to play Minecraft.  I walked over to it, opened the file\nexplorer, and ernt to `\\\\\u003cmy-local-ip\u003e`.  It asked for the username and\npassword, I typed in the username and password of the linux device I have the\nshare running on, and I was in.  Right there I could see the Public folder.  I\nopened it and made a files successfully.\n",
      "summary": "Samba is an implementation of the smb protocol that allows me to setup network shares on my linux machine that I can open on a variety of devices.",
      "date_published": "2022-02-09T14:41:20Z",
      "date_modified": "2022-02-09T14:41:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "linux",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ag-ahead/",
      "url": "https://go.waylonwalker.com/ag-ahead/",
      "title": "ag silver searcher look ahead and look behind",
      "content_html": "\u003cp\u003eA super useful tool when doing PR’s or checking your own work during a big\nrefactor is the silver searcher.  Its a super fast command line based searching\ntool. You just run \u003ccode\u003eag \u0026#34;\u0026lt;search term\u0026gt;\u0026#34;\u003c/code\u003e to search for your search term.  This\nwill list out every line of every file in any directory under your current\nworking directory that contains a match.\u003c/p\u003e\n\u003ch2 id=\"aheadbehind\"\u003eAhead/Behind \u003ca href=\"#aheadbehind\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIt’s often useful to need some extra context around the change.  I recently\nreviewed a bunch of PR’s that moved schema from \u003ccode\u003esave_args\u003c/code\u003e to the root of the\ndataset in all yaml configs.  To ensure they all made it to the top level\nDataSet configuraion, and not underneath save_args.  I can do a search for all\nthe schemas, and ensure that none of them are under \u003ccode\u003esave_args\u003c/code\u003e anymore.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eag \u003cspan class=\"s2\"\u003e\u0026#34;schema: \u0026#34;\u003c/span\u003e -A \u003cspan class=\"m\"\u003e12\u003c/span\u003e -B \u003cspan class=\"m\"\u003e12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nA super useful tool when doing PR's or checking your own work during a big\nrefactor is the silver searcher.  Its a super fast command line based searching\ntool. You just run `ag \"\u003csearch term\u003e\"` to search for your search term.  This\nwill list out every line of every file in any directory under your current\nworking directory that contains a match.\n\n## Ahead/Behind\n\nIt's often useful to need some extra context around the change.  I recently\nreviewed a bunch of PR's that moved schema from `save_args` to the root of the\ndataset in all yaml configs.  To ensure they all made it to the top level\nDataSet configuraion, and not underneath save_args.  I can do a search for all\nthe schemas, and ensure that none of them are under `save_args` anymore.\n\n``` bash\nag \"schema: \" -A 12 -B 12\n```\n",
      "summary": "A super useful tool when doing PR's or checking your own work during a big refactor is the silver searcher. Its a super fast command line based searching...",
      "date_published": "2022-02-08T13:54:08Z",
      "date_modified": "2022-02-08T13:54:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "bash",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tbillington-kondo/",
      "url": "https://go.waylonwalker.com/tbillington-kondo/",
      "title": "⭐ tbillington kondo",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/tbillington/kondo\" 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\"\u003ekondo\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/tbillington\" 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\"\u003etbillington\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eCleans dependencies and build artifacts from your projects.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [kondo](https://github.com/tbillington/kondo), an amazing project by [tbillington](https://github.com/tbillington). It's worth exploring!\n\nCleans dependencies and build artifacts from your projects.\n",
      "summary": "I'm really excited about kondo, an amazing project by tbillington. It's worth exploring!",
      "date_published": "2022-02-08T02:33:12Z",
      "date_modified": "2022-02-08T02:33:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/snapdrop-snapdrop/",
      "url": "https://go.waylonwalker.com/snapdrop-snapdrop/",
      "title": "⭐ SnapDrop snapdrop",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/SnapDrop/snapdrop\" 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\"\u003esnapdrop\u003c/a\u003e by \u003ca href=\"https://github.com/SnapDrop\" 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\"\u003eSnapDrop\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA Progressive Web App for local file sharing\u003c/p\u003e\n",
      "content_text": "\nCheck out [snapdrop](https://github.com/SnapDrop/snapdrop) by [SnapDrop](https://github.com/SnapDrop). It's a well-crafted project with great potential.\n\nA Progressive Web App for local file sharing\n",
      "summary": "Check out snapdrop by SnapDrop. It's a well-crafted project with great potential.",
      "date_published": "2022-02-08T00:32:04Z",
      "date_modified": "2022-02-08T00:32:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/linuxserver-heimdall/",
      "url": "https://go.waylonwalker.com/linuxserver-heimdall/",
      "title": "⭐ linuxserver Heimdall",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/linuxserver/Heimdall\" 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\"\u003eHeimdall\u003c/a\u003e by \u003ca href=\"https://github.com/linuxserver\" 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\"\u003elinuxserver\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn Application dashboard and launcher\u003c/p\u003e\n",
      "content_text": "\nThe work on [Heimdall](https://github.com/linuxserver/Heimdall) by [linuxserver](https://github.com/linuxserver).\n\nAn Application dashboard and launcher\n",
      "summary": "The work on Heimdall by linuxserver.",
      "date_published": "2022-02-07T23:22:59Z",
      "date_modified": "2022-02-07T23:22:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/docker-minecraft-server/",
      "url": "https://go.waylonwalker.com/docker-minecraft-server/",
      "title": "Running a Minecraft Server in Docker",
      "content_html": "\u003cp\u003eI’ve ran a Minecraft server at home since December 2017 for me and my\nson to play on.  We start a brand new one somewhere between every day\nand every week.  The older he gets the longer the server lasts.\u003c/p\u003e\n\u003cp\u003eIn all these years, I’ve been popping open the command line and running\nthe server manually, and even inside of Digital Ocean occasionally to\nplay a more public server with a friend.\u003c/p\u003e\n\u003cp\u003eMy buddy Nic has been sharing me some of his \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 setup, and it’s\nreally got me to thinking about what I can run at home, and Dockerizing\nall the things.  Today I found a really sweet github repo that had a\nminecraft server running in docker with a pretty incredible setup.\u003c/p\u003e\n\u003cp\u003eI ended up running the first thing in the Readme that included a volume\nmount.  If you are going to run this container, I HIGHLY reccomend that\nyou make sure that you have your world volume mounted, otherwise it will\ndie with your docker container.\u003c/p\u003e\n\u003ch2 id=\"docker-compose\"\u003eDocker Compose \u003ca href=\"#docker-compose\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWith the following stored as my \u003ccode\u003edocker-compose.yml\u003c/code\u003e in a brand new and\notherwise empty directory I was ready to start the server for the night.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;3\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eservices\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003emc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainer_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ewalkercraft\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eitzg/minecraft-server\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eports\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e25565\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eEULA\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;TRUE\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etty\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003estdin_open\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erestart\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eunless-stopped\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# attach a directory relative to the directory containing this compose file\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003e./minecraft-data:/data\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo start the server we open up the terminal in this directory and run\nthe follwing command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker compose up -d\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce its up and running we can run commands on the server simply by\nattaching to it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker attach walkercraft\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"a-few-common-commands-we-run-in-the-server\"\u003eA few common commands we run in the server \u003ca href=\"#a-few-common-commands-we-run-in-the-server\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWe play very casually most of the time so we will set keepInventory to\ntrue so that we do not loose our inventory when we die.  Sometimes we\nalso op ourselve so that we can toggle gamemode into creative.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# set the game to keep your inventory when you die.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/gamrule keepInventory \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# give everyone operater priveledges to they can run commands\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/op @a\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# give playername op\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/op playername\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've ran a Minecraft server at home since December 2017 for me and my\nson to play on.  We start a brand new one somewhere between every day\nand every week.  The older he gets the longer the server lasts.\n\nIn all these years, I've been popping open the command line and running\nthe server manually, and even inside of Digital Ocean occasionally to\nplay a more public server with a friend.\n\nMy buddy Nic has been sharing me some of his homelab setup, and it's\nreally got me to thinking about what I can run at home, and Dockerizing\nall the things.  Today I found a really sweet github repo that had a\nminecraft server running in docker with a pretty incredible setup.\n\nI ended up running the first thing in the Readme that included a volume\nmount.  If you are going to run this container, I HIGHLY reccomend that\nyou make sure that you have your world volume mounted, otherwise it will\ndie with your docker container.\n\n## Docker Compose\n\nWith the following stored as my `docker-compose.yml` in a brand new and\notherwise empty directory I was ready to start the server for the night.\n\n``` yaml\nversion: \"3\"\n\nservices:\n  mc:\n    container_name: walkercraft\n    image: itzg/minecraft-server\n    ports:\n      - 25565:25565\n    environment:\n      EULA: \"TRUE\"\n    tty: true\n    stdin_open: true\n    restart: unless-stopped\n    volumes:\n      # attach a directory relative to the directory containing this compose file\n      - ./minecraft-data:/data\n```\n\nTo start the server we open up the terminal in this directory and run\nthe follwing command.\n\n``` bash\ndocker compose up -d\n```\n\nOnce its up and running we can run commands on the server simply by\nattaching to it.\n\n``` bash\ndocker attach walkercraft\n```\n\n## A few common commands we run in the server\n\nWe play very casually most of the time so we will set keepInventory to\ntrue so that we do not loose our inventory when we die.  Sometimes we\nalso op ourselve so that we can toggle gamemode into creative.\n\n```bash\n# set the game to keep your inventory when you die.\n/gamrule keepInventory true\n\n# give everyone operater priveledges to they can run commands\n/op @a\n\n# give playername op\n/op playername\n```\n",
      "summary": "I've ran a Minecraft server at home since December 2017 for me and my son to play on. We start a brand new one somewhere between every day and every week....",
      "date_published": "2022-02-07T02:35:21Z",
      "date_modified": "2022-02-07T02:35:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "docker",
        "homelab",
        "minecraft",
        "gaming"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/install-rust/",
      "url": "https://go.waylonwalker.com/install-rust/",
      "title": "Installing Rust and Cargo on Ubuntu 21.10 using Ansible",
      "content_html": "\u003cp\u003eInstalling rust in your own ansible playbook will make sure that you can\nget consistent installs accross all the machines you may use, or\nreplicate your development machine if it ever goes down.\u003c/p\u003e\n\u003ch2 id=\"personal-philosophy\"\u003ePersonal philosophy \u003ca href=\"#personal-philosophy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI try to install everything that I will want to use for more than just a\ntrial inside of my ansible playbook.  This way I always get the same\nsetup across my work and home machines, and anytime I might setup a\nthrow away vm.\u003c/p\u003e\n\u003ch2 id=\"reccommended-install\"\u003ereccommended install \u003ca href=\"#reccommended-install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is how rust reccomends that you install it on Ubuntu.  First update\nyour system, then run their installer, and finally check that the\ninstall was successful.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# system update\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt upgrade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# download and run the rust installer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://sh.rustup.rs -sSf \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# confirm your installation is successful\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erustc --version\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"ansible-install\"\u003eAnsible Install \u003ca href=\"#ansible-install\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe first thing I do in my playbooks is to check if the tool is already\ninstalled.  Here I chose to look for \u003ccode\u003ecargo\u003c/code\u003e, you could also look for\n\u003ccode\u003erustc\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck if cargo is installed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecommand -v cargo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecargo_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eI first check for an existing install so I can re-run my playbooks\nquickly filling in only missing tools. More on this\n\u003ca href=\"https://waylonwalker.com/til/ansible_install_if_not_callable/\" 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\"\u003eansible install conditionally\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNext we need to download the installer script and make it executable.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDownload Installer\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecargo_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eget_url\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://sh.rustup.rs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003edest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/tmp/sh.rustup.rs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003emode\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;0755\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eforce\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;yes\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003erust\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eI chose to download the installer, because I was unable to pass in the\n\u003ccode\u003e-y\u003c/code\u003e flag otherwise, which is required to do unattended installs.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eLast we just run the installer given to us by rust with the \u003ccode\u003e-y\u003c/code\u003e flag so\nthat it will run unattended.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003einstall rust/cargo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecargo_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/tmp/sh.rustup.rs -y\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003erust\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"one-more-thing\"\u003eOne more thing \u003ca href=\"#one-more-thing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMake sure that you source your cargo env, otherwise your shell will not\nfind \u003ccode\u003erustc\u003c/code\u003e or \u003ccode\u003ecargo\u003c/code\u003e.  I chose to do this by adding the following\nline to my \u003ccode\u003e~/.zshrc\u003c/code\u003e.  You can but it in \u003ccode\u003e~/.bashrc\u003c/code\u003e if that is your\nthing, or just run it in your shell to just get it to work.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -f ~/.cargo/env \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nb\"\u003esource\u003c/span\u003e \u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e/.cargo/env\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"full-install-playbook\"\u003eFull Install Playbook \u003ca href=\"#full-install-playbook\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a fully working install playbook to get you started or to port\ninto your own playbook.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ehosts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003elocalhost\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003egather_facts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;USER\u0026#39;) }}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epre_tasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupdate repositories\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eapt\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupdate_cache=yes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eroot\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003echanged_when\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003evars\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{ ansible_user_id }}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck if cargo is installed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecommand -v cargo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecargo_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDownload Installer\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecargo_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eget_url\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://sh.rustup.rs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003edest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/tmp/sh.rustup.rs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003emode\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;0755\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eforce\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;yes\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003erust\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003einstall rust/cargo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecargo_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/tmp/sh.rustup.rs -y\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"l\"\u003erust\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can save this as a  \u003ccode\u003elocal.yml\u003c/code\u003e and run the following in your shell\nto run the playbook on your local machine.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eansible-playbook local.yml --ask-become-pass\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003enote: \u003ccode\u003e--ask-become-pass\u003c/code\u003e is required for the system update step.\nThis will ask for your password as soon as ansible starts.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI also have a very similar article on hwo I \u003ca href=\"https://waylonwalker.com/til/ansible_install_fonts/\" 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\"\u003eansible install fonts\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nInstalling rust in your own ansible playbook will make sure that you can\nget consistent installs accross all the machines you may use, or\nreplicate your development machine if it ever goes down.\n\n## Personal philosophy\n\nI try to install everything that I will want to use for more than just a\ntrial inside of my ansible playbook.  This way I always get the same\nsetup across my work and home machines, and anytime I might setup a\nthrow away vm.\n\n## reccommended install\n\nThis is how rust reccomends that you install it on Ubuntu.  First update\nyour system, then run their installer, and finally check that the\ninstall was successful.\n\n``` bash\n# system update\nsudo apt update\nsudo apt upgrade\n\n# download and run the rust installer\ncurl https://sh.rustup.rs -sSf | sh\n\n# confirm your installation is successful\nrustc --version\n```\n\n## Ansible Install\n\nThe first thing I do in my playbooks is to check if the tool is already\ninstalled.  Here I chose to look for `cargo`, you could also look for\n`rustc`.\n\n``` yaml\n  - name: check if cargo is installed\n    shell: command -v cargo\n    register: cargo_exists\n    ignore_errors: yes\n```\n\n\u003e I first check for an existing install so I can re-run my playbooks\n\u003e quickly filling in only missing tools. More on this\n\u003e [ansible install conditionally](https://waylonwalker.com/til/ansible_install_if_not_callable/)\n\nNext we need to download the installer script and make it executable.\n\n``` yaml\n  - name: Download Installer\n    when: cargo_exists is failed\n    get_url:\n      url: https://sh.rustup.rs\n      dest: /tmp/sh.rustup.rs\n      mode: '0755'\n      force: 'yes'\n    tags:\n      - rust\n```\n\n\u003e I chose to download the installer, because I was unable to pass in the\n\u003e `-y` flag otherwise, which is required to do unattended installs.\n\nLast we just run the installer given to us by rust with the `-y` flag so\nthat it will run unattended.\n\n``` yaml\n\n  - name: install rust/cargo\n    when: cargo_exists is failed\n    shell: /tmp/sh.rustup.rs -y\n    tags:\n      - rust\n```\n\n## One more thing\n\nMake sure that you source your cargo env, otherwise your shell will not\nfind `rustc` or `cargo`.  I chose to do this by adding the following\nline to my `~/.zshrc`.  You can but it in `~/.bashrc` if that is your\nthing, or just run it in your shell to just get it to work.\n\n``` bash\n[ -f ~/.cargo/env ] \u0026\u0026 source $HOME/.cargo/env\n```\n\n## Full Install Playbook\n\nHere is a fully working install playbook to get you started or to port\ninto your own playbook.\n\n``` yaml\n- hosts: localhost\n  gather_facts: true\n  become: true\n  become_user: \"{{ lookup('env', 'USER') }}\"\n\n  pre_tasks:\n    - name: update repositories\n      apt: update_cache=yes\n      become_user: root\n      changed_when: False\n  vars:\n    user: \"{{ ansible_user_id }}\"\n  tasks:\n  - name: check if cargo is installed\n    shell: command -v cargo\n    register: cargo_exists\n    ignore_errors: yes\n\n  - name: Download Installer\n    when: cargo_exists is failed\n    get_url:\n      url: https://sh.rustup.rs\n      dest: /tmp/sh.rustup.rs\n      mode: '0755'\n      force: 'yes'\n    tags:\n      - rust\n\n  - name: install rust/cargo\n    when: cargo_exists is failed\n    shell: /tmp/sh.rustup.rs -y\n    tags:\n      - rust\n\n```\n\nYou can save this as a  `local.yml` and run the following in your shell\nto run the playbook on your local machine.\n\n``` bash\nansible-playbook local.yml --ask-become-pass\n```\n\n\u003e note: `--ask-become-pass` is required for the system update step.\n\u003e This will ask for your password as soon as ansible starts.\n\n\nI also have a very similar article on hwo I [ansible install fonts](https://waylonwalker.com/til/ansible_install_fonts/)\n",
      "summary": "Installing rust in your own ansible playbook will make sure that you can get consistent installs accross all the machines you may use, or replicate your...",
      "date_published": "2022-02-06T15:34:02Z",
      "date_modified": "2022-02-06T15:34:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tinysearch-tinysearch/",
      "url": "https://go.waylonwalker.com/tinysearch-tinysearch/",
      "title": "⭐ tinysearch tinysearch",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/tinysearch/tinysearch\" 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\"\u003etinysearch\u003c/a\u003e by \u003ca href=\"https://github.com/tinysearch\" 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\"\u003etinysearch\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🔍 Tiny, full-text search engine for static websites built with Rust and Wasm\u003c/p\u003e\n",
      "content_text": "\nThe work on [tinysearch](https://github.com/tinysearch/tinysearch) by [tinysearch](https://github.com/tinysearch).\n\n🔍 Tiny, full-text search engine for static websites built with Rust and Wasm\n",
      "summary": "The work on tinysearch by tinysearch.",
      "date_published": "2022-02-06T15:29:48Z",
      "date_modified": "2022-02-06T15:29:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zevaverbach-templates/",
      "url": "https://go.waylonwalker.com/zevaverbach-templates/",
      "title": "⭐ zevaverbach templates",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/zevaverbach/templates\" 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\"\u003etemplates\u003c/a\u003e by \u003ca href=\"https://github.com/zevaverbach\" 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\"\u003ezevaverbach\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [templates](https://github.com/zevaverbach/templates) by [zevaverbach](https://github.com/zevaverbach).\n\nNo description available.\n",
      "summary": "Looking for inspiration? templates by zevaverbach.",
      "date_published": "2022-02-05T16:45:02Z",
      "date_modified": "2022-02-05T16:45:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lukas-reineke-cmp-rg/",
      "url": "https://go.waylonwalker.com/lukas-reineke-cmp-rg/",
      "title": "⭐ lukas-reineke cmp-rg",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/lukas-reineke\" 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\"\u003elukas-reineke\u003c/a\u003e and their project \u003ca href=\"https://github.com/lukas-reineke/cmp-rg\" 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\"\u003ecmp-rg\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eripgrep source for nvim-cmp\u003c/p\u003e\n",
      "content_text": "\nCheck out [lukas-reineke](https://github.com/lukas-reineke) and their project [cmp-rg](https://github.com/lukas-reineke/cmp-rg).\n\nripgrep source for nvim-cmp\n",
      "summary": "Check out lukas-reineke and their project cmp-rg.",
      "date_published": "2022-02-05T16:10:46Z",
      "date_modified": "2022-02-05T16:10:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-markdown-ast-paragraph/",
      "url": "https://go.waylonwalker.com/python-markdown-ast-paragraph/",
      "title": "Using a Python Markdown ast to Find All Paragraphs",
      "content_html": "\u003cp\u003eIn looking for a way to automatically generate descriptions for pages I\nstumbled into a markdown ast in python.  It allows me to go over the\nmarkdown page and get only paragraph text.  This will ignore headings,\nblockquotes, and code fences.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ecommonmark\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003efrontmatter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparser\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecommonmark\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eParser\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003east\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparagraphs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewalker\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003et\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;paragraph\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eparagraphs\u003c/span\u003e \u003cspan class=\"o\"\u003e+=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eparagraphs\u003c/span\u003e \u003cspan class=\"o\"\u003e+=\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_child\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eliteral\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt’s also super fast, previously I was rendering to \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 and using\nbeautifulsoup to get only the paragraphs.  Using the commonmark ast was\nabout 5x faster on my site.\u003c/p\u003e\n\u003ch3 id=\"duplicate-paragraphs\"\u003eDuplicate Paragraphs \u003ca href=\"#duplicate-paragraphs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eWhen I originally wrote this post, I did not realize at the time that\ncommonmark duplicates nodes.  I still do not understand why, but I have had\nsuccess duplicating them based on the source position of the node with the\nsnippet below.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eitertools\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ecompress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003ecommonmark\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003efrontmatter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efrontmatter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;post.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparser\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecommonmark\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eParser\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003east\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# find all paragraph nodes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparagraph_nodes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewalker\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003et\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;paragraph\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_child\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eliteral\u003c/span\u003e \u003cspan class=\"ow\"\u003eis\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# for reasons unknown to me commonmark duplicates nodes, dedupe based on sourcepos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esourcepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esourcepos\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eparagraph_nodes\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# find first occurence of node based on source position\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eunique_mask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003esourcepos\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eindex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"nb\"\u003eenumerate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esourcepos\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# deduplicate paragraph_nodes based on unique source position\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eunique_paragraph_nodes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecompress\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparagraph_nodes\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eunique_mask\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparagraphs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejoin\u003c/span\u003e\u003cspan class=\"p\"\u003e([\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efirst_child\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eliteral\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eunique_paragraph_nodes\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIn looking for a way to automatically generate descriptions for pages I\nstumbled into a markdown ast in python.  It allows me to go over the\nmarkdown page and get only paragraph text.  This will ignore headings,\nblockquotes, and code fences.\n\n\n``` python\nimport commonmark\nimport frontmatter\n\npost = frontmatter.load(\"post.md\")\nparser = commonmark.Parser()\nast = parser.parse(post.content)\n\nparagraphs = ''\nfor node in ast.walker():\n    if node[0].t == \"paragraph\":\n        paragraphs += \" \"\n        paragraphs += node[0].first_child.literal\n```\n\nIt's also super fast, previously I was rendering to html and using\nbeautifulsoup to get only the paragraphs.  Using the commonmark ast was\nabout 5x faster on my site.\n\n### Duplicate Paragraphs\n\nWhen I originally wrote this post, I did not realize at the time that\ncommonmark duplicates nodes.  I still do not understand why, but I have had\nsuccess duplicating them based on the source position of the node with the\nsnippet below.\n\n``` python\nfrom itertools import compress\n\nimport commonmark\nimport frontmatter\n\npost = frontmatter.load(\"post.md\")\nparser = commonmark.Parser()\nast = parser.parse(post.content)\n\n# find all paragraph nodes\nparagraph_nodes = [\n    n[0]\n    for n in ast.walker()\n    if n[0].t == \"paragraph\" and n[0].first_child.literal is not None\n]\n# for reasons unknown to me commonmark duplicates nodes, dedupe based on sourcepos\nsourcepos = [p.sourcepos for p in paragraph_nodes]\n# find first occurence of node based on source position\nunique_mask = [sourcepos.index(s) == i for i, s in enumerate(sourcepos)]\n# deduplicate paragraph_nodes based on unique source position\nunique_paragraph_nodes = list(compress(paragraph_nodes, unique_mask))\nparagraphs = \" \".join([p.first_child.literal for p in unique_paragraph_nodes])\n```\n",
      "summary": "In looking for a way to automatically generate descriptions for pages I stumbled into a markdown ast in python. It allows me to go over the markdown page and...",
      "date_published": "2022-02-05T02:18:28Z",
      "date_modified": "2022-02-05T02:18:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/neovim-config-for-git/",
      "url": "https://go.waylonwalker.com/neovim-config-for-git/",
      "title": "Neovim Config for Git",
      "content_html": "\u003cp\u003eCreating a minimal config specifically for \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e commits has made running\n\u003ccode\u003egit commit\u003c/code\u003e much more pleasant.  It starts up Much faster, and has all\nof the parts of my config that I use while making a git commit.  The one\nthing that I often use is autocomplete, for things coming from elsewhere\nin the tmux session.  For this \u003ccode\u003ecmpe-tmux\u003c/code\u003e specifically is super\nhelpful.\u003c/p\u003e\n\u003cp\u003eThe other thing that is engrained into my muscle memory is \u003ccode\u003ejj\u003c/code\u003e\nfor escape.  For that I went agead and added my \u003ccode\u003esettings\u003c/code\u003e and \u003ccode\u003ekeymap\u003c/code\u003e\nwith no noticable performance hit.\u003c/p\u003e\n\u003cp\u003eHere is the config that has taken\u003c/p\u003e\n\u003cp\u003e~/.config/nvim/init-git.vim\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esource\u003c/span\u003e \u003cspan class=\"p\"\u003e~\u003c/span\u003e\u003cspan class=\"sr\"\u003e/.config/\u003c/span\u003e\u003cspan class=\"nx\"\u003envim\u003c/span\u003e/\u003cspan class=\"nx\"\u003esettings\u003c/span\u003e.\u003cspan class=\"nx\"\u003evim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esource\u003c/span\u003e \u003cspan class=\"p\"\u003e~\u003c/span\u003e\u003cspan class=\"sr\"\u003e/.config/\u003c/span\u003e\u003cspan class=\"nx\"\u003envim\u003c/span\u003e/\u003cspan class=\"nx\"\u003ekeymap\u003c/span\u003e.\u003cspan class=\"nx\"\u003evim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esource\u003c/span\u003e \u003cspan class=\"p\"\u003e~\u003c/span\u003e\u003cspan class=\"sr\"\u003e/.config/\u003c/span\u003e\u003cspan class=\"nx\"\u003envim\u003c/span\u003e/\u003cspan class=\"nx\"\u003egit\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003eplugins\u003c/span\u003e.\u003cspan class=\"nx\"\u003evim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elua\u003c/span\u003e \u003cspan class=\"nx\"\u003erequire\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;waylonwalker.cmp\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e~/.config/nvim/git-plugins.vim\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecall\u003c/span\u003e \u003cspan class=\"nx\"\u003eplug\u003c/span\u003e#\u003cspan class=\"nx\"\u003ebegin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;~/.local/share/nvim/plugged\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e\u0026#34; cmp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;hrsh7th/nvim-cmp\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;hrsh7th/cmp-nvim-lsp\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;hrsh7th/cmp-buffer\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;hrsh7th/cmp-path\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;hrsh7th/cmp-calc\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ePlug\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;andersevenrud/compe-tmux\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e { \u003cspan class=\"s1\"\u003e\u0026#39;branch\u0026#39;\u003c/span\u003e: \u003cspan class=\"s1\"\u003e\u0026#39;cmp\u0026#39;\u003c/span\u003e }\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecall\u003c/span\u003e \u003cspan class=\"nx\"\u003eplug\u003c/span\u003e#\u003cspan class=\"nx\"\u003eend\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e~/.gitconfig\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003ecore\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nx\"\u003eeditor\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003envim\u003c/span\u003e \u003cspan class=\"nx\"\u003e-u\u003c/span\u003e \u003cspan class=\"err\"\u003e~/\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003econfig\u003c/span\u003e\u003cspan class=\"err\"\u003e/\u003c/span\u003e\u003cspan class=\"nx\"\u003envim\u003c/span\u003e\u003cspan class=\"err\"\u003e/\u003c/span\u003e\u003cspan class=\"nx\"\u003einit-git\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003evim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nCreating a minimal config specifically for git commits has made running\n`git commit` much more pleasant.  It starts up Much faster, and has all\nof the parts of my config that I use while making a git commit.  The one\nthing that I often use is autocomplete, for things coming from elsewhere\nin the tmux session.  For this `cmpe-tmux` specifically is super\nhelpful.\n\nThe other thing that is engrained into my muscle memory is `jj`\nfor escape.  For that I went agead and added my `settings` and `keymap`\nwith no noticable performance hit.\n\nHere is the config that has taken\n\n\n~/.config/nvim/init-git.vim\n\n``` vim\nsource ~/.config/nvim/settings.vim\nsource ~/.config/nvim/keymap.vim\nsource ~/.config/nvim/git-plugins.vim\nlua require'waylonwalker.cmp'\n```\n\n~/.config/nvim/git-plugins.vim\n\n``` vim\ncall plug#begin('~/.local/share/nvim/plugged')\n\n\" cmp\nPlug 'hrsh7th/nvim-cmp'\nPlug 'hrsh7th/cmp-nvim-lsp'\nPlug 'hrsh7th/cmp-buffer'\nPlug 'hrsh7th/cmp-path'\nPlug 'hrsh7th/cmp-calc'\nPlug 'andersevenrud/compe-tmux', { 'branch': 'cmp' }\n\n\ncall plug#end()\n```\n\n~/.gitconfig\n\n``` toml\n[core]\n    editor = nvim -u ~/.config/nvim/init-git.vim\n```\n",
      "summary": "Creating a minimal config specifically for git commits has made running much more pleasant. It starts up Much faster, and has all of the parts of my config...",
      "date_published": "2022-02-04T14:23:57Z",
      "date_modified": "2022-02-04T14:23:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/photoview-photoview/",
      "url": "https://go.waylonwalker.com/photoview-photoview/",
      "title": "⭐ photoview photoview",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/photoview\" 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\"\u003ephotoview\u003c/a\u003e and their project \u003ca href=\"https://github.com/photoview/photoview\" 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\"\u003ephotoview\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePhoto gallery for \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 personal servers\u003c/p\u003e\n",
      "content_text": "\nCheck out [photoview](https://github.com/photoview) and their project [photoview](https://github.com/photoview/photoview).\n\nPhoto gallery for self-hosted personal servers\n",
      "summary": "Check out photoview and their project photoview.",
      "date_published": "2022-02-03T03:49:29Z",
      "date_modified": "2022-02-03T03:49:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mizlan-iswap-nvim/",
      "url": "https://go.waylonwalker.com/mizlan-iswap-nvim/",
      "title": "⭐ mizlan iswap.nvim",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/mizlan\" 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\"\u003emizlan’s\u003c/a\u003e project \u003ca href=\"https://github.com/mizlan/iswap.nvim\" 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\"\u003eiswap.nvim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eInteractively select and swap function arguments, list elements, and much more. Powered by tree-sitter.\u003c/p\u003e\n",
      "content_text": "\nI like [mizlan's](https://github.com/mizlan) project [iswap.nvim](https://github.com/mizlan/iswap.nvim).\n\nInteractively select and swap function arguments, list elements, and much more. Powered by tree-sitter.\n",
      "summary": "I like mizlan's project iswap.nvim.",
      "date_published": "2022-02-03T03:49:00Z",
      "date_modified": "2022-02-03T03:49:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-dict-get/",
      "url": "https://go.waylonwalker.com/python-dict-get/",
      "title": "python dict get",
      "content_html": "\u003cp\u003eFor an embarassingly long time, til today, I have been wrapping my dict\ngets with key errors in python.  I’m sure I’ve read it in code a bunch\nof times, but just brushed over why you would use get.  That is until I\nread a bunch of PR’s from my buddy Nic and notice that he never gets\nthings with brackets and always with \u003ccode\u003e.get\u003c/code\u003e.  This turns out so much\ncleaner to create a default case than try except.\u003c/p\u003e\n\u003ch2 id=\"example\"\u003eExample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLets consider this example for prices of supplies.  Here we set a variable of\nprices as a dictionary of items and thier price.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eprices\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pen\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e1.2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pencil\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;eraser\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e2.3\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"except-keyerror\"\u003eExcept KeyError \u003ca href=\"#except-keyerror\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat I would always do is try to get the key, and if it failed on KeyError, I\nwould set the value (\u003ccode\u003epaper_price\u003c/code\u003e in this case) to a default value.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epaper_price\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eprices\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;paper\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eKeyError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epaper_price\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"get\"\u003e.get \u003ca href=\"#get\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat I noticed Nic does is to use get.  This feels just so much cleaner that\nit’s a one liner and feels much easier to read and understand that if there is\nno price for paper we set it to \u003ccode\u003eNone\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epaper_price\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eprices\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;paper\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe can just as easily set the default to other values.  Let’s consider sales\nfor instance.  If there is not a record for the sale of paper, it might be that\nwe sold 0 paper in the given dataset.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epaper_sales\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esales\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;paper\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nFor an embarassingly long time, til today, I have been wrapping my dict\ngets with key errors in python.  I'm sure I've read it in code a bunch\nof times, but just brushed over why you would use get.  That is until I\nread a bunch of PR's from my buddy Nic and notice that he never gets\nthings with brackets and always with `.get`.  This turns out so much\ncleaner to create a default case than try except.\n\n\n## Example\n\nLets consider this example for prices of supplies.  Here we set a variable of\nprices as a dictionary of items and thier price.\n\n```python\nprices = {'pen': 1.2, 'pencil', 0.3, 'eraser', 2.3}\n```\n\n## Except KeyError\n\nWhat I would always do is try to get the key, and if it failed on KeyError, I\nwould set the value (`paper_price` in this case) to a default value.\n\n```python\ntry:\n    paper_price = prices['paper']\nexcept KeyError:\n    paper_price = None\n```\n\n## .get\n\nWhat I noticed Nic does is to use get.  This feels just so much cleaner that\nit's a one liner and feels much easier to read and understand that if there is\nno price for paper we set it to `None`.\n\n```python\npaper_price = prices.get('paper', None)\n```\n\nWe can just as easily set the default to other values.  Let's consider sales\nfor instance.  If there is not a record for the sale of paper, it might be that\nwe sold 0 paper in the given dataset.\n\n```python\npaper_sales = sales.get('paper', 0)\n```\n",
      "summary": "For an embarassingly long time, til today, I have been wrapping my dict gets with key errors in python. I'm sure I've read it in code a bunch of times, but...",
      "date_published": "2022-02-03T03:00:36Z",
      "date_modified": "2022-02-03T03:00:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nixery-versions-by-commit-count/",
      "url": "https://go.waylonwalker.com/nixery-versions-by-commit-count/",
      "title": "Nix Versions By Commit Count",
      "content_html": "\u003cp\u003eI was listening to \u003ca href=\"https://changelog.com/shipit/37\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/changelog.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/changelog.com.ico\" class=\"has-avatar  has-avatar-before\"\u003eshipit37\u003c/a\u003e with Vincent\nAmbo talking about building fully declaritive systems with nix.  Vincent is\nbuilding out Nixery and strongly believes that standard versioning systems are\nflawed.  If we have good ci setup, and every commit is a good commit the idea\nof a release is just some arbitrary point in history that the maintainer\ndecided was a good time to release, and has less to do about features and\nquality.\u003c/p\u003e\n\u003cp\u003eSince many things still want to see a version number, there is one automatic\nalways increasing number that is a part of every single \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo, and that is\nthe commit count.  Nixery is versioned by commit count.  When counting on the\nmain branch there is no way for two points in time to share the same version.\nThe git cli will count all commits by default so you have to be careful to only\ninclude commits from the branch you want to version/release from.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit rev-list main --count\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI was listening to [shipit37](https://changelog.com/shipit/37) with Vincent\nAmbo talking about building fully declaritive systems with nix.  Vincent is\nbuilding out Nixery and strongly believes that standard versioning systems are\nflawed.  If we have good ci setup, and every commit is a good commit the idea\nof a release is just some arbitrary point in history that the maintainer\ndecided was a good time to release, and has less to do about features and\nquality.\n\nSince many things still want to see a version number, there is one automatic\nalways increasing number that is a part of every single git repo, and that is\nthe commit count.  Nixery is versioned by commit count.  When counting on the\nmain branch there is no way for two points in time to share the same version.\nThe git cli will count all commits by default so you have to be careful to only\ninclude commits from the branch you want to version/release from.\n\n``` bash\ngit rev-list main --count\n```\n",
      "summary": "I was listening to shipit37 with Vincent Ambo talking about building fully declaritive systems with nix. Vincent is building out Nixery and strongly believes...",
      "date_published": "2022-02-02T15:12:35Z",
      "date_modified": "2022-02-02T15:12:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "catalytic"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rhysd-conflict-marker-vim/",
      "url": "https://go.waylonwalker.com/rhysd-conflict-marker-vim/",
      "title": "⭐ rhysd conflict-marker.vim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/rhysd\" 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\"\u003erhysd\u003c/a\u003e and their project \u003ca href=\"https://github.com/rhysd/conflict-marker.vim\" 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\"\u003econflict-marker.vim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWeapon to fight against conflicts in Vim.\u003c/p\u003e\n",
      "content_text": "\nCheck out [rhysd](https://github.com/rhysd) and their project [conflict-marker.vim](https://github.com/rhysd/conflict-marker.vim).\n\nWeapon to fight against conflicts in Vim.\n",
      "summary": "Check out rhysd and their project conflict-marker.vim.",
      "date_published": "2022-02-01T20:38:21Z",
      "date_modified": "2022-02-01T20:38:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bs4-findall-headings/",
      "url": "https://go.waylonwalker.com/bs4-findall-headings/",
      "title": "Find all Headings with BeautifulSoup",
      "content_html": "\u003cp\u003eBeautifulSoup is a DOM like library for python.  It’s quite useful to\nmanipulate \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.  Here is an example to find_all html headings.  I stole\nthe regex from stack overflow, but who doesn’t.\u003c/p\u003e\n\u003ch2 id=\"make-an-example\"\u003eMake an example \u003ca href=\"#make-an-example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003esample.html\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eLets make a sample.html file with the following contents.  It mainly has\nsome headings, \u003ccode\u003e\u0026lt;h1\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;h2\u0026gt;\u003c/code\u003e tags that I want to be able to find.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u0026lt;!DOCTYPE html\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e \u003cspan class=\"na\"\u003elang\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;en\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eh1\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003ehello\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eh1\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003ethis is a paragraph\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003esecond heading\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003ethis is also a paragraph\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003ethird heading\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003ethis is the last paragraph\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ehtml\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"get-the-headings-with-beautifulsoup\"\u003eGet the headings with BeautifulSoup \u003ca href=\"#get-the-headings-with-beautifulsoup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLets import our packages, read in our \u003ccode\u003esample.html\u003c/code\u003e using pathlib and find all\nheadings using BeautifulSoup.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ebs4\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eBeautifulSoup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esoup\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eBeautifulSoup\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;sample.html\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_text\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"n\"\u003efeatures\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;lxml\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eheadings\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esoup\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efind_all\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ere\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecompile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;^h[1-6]$\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd what we get is a list of \u003ccode\u003ebs4.element.Tag\u003c/code\u003e’s.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eheadings\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eh1\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ehello\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003eh1\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eh2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003esecond\u003c/span\u003e \u003cspan class=\"n\"\u003eheading\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003eh2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eh2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ethird\u003c/span\u003e \u003cspan class=\"n\"\u003eheading\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003eh2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI recently added a heading_link plugin to markata, you might notice the\n🔗’s next to each heading on this page, that is powered by this exact\ntechnique.\u003c/p\u003e\n",
      "content_text": "\nBeautifulSoup is a DOM like library for python.  It's quite useful to\nmanipulate html.  Here is an example to find_all html headings.  I stole\nthe regex from stack overflow, but who doesn't.\n\n## Make an example\n_sample.html_\n\nLets make a sample.html file with the following contents.  It mainly has\nsome headings, `\u003ch1\u003e` and `\u003ch2\u003e` tags that I want to be able to find.\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n  \u003cbody\u003e\n    \u003ch1\u003ehello\u003c/h1\u003e\n    \u003cp\u003ethis is a paragraph\u003c/p\u003e\n    \u003ch2\u003esecond heading\u003c/h2\u003e\n    \u003cp\u003ethis is also a paragraph\u003c/p\u003e\n    \u003ch2\u003ethird heading\u003c/h2\u003e\n    \u003cp\u003ethis is the last paragraph\u003c/p\u003e\n\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\n## Get the headings with BeautifulSoup\n\nLets import our packages, read in our `sample.html` using pathlib and find all\nheadings using BeautifulSoup.\n\n```python\nfrom bs4 import BeautifulSoup\nfrom pathlib import Path\n\nsoup = BeautifulSoup(Path('sample.html').read_text(), features=\"lxml\")\nheadings = soup.find_all(re.compile(\"^h[1-6]$\"))\n```\n\nAnd what we get is a list of `bs4.element.Tag`'s.\n\n```python\n\u003e\u003e print(headings)\n[\u003ch1\u003ehello\u003c/h1\u003e, \u003ch2\u003esecond heading\u003c/h2\u003e, \u003ch2\u003ethird heading\u003c/h2\u003e]\n```\n\nI recently added a heading_link plugin to markata, you might notice the\n🔗's next to each heading on this page, that is powered by this exact\ntechnique.\n",
      "summary": "BeautifulSoup is a DOM like library for python. It's quite useful to manipulate html. Here is an example to find_all html headings. I stole the regex from...",
      "date_published": "2022-02-01T16:17:18Z",
      "date_modified": "2022-02-01T16:17:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-rich-cli/",
      "url": "https://go.waylonwalker.com/textualize-rich-cli/",
      "title": "⭐ Textualize rich-cli",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize’s\u003c/a\u003e project \u003ca href=\"https://github.com/Textualize/rich-cli\" 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\"\u003erich-cli\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRich-cli is a command line toolbox for fancy output in the terminal\u003c/p\u003e\n",
      "content_text": "\nI like [Textualize's](https://github.com/Textualize) project [rich-cli](https://github.com/Textualize/rich-cli).\n\nRich-cli is a command line toolbox for fancy output in the terminal\n",
      "summary": "I like Textualize's project rich-cli.",
      "date_published": "2022-02-01T04:40:17Z",
      "date_modified": "2022-02-01T04:40:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-lambda-node/",
      "url": "https://go.waylonwalker.com/kedro-lambda-node/",
      "title": "Lambda Function as a Kedro Node",
      "content_html": "\u003cp\u003eI keep my nodes short and sweet.  They do one thing and do it well. I\nturn almost every DataFrame transformation into its own node.  It makes\nit must easier to pull catalog entries, than firing up the pipeline,\nrunning it, and starting a debugger.  For this reason many of my nodes\ncan be built from inline lambdas.\u003c/p\u003e\n\u003ch2 id=\"examples\"\u003eExamples \u003ca href=\"#examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere are two examples, the first one \u003ccode\u003elambda x: x\u003c/code\u003e is sometimes referred\nto as an identity function.  This is super common to use in the early\nphases of a project.  It lets you follow standard layering conventions,\nwithout skipping a layer, overthinking if you should have the layer or\nnot, and leaves a good placholder to fill in later when you need it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMany times I just want to get the data in as fast as possible, learn\nabout it, then go back and tidy it up.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ekedro.pipeline\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emy_first_node\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003elambda\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003einputs\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;raw_cars\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;int_cars\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;int\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emy_first_node\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003efunc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003elambda\u003c/span\u003e \u003cspan class=\"n\"\u003ecars\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ecars\u003c/span\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;mpg\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;cyl\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;disp\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,]]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;disp\u0026gt;200\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003einputs\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;raw_cars\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;int_cars\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003etags\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pri\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNote: try not to take the idea of a one liner too far.  If your\none line function wraps several lines down it probably deserves to be\na real function for readability and a good docstring.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nI keep my nodes short and sweet.  They do one thing and do it well. I\nturn almost every DataFrame transformation into its own node.  It makes\nit must easier to pull catalog entries, than firing up the pipeline,\nrunning it, and starting a debugger.  For this reason many of my nodes\ncan be built from inline lambdas.\n\n## Examples\n\nHere are two examples, the first one `lambda x: x` is sometimes referred\nto as an identity function.  This is super common to use in the early\nphases of a project.  It lets you follow standard layering conventions,\nwithout skipping a layer, overthinking if you should have the layer or\nnot, and leaves a good placholder to fill in later when you need it.\n\n\u003e Many times I just want to get the data in as fast as possible, learn\n\u003e about it, then go back and tidy it up.\n\n``` python\nfrom kedro.pipeline import node\n\nmy_first_node = node(\n   func=lambda x: x,\n   inputs='raw_cars',\n   output='int_cars',\n   tags=['int',]\n   )\n\nmy_first_node = node(\n   func=lambda cars: cars[['mpg', 'cyl', 'disp',]].query('disp\u003e200'),\n   inputs='raw_cars',\n   output='int_cars',\n   tags=['pri',]\n   )\n```\n\n\u003e Note: try not to take the idea of a one liner too far.  If your\n\u003e one line function wraps several lines down it probably deserves to be\n\u003e a real function for readability and a good docstring.\n",
      "summary": "I keep my nodes short and sweet. They do one thing and do it well. I turn almost every DataFrame transformation into its own node. It makes it must easier to...",
      "date_published": "2022-01-31T21:52:36Z",
      "date_modified": "2022-01-31T21:52:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "kedro"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/stow-simulate/",
      "url": "https://go.waylonwalker.com/stow-simulate/",
      "title": "How to Properly Simulate Stow",
      "content_html": "\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow -R --simulate -vvv git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\n``` bash\nstow -R --simulate -vvv git\n```\n",
      "date_published": "2022-01-30T20:28:17Z",
      "date_modified": "2022-01-30T20:28:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/global-gitignore-considered-useful/",
      "url": "https://go.waylonwalker.com/global-gitignore-considered-useful/",
      "title": "A Good Use for global .gitignore",
      "content_html": "\u003cp\u003eI’ve never found a great use for a global \u003ccode\u003e.gitignore\u003c/code\u003e file.  Mostly I fear\nthat by adding a lot of the common things like \u003ccode\u003e.pyc\u003c/code\u003e files it will be missing\nfrom the project and inevitably be committed to the project by someone else.\u003c/p\u003e\n\u003ch2 id=\"personal-tools\"\u003ePersonal Tools \u003ca href=\"#personal-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWithin the past year I have added some tools to my personal setup that are not\nrequired to run the project, but works really well with my setup.  They are\n\u003ccode\u003edirenv\u003c/code\u003e and \u003ccode\u003epyflyby\u003c/code\u003e.  Since these both support project level configuration,\nare less common, and not in most  \u003ccode\u003e.gitignore\u003c/code\u003e templates they make for great\ncandidates to add to a global \u003ccode\u003e.gitignore\u003c/code\u003e file.\u003c/p\u003e\n\u003ch2 id=\"create-the-config\"\u003ecreate the config \u003ca href=\"#create-the-config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLike any \u003ccode\u003e.gitignore\u003c/code\u003e it supports gits wildignore syntax.  I made a\n\u003ccode\u003e~/dotfiles/git/.global_gitignore\u003c/code\u003e file, and added the following to it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.envrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.pyflyby\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.copier-defaults\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.venv*/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.python-version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emarkout\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.markata.cache\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce I had this file, I stowed it into \u003ccode\u003e~/.global_gitignore\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/dotfiles/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eAlways stow your dotfiles, don’t set yourself up for wondering why your next\nmachine is not working right.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"stow-note\"\u003estow note \u003ca href=\"#stow-note\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNote, the reason that it is a \u003ccode\u003e~/.global_gitignore\u003c/code\u003e and not a \u003ccode\u003e~/.gitignore\u003c/code\u003e is\nthat I was unable to stow a \u003ccode\u003e.gitignore file\u003c/code\u003e.  They must be ignored by\ndefault, and I was unable to figure out how to turn it back on.\u003c/p\u003e\n\u003ch2 id=\"set-the-config\"\u003eset the config \u003ca href=\"#set-the-config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNext run this command to add the \u003ccode\u003e~/.global_gitignore\u003c/code\u003e to your gitignore as a\nglobal excludesfile.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global core.excludesfile ~/.global_gitignore\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"commit-it\"\u003ecommit it \u003ca href=\"#commit-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce you have done this you should have both your \u003ccode\u003e~/dotfiles/git/.gitconfig\u003c/code\u003e\nand \u003ccode\u003e~/dotfiles/.global_gitignore\u003c/code\u003e ready to commit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add git/.global_gitignore\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add git/.gitconfig\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;add global_gitignore\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"you-didnt-stow-your-gitconfig\"\u003eYou didn’t stow your .gitconfig \u003ca href=\"#you-didnt-stow-your-gitconfig\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ethe shame!\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNo worries, lets get it into your dotfiles repo and stow it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# if you dont have a git directory make it.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.gitconfig ~/devtainer/git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# now use stow to symlink it back to where it was\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# so git works as expected.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"you-dont-have-a-dotfiles-directory\"\u003eYou dont have a dotfiles directory \u003ca href=\"#you-dont-have-a-dotfiles-directory\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003edouble shame 😲\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIf you dont already have a dotfiles directry you should.  It is important for\nit to be in your home directory for stow to work properly, if you really don’t\nwant it there, look up how to configure stow to account for this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# make a dotfiles directory and go there\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# make it a git repo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# if you dont have a git directory make it.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.gitconfig ~/devtainer/git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# now use stow to symlink it back to where it was\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# so git works as expected.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've never found a great use for a global `.gitignore` file.  Mostly I fear\nthat by adding a lot of the common things like `.pyc` files it will be missing\nfrom the project and inevitably be committed to the project by someone else.\n\n## Personal Tools\n\nWithin the past year I have added some tools to my personal setup that are not\nrequired to run the project, but works really well with my setup.  They are\n`direnv` and `pyflyby`.  Since these both support project level configuration,\nare less common, and not in most  `.gitignore` templates they make for great\ncandidates to add to a global `.gitignore` file.\n\n## create the config\n\nLike any `.gitignore` it supports gits wildignore syntax.  I made a\n`~/dotfiles/git/.global_gitignore` file, and added the following to it.\n\n```bash\n.envrc\n.pyflyby\n.copier-defaults\n.venv*/\n.python-version\nmarkout\n.markata.cache\n```\n\nOnce I had this file, I stowed it into `~/.global_gitignore`.\n\n``` bash\ncd ~/dotfiles/\nstow git\n```\n\n\u003e Always stow your dotfiles, don't set yourself up for wondering why your next\n\u003e machine is not working right.\n\n## stow note\n\nNote, the reason that it is a `~/.global_gitignore` and not a `~/.gitignore` is\nthat I was unable to stow a `.gitignore file`.  They must be ignored by\ndefault, and I was unable to figure out how to turn it back on.\n\n## set the config\n\nNext run this command to add the `~/.global_gitignore` to your gitignore as a\nglobal excludesfile.\n\n```bash\ngit config --global core.excludesfile ~/.global_gitignore\n```\n\n## commit it\n\nOnce you have done this you should have both your `~/dotfiles/git/.gitconfig`\nand `~/dotfiles/.global_gitignore` ready to commit.\n\n```bash\ncd ~/dotfiles\n\ngit add git/.global_gitignore\ngit add git/.gitconfig\n\ngit commit -m \"add global_gitignore\"\n```\n\n## You didn't stow your .gitconfig\n\n_the shame!_\n\nNo worries, lets get it into your dotfiles repo and stow it.\n\n```bash\ncd ~/dotfiles\n\n# if you dont have a git directory make it.\nmkdir git\nmv ~/.gitconfig ~/devtainer/git\n# now use stow to symlink it back to where it was\n# so git works as expected.\nstow git\n```\n\n## You dont have a dotfiles directory\n\n_double shame 😲_\n\nIf you dont already have a dotfiles directry you should.  It is important for\nit to be in your home directory for stow to work properly, if you really don't\nwant it there, look up how to configure stow to account for this.\n\n```bash\n# make a dotfiles directory and go there\nmkdir ~/dotfiles\ncd ~/dotfiles\n\n# make it a git repo\ngit init\n\n# if you dont have a git directory make it.\n\nmkdir git\nmv ~/.gitconfig ~/devtainer/git\n# now use stow to symlink it back to where it was\n# so git works as expected.\nstow git\n```\n",
      "summary": "I've never found a great use for a global file. Mostly I fear that by adding a lot of the common things like files it will be missing from the project and...",
      "date_published": "2022-01-30T02:11:51Z",
      "date_modified": "2022-01-30T02:11:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/squoosh-cli/",
      "url": "https://go.waylonwalker.com/squoosh-cli/",
      "title": "Squoosh cli",
      "content_html": "\u003cp\u003eToday I discovered a sweet new cli for compressing images.\n\u003ca href=\"https://github.com/GoogleChromeLabs/squoosh/tree/dev/cli\" 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\"\u003esquoosh cli\u003c/a\u003e\nis a wasm powered cli that supports a bunch of formats that I would want to\nconvert my website images to.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003efrom the future\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026gt; Unfortunately, due to a few people leaving the team, and staffing issues\n\u003c/code\u003e\u003c/pre\u003e\n\u003cblockquote\u003e\n\u003cp\u003eresulting from the current economic climate (ugh), I’m deprecating the\nCLI and libsquoosh parts of Squoosh. The web app will continue to be\nsupported and improved. I know that sucks, but there simply isn’t the\ntime \u0026amp; people to work on this. If anyone from the community wants to fork\nit, you have my blessing.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/GoogleChromeLabs/squoosh/pull/1321\" 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\"\u003ehttps://github.com/GoogleChromeLabs/squoosh/pull/1321\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003ch2 id=\"web-app\"\u003eWeb App \u003ca href=\"#web-app\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFirst the main feature of squoosh is a \u003ca href=\"https://squoosh.app\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/squoosh.app.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/squoosh.app.ico\" class=\"has-avatar  has-avatar-before\"\u003eweb app\u003c/a\u003e that\nmakes your images smaller right in the browser, using the same wasm.  It’s\nsweet!  There is a really cool swiper to compare the output image with the\noriginal, and graphical dials to change your settings.\u003c/p\u003e\n\u003ch2 id=\"cli\"\u003eCLI \u003ca href=\"#cli\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhat is even cooler is that once you have settings you are happy with and are\nreally cutting down those kb’s on your images, there is a copy cli command\nbutton!  If you have npx (which you should if you have nodejs and npm) already\ninstalled it just works without installing anything more.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/squoosh-cli-button.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/squoosh-cli-button.png\" alt=\"The button on squoosh.app\"/ data-glightbox=\"description: The button on squoosh.app\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"converting-all-of-my-pngs-to-webp\"\u003eConverting all of my png’s to webp \u003ca href=\"#converting-all-of-my-pngs-to-webp\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI copied the command that it gave me for converting to webp, and set it up to\nrun on all of my pngs.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003enpx @squoosh/cli --webp \\\n  \u0026#39;{\u0026#34;quality\u0026#34;:75 \\\n    \u0026#34;target_size\u0026#34;:0 \\\n    \u0026#34;target_PSNR\u0026#34;:0 \\\n    \u0026#34;method\u0026#34;:4 \\\n    \u0026#34;sns_strength\u0026#34;:50 \\\n    \u0026#34;filter_strength\u0026#34;:60 \\\n    \u0026#34;filter_sharpness\u0026#34;:0 \\\n    \u0026#34;filter_type\u0026#34;:1 \\\n    \u0026#34;partitions\u0026#34;:0 \\\n    \u0026#34;segments\u0026#34;:4 \\\n    \u0026#34;pass\u0026#34;:1 \\\n    \u0026#34;show_compressed\u0026#34;:0 \\\n    \u0026#34;preprocessing\u0026#34;:0 \\\n    \u0026#34;autofilter\u0026#34;:0 \\\n    \u0026#34;partition_limit\u0026#34;:0 \\\n    \u0026#34;alpha_compression\u0026#34;:1 \\\n    \u0026#34;alpha_filtering\u0026#34;:1 \\\n    \u0026#34;alpha_quality\u0026#34;:100 \\\n    \u0026#34;lossless\u0026#34;:0 \\\n    \u0026#34;exact\u0026#34;:0 \\\n    \u0026#34;image_hint\u0026#34;:0 \\\n    \u0026#34;emulate_jpeg_size\u0026#34;:0 \\\n    \u0026#34;thread_level\u0026#34;:0 \\\n    \u0026#34;low_memory\u0026#34;:0 \\\n    \u0026#34;near_lossless\u0026#34;:100 \\\n    \u0026#34;use_delta_palette\u0026#34;:0 \\\n    \u0026#34;use_sharp_yuv\u0026#34;:0 \\\n    }\u0026#39; \\\n    static/*.png -d squoosh-webp\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eI opened my images repo and converted all pngs to webp using the command above.\nI got 94% compression on my existing pngs without resizing anything.  This is\ndang impressive, and not too hard to do.  I do want to refactor my images site\nat some point and include this as part of the ci system.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/squoosh-webp-results.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/squoosh-webp-results.png\" alt=\"resulting file sizes for converting png to wepb.\"/ data-glightbox=\"description: resulting file sizes for converting png to wepb.\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eI also converted to avif, but it sent all my cpus to 100 for quite awhile, for\nonly another 2MB total.  Not sure if its worth it or not.\u003c/p\u003e\n",
      "content_text": "\nToday I discovered a sweet new cli for compressing images.\n[squoosh cli](https://github.com/GoogleChromeLabs/squoosh/tree/dev/cli)\nis a wasm powered cli that supports a bunch of formats that I would want to\nconvert my website images to.\n\n!!! Note from the future\n      \u003e Unfortunately, due to a few people leaving the team, and staffing issues\n      \u003e resulting from the current economic climate (ugh), I'm deprecating the\n      \u003e CLI and libsquoosh parts of Squoosh. The web app will continue to be\n      \u003e supported and improved. I know that sucks, but there simply isn't the\n      \u003e time \u0026 people to work on this. If anyone from the community wants to fork\n      \u003e it, you have my blessing.\n\n      https://github.com/GoogleChromeLabs/squoosh/pull/1321\n\n## Web App\n\nFirst the main feature of squoosh is a [web app](https://squoosh.app) that\nmakes your images smaller right in the browser, using the same wasm.  It's\nsweet!  There is a really cool swiper to compare the output image with the\noriginal, and graphical dials to change your settings.\n\n## CLI\n\nWhat is even cooler is that once you have settings you are happy with and are\nreally cutting down those kb's on your images, there is a copy cli command\nbutton!  If you have npx (which you should if you have nodejs and npm) already\ninstalled it just works without installing anything more.\n\n![The button on squoosh.app](https://images.waylonwalker.com/squoosh-cli-button.png)\n\n## Converting all of my png's to webp\n\nI copied the command that it gave me for converting to webp, and set it up to\nrun on all of my pngs.\n\n```\nnpx @squoosh/cli --webp \\\n  '{\"quality\":75 \\\n    \"target_size\":0 \\\n    \"target_PSNR\":0 \\\n    \"method\":4 \\\n    \"sns_strength\":50 \\\n    \"filter_strength\":60 \\\n    \"filter_sharpness\":0 \\\n    \"filter_type\":1 \\\n    \"partitions\":0 \\\n    \"segments\":4 \\\n    \"pass\":1 \\\n    \"show_compressed\":0 \\\n    \"preprocessing\":0 \\\n    \"autofilter\":0 \\\n    \"partition_limit\":0 \\\n    \"alpha_compression\":1 \\\n    \"alpha_filtering\":1 \\\n    \"alpha_quality\":100 \\\n    \"lossless\":0 \\\n    \"exact\":0 \\\n    \"image_hint\":0 \\\n    \"emulate_jpeg_size\":0 \\\n    \"thread_level\":0 \\\n    \"low_memory\":0 \\\n    \"near_lossless\":100 \\\n    \"use_delta_palette\":0 \\\n    \"use_sharp_yuv\":0 \\\n    }' \\\n    static/*.png -d squoosh-webp\n```\n\nI opened my images repo and converted all pngs to webp using the command above.\nI got 94% compression on my existing pngs without resizing anything.  This is\ndang impressive, and not too hard to do.  I do want to refactor my images site\nat some point and include this as part of the ci system.\n\n![resulting file sizes for converting png to wepb.](https://images.waylonwalker.com/squoosh-webp-results.png)\n\nI also converted to avif, but it sent all my cpus to 100 for quite awhile, for\nonly another 2MB total.  Not sure if its worth it or not.\n",
      "summary": "Today I discovered a sweet new cli for compressing images. squoosh cli is a wasm powered cli that supports a bunch of formats that I would want to convert my...",
      "date_published": "2022-01-29T04:54:50Z",
      "date_modified": "2022-01-29T04:54:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "cli",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-new-dependencies/",
      "url": "https://go.waylonwalker.com/kedro-new-dependencies/",
      "title": "Add New Dependencies to Your Kedro Project",
      "content_html": "\u003cp\u003eAs you work on your kedro projects you are bound to need to add more\ndependencies to the project eventually.  Kedro uses a fantastic command\n\u003ccode\u003epip-compile\u003c/code\u003e under the hood to ensure that everyone is on the same version of\npackages at all times, and able to easily upgrade them.  It might be a bit\ndifferent workflow than what you have seen, let’s take a look at it.\u003c/p\u003e\n\u003ch2 id=\"\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e-status\"\u003egit status \u003ca href=\"#git-status\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBefore you start mucking around with any changes to dependencies make sure that\nyour git status is clean.  I’d even reccomend starting a new branch for this,\nand if you are working on a team potentially submit this as its own PR for\nclarity.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b add-rich-dependency\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"requirementsin\"\u003erequirements.in \u003ca href=\"#requirementsin\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNew requirements get added to a requirements.in file.  If you need to specify\nan exact version, or a minimum version you can do that, but if all versions\ngenerally work you can leave it open.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# requirements.in\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erich\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eHere I added the popular \u003ccode\u003erich\u003c/code\u003e package to my \u003ccode\u003erequirements.in\u003c/code\u003e file.  Since\nI am ok with the latest version I am not going to pin anything, I am going to\nlet the pip resolver pick the latest version that does not conflict with any of\nmy dependencies for me.\u003c/p\u003e\n\u003ch2 id=\"build-reqs\"\u003ebuild-reqs \u003ca href=\"#build-reqs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe command \u003ccode\u003ekedro build-reqs\u003c/code\u003e will tell kedro to recompile the\n\u003ccode\u003erequirements.txt\u003c/code\u003e file that has all of our dependencies pinned down to exact\nversions.  This ensures that all of our teammates and production workflows use\nthe same exact versions of packages even if new ones are released after we\ninstalled on our development machines.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekedro build-reqs\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"git-add\"\u003egit add \u003ca href=\"#git-add\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow that we have our new dependencies ready to go commit those to git, and\nsubmit a PR for them if you are working on a team.  This is a good way to\ndocument the discussion of adding new dependencies to your teams project.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add requirements.in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add requirements.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;FEAT updated dependencies with rich\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# go make a pr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr create --title \u003cspan class=\"s2\"\u003e\u0026#34;feat add rich to dependencies\u0026#34;\u003c/span\u003e --body \u003cspan class=\"s2\"\u003e\u0026#34;I added rich as a dependency, and ran pip-compile\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nAs you work on your kedro projects you are bound to need to add more\ndependencies to the project eventually.  Kedro uses a fantastic command\n`pip-compile` under the hood to ensure that everyone is on the same version of\npackages at all times, and able to easily upgrade them.  It might be a bit\ndifferent workflow than what you have seen, let's take a look at it.\n\n## git status\n\nBefore you start mucking around with any changes to dependencies make sure that\nyour git status is clean.  I'd even reccomend starting a new branch for this,\nand if you are working on a team potentially submit this as its own PR for\nclarity.\n\n``` bash\ngit status\ngit checkout main\ngit checkout -b add-rich-dependency\n```\n\n## requirements.in\n\nNew requirements get added to a requirements.in file.  If you need to specify\nan exact version, or a minimum version you can do that, but if all versions\ngenerally work you can leave it open.\n\n``` bash\n# requirements.in\nrich\n```\n\nHere I added the popular `rich` package to my `requirements.in` file.  Since\nI am ok with the latest version I am not going to pin anything, I am going to\nlet the pip resolver pick the latest version that does not conflict with any of\nmy dependencies for me.\n\n## build-reqs\n\nThe command `kedro build-reqs` will tell kedro to recompile the\n`requirements.txt` file that has all of our dependencies pinned down to exact\nversions.  This ensures that all of our teammates and production workflows use\nthe same exact versions of packages even if new ones are released after we\ninstalled on our development machines.\n\n``` bash\nkedro build-reqs\n```\n\n## git add\n\nNow that we have our new dependencies ready to go commit those to git, and\nsubmit a PR for them if you are working on a team.  This is a good way to\ndocument the discussion of adding new dependencies to your teams project.\n\n``` bash\ngit add requirements.in\ngit add requirements.txt\ngit status\ngit commit -m \"FEAT updated dependencies with rich\"\ngit push\n# go make a pr\ngh pr create --title \"feat add rich to dependencies\" --body \"I added rich as a dependency, and ran pip-compile\"\n```\n",
      "summary": "As you work on your kedro projects you are bound to need to add more dependencies to the project eventually. Kedro uses a fantastic command under the hood to...",
      "date_published": "2022-01-28T21:30:48Z",
      "date_modified": "2022-01-28T21:30:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kedro",
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/practice-kedro/",
      "url": "https://go.waylonwalker.com/practice-kedro/",
      "title": "Practice making pipelines with kedro",
      "content_html": "\u003cp\u003eI am a huge believer in practicing your craft.  Professional athletes\nspend most of their time honing their skills and making themsleves\nbetter.  In Engineering many spend nearly 0 time practicing.  I am not\nsaying that you need to spend all your free time practicing, but a few\nminutes trying new things can go a long way in how you understand what\nyou are doing and make a hue impact on your long term productivity.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/what-is-kedro/\" class=\"wikilink\" data-title=\"What is Kedro\" data-description=\"Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...\" data-date=\"2021-08-17\" data-preview=\"Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...\"\u003eWhat is Kedro\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"start-practicing\"\u003eStart practicing \u003ca href=\"#start-practicing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003epractice\u003c/strong\u003e building pipelines with \u003cem\u003e#kedro\u003c/em\u003e today\u003c/p\u003e\n\u003cp\u003eGo to your playground directory, and if you don’t have one, make one.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/playground\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"get-pipx\"\u003eget pipx \u003ca href=\"#get-pipx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall pipx in your system python.  This is one of the very few, and\npossibly the only python library that deserves to be installed in your\nsystem directory, primarily because its used to sanbox clis in their own\n\u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e automatically for you.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install pipx\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"make-a-new-project\"\u003emake a new project \u003ca href=\"#make-a-new-project\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFrom inside your \u003ccode\u003eplayground\u003c/code\u003e directory, start your new kedro project.\nThis is quite simple and painless.  So much so that if you mess this one\nup doing something wild, it might be easier to make a new one that\nfixing the wild one.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epipx run kedro new\n# answer the questions it asks\n\u003c/code\u003e\u003c/pre\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI use this quite often to try out new things in a safe place.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"make-a-virtual-environment\"\u003eMake a virtual environment \u003ca href=\"#make-a-virtual-environment\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"using-conda\"\u003eUsing Conda \u003ca href=\"#using-conda\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eConda is a fine choice to manage your virtual environments.  It used to\nmake things so much easier on windows that it was almost required.\nNowadays getting python running on windows has become so much easier\nthat this is less so.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econda\u003c/span\u003e \u003cspan class=\"n\"\u003ecreate\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"n\"\u003emy\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eproject\u003c/span\u003e \u003cspan class=\"n\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.8\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econda\u003c/span\u003e \u003cspan class=\"n\"\u003eactivate\u003c/span\u003e \u003cspan class=\"n\"\u003emy\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eproject\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e  \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003em\u003c/span\u003e \u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eupgrade\u003c/span\u003e \u003cspan class=\"n\"\u003epip\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epip\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ee\u003c/span\u003e \u003cspan class=\"n\"\u003esrc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eone great benefit of conda is that it lets you choose the interpreter\nto go with your virtual environment.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eYour new environment will be listed in your list of conda env here.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econda\u003c/span\u003e \u003cspan class=\"n\"\u003einfo\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eenvs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"using-venv\"\u003eUsing venv \u003ca href=\"#using-venv\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003evenv\u003c/code\u003e is what I use now.  Nothing against conda, it works great.\n\u003ccode\u003evenv\u003c/code\u003e just feels a bit lighter and more common.  I’ve actually grown to\nappreciate that the \u003ccode\u003evenv\u003c/code\u003e is right where I put it, most often in the\nproject directory.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m venv .venv\nsource ./.venv/bin/activate\npython  -m pip install --upgrade pip\npip install -e src\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"using-pipenv\"\u003eusing pipenv \u003ca href=\"#using-pipenv\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003epipenv\u003c/code\u003e is another fine choice.  I like how in one command it makes the\nenvironment and activates it for you.  \u003ccode\u003epipenv\u003c/code\u003e also puts virtual\nenvironments in the global directory.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epipx run pipenv shell\npython  -m pip install --upgrade pip\npip install -e src\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"make-pipelines\"\u003eMake pipelines \u003ca href=\"#make-pipelines\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNow go make some pipelines with your new project, try something wild,\nbreak it, and make another.\u003c/p\u003e\n",
      "content_text": "\nI am a huge believer in practicing your craft.  Professional athletes\nspend most of their time honing their skills and making themsleves\nbetter.  In Engineering many spend nearly 0 time practicing.  I am not\nsaying that you need to spend all your free time practicing, but a few\nminutes trying new things can go a long way in how you understand what\nyou are doing and make a hue impact on your long term productivity.\n\n\u003ca href=\"/what-is-kedro/\" class=\"wikilink\" data-title=\"What is Kedro\" data-description=\"Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...\" data-date=\"2021-08-17\"\u003eWhat is Kedro\u003c/a\u003e\n\n## Start practicing\n\n**practice** building pipelines with _#kedro_ today\n\nGo to your playground directory, and if you don't have one, make one.\n\n``` bash\ncd ~/playground\n```\n\n## get pipx\n\nInstall pipx in your system python.  This is one of the very few, and\npossibly the only python library that deserves to be installed in your\nsystem directory, primarily because its used to sanbox clis in their own\nvirtual environment automatically for you.\n\n``` bash\npip install pipx\n```\n\n## make a new project\n\nFrom inside your `playground` directory, start your new kedro project.\nThis is quite simple and painless.  So much so that if you mess this one\nup doing something wild, it might be easier to make a new one that\nfixing the wild one.\n\n```\npipx run kedro new\n# answer the questions it asks\n```\n\n\u003e I use this quite often to try out new things in a safe place.\n\n## Make a virtual environment\n\n### Using Conda\n\nConda is a fine choice to manage your virtual environments.  It used to\nmake things so much easier on windows that it was almost required.\nNowadays getting python running on windows has become so much easier\nthat this is less so.\n\n``` python\nconda create -n my-project python=3.8 -y\nconda activate my-project\npython  -m pip install --upgrade pip\npip install -e src\n```\n\n\u003e one great benefit of conda is that it lets you choose the interpreter\n\u003e to go with your virtual environment.\n\nYour new environment will be listed in your list of conda env here.\n\n``` python\nconda info --envs\n```\n\n### Using venv\n\n`venv` is what I use now.  Nothing against conda, it works great.\n`venv` just feels a bit lighter and more common.  I've actually grown to\nappreciate that the `venv` is right where I put it, most often in the\nproject directory.\n\n```\npython -m venv .venv\nsource ./.venv/bin/activate\npython  -m pip install --upgrade pip\npip install -e src\n```\n\n### using pipenv\n\n`pipenv` is another fine choice.  I like how in one command it makes the\nenvironment and activates it for you.  `pipenv` also puts virtual\nenvironments in the global directory.\n\n```\npipx run pipenv shell\npython  -m pip install --upgrade pip\npip install -e src\n```\n\n## Make pipelines\n\nNow go make some pipelines with your new project, try something wild,\nbreak it, and make another.\n",
      "summary": "I am a huge believer in practicing your craft. Professional athletes spend most of their time honing their skills and making themsleves better. In...",
      "date_published": "2022-01-27T21:07:37Z",
      "date_modified": "2022-01-27T21:07:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "kedro"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jupyterlite-jupyterlite/",
      "url": "https://go.waylonwalker.com/jupyterlite-jupyterlite/",
      "title": "⭐ jupyterlite jupyterlite",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/jupyterlite/jupyterlite\" 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\"\u003ejupyterlite\u003c/a\u003e, created by \u003ca href=\"https://github.com/jupyterlite\" 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\"\u003ejupyterlite\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWasm powered Jupyter running in the browser 💡\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [jupyterlite](https://github.com/jupyterlite/jupyterlite), created by [jupyterlite](https://github.com/jupyterlite).\n\nWasm powered Jupyter running in the browser 💡\n",
      "summary": "If you're into interesting projects, don't miss out on jupyterlite, created by jupyterlite.",
      "date_published": "2022-01-27T17:32:50Z",
      "date_modified": "2022-01-27T17:32:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/davidbrochart-nbterm/",
      "url": "https://go.waylonwalker.com/davidbrochart-nbterm/",
      "title": "⭐ davidbrochart nbterm",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/davidbrochart/nbterm\" 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\"\u003enbterm\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/davidbrochart\" 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\"\u003edavidbrochart\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eJupyter Notebooks in the terminal.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [nbterm](https://github.com/davidbrochart/nbterm), an amazing project by [davidbrochart](https://github.com/davidbrochart). It's worth exploring!\n\nJupyter Notebooks in the terminal.\n",
      "summary": "I'm really excited about nbterm, an amazing project by davidbrochart. It's worth exploring!",
      "date_published": "2022-01-27T17:14:56Z",
      "date_modified": "2022-01-27T17:14:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sunjon-stylish-nvim/",
      "url": "https://go.waylonwalker.com/sunjon-stylish-nvim/",
      "title": "⭐ sunjon stylish.nvim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/sunjon/stylish.nvim\" 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\"\u003estylish.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/sunjon\" 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\"\u003esunjon\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eStylish UI components for Neovim\u003c/p\u003e\n",
      "content_text": "\nI came across [stylish.nvim](https://github.com/sunjon/stylish.nvim) from [sunjon](https://github.com/sunjon), and it's packed with great features and ideas.\n\nStylish UI components for Neovim\n",
      "summary": "I came across stylish.nvim from sunjon, and it's packed with great features and ideas.",
      "date_published": "2022-01-26T14:52:55Z",
      "date_modified": "2022-01-26T14:52:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ubuntu-terminal-clipboard/",
      "url": "https://go.waylonwalker.com/ubuntu-terminal-clipboard/",
      "title": "Tmux and Vim Clipboard for Ubuntu",
      "content_html": "\u003cp\u003eOne of the first things I noticed broken in my terminal based workflow moving\nfrom Windows wsl to ubuntu was that my clipboard was all messed up and not\nworking with my terminal apps.  Luckily setting tmux and neovim to work with\nthe system clipboard was much easier than it was on windows.\u003c/p\u003e\n\u003cp\u003eFirst off you need to get \u003ccode\u003exclip\u003c/code\u003e if you don’t already have it provided by your\ndistro.  I found it in the apt repositories.  I have used it between Ubuntu\n18.04 and 21.10 and they all work flawlessly for me.\u003c/p\u003e\n\u003cp\u003eI have tmux setup to automatically copy any selection I make to the clipboard\nby setting the following in my \u003ccode\u003e~/.tmux.conf\u003c/code\u003e. While I have neovim open I need\nto be in insert mode for this to pick up.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ~/tmux.conf\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel \u003cspan class=\"s2\"\u003e\u0026#34;xclip -i -f -selection primary | xclip -i -selection clipboard\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel \u003cspan class=\"s2\"\u003e\u0026#34;xclip -selection clipboard -i\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo get my yanks to go to the system clipboard in neovim, I just added\nunnamedplus to my existing clipboard variable.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# \u003cspan class=\"p\"\u003e~\u003c/span\u003e\u003cspan class=\"sr\"\u003e/.config/\u003c/span\u003e\u003cspan class=\"nx\"\u003envim\u003c/span\u003e/\u003cspan class=\"nx\"\u003einit\u003c/span\u003e.\u003cspan class=\"nx\"\u003evim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eset\u003c/span\u003e \u003cspan class=\"nx\"\u003eclipboard\u003c/span\u003e\u003cspan class=\"p\"\u003e+=\u003c/span\u003e\u003cspan class=\"nx\"\u003eunnamedplus\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you need to copy something right from the terminal you can use xclip\ndirectly.  I do this semi-often to send someone a message in chat.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat file.txt \u003cspan class=\"p\"\u003e|\u003c/span\u003e clip -sel copy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI set up some alias’s for doing this a bit more efficiently, but don’t find\nmyself using them very often.  This helps me grab commands from history and\ncopy them.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003ehclip\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;history | tail -n1 | cut -c 8- | xclip -sel clip\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003efclip\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;history -n 1000 | fzf | cut -c 8- | xclip -sel clip\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nv\"\u003efclip\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;history -n 1000 | fzf | xclip -sel clip\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nOne of the first things I noticed broken in my terminal based workflow moving\nfrom Windows wsl to ubuntu was that my clipboard was all messed up and not\nworking with my terminal apps.  Luckily setting tmux and neovim to work with\nthe system clipboard was much easier than it was on windows.\n\nFirst off you need to get `xclip` if you don't already have it provided by your\ndistro.  I found it in the apt repositories.  I have used it between Ubuntu\n18.04 and 21.10 and they all work flawlessly for me.\n\nI have tmux setup to automatically copy any selection I make to the clipboard\nby setting the following in my `~/.tmux.conf`. While I have neovim open I need\nto be in insert mode for this to pick up.\n\n``` bash\n# ~/tmux.conf\nbind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel \"xclip -i -f -selection primary | xclip -i -selection clipboard\"\nbind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel \"xclip -selection clipboard -i\"\n```\n\nTo get my yanks to go to the system clipboard in neovim, I just added\nunnamedplus to my existing clipboard variable.\n\n``` vim\n# ~/.config/nvim/init.vim\nset clipboard+=unnamedplus\n```\n\nIf you need to copy something right from the terminal you can use xclip\ndirectly.  I do this semi-often to send someone a message in chat.\n\n``` bash\ncat file.txt | clip -sel copy\n```\n\nI set up some alias's for doing this a bit more efficiently, but don't find\nmyself using them very often.  This helps me grab commands from history and\ncopy them.\n\n``` bash\nalias hclip=\"history | tail -n1 | cut -c 8- | xclip -sel clip\"\nalias fclip=\"history -n 1000 | fzf | cut -c 8- | xclip -sel clip\"\nalias fclip=\"history -n 1000 | fzf | xclip -sel clip\"\n```\n",
      "summary": "One of the first things I noticed broken in my terminal based workflow moving from Windows wsl to ubuntu was that my clipboard was all messed up and not...",
      "date_published": "2022-01-26T02:50:56Z",
      "date_modified": "2022-01-26T02:50:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "vim",
        "tmux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nix-install-java8/",
      "url": "https://go.waylonwalker.com/nix-install-java8/",
      "title": "nix rescues modded minecraft night",
      "content_html": "\u003cp\u003eWith the latest version of minecraft it requires a very new, possibly\nthe latest, version of java.  Lately we have been getting into modded\nminecraft and I maintain the server for us.  It’s been tricky to say the\nleast.  One hurdle I recently hit involves having the wrong version of\njava.\u003c/p\u003e\n\u003cp\u003eI was getting this error trying to get a 1.12.2 forge server running.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCaused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader ‘bootstrap’)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIn researching our errors, I found this on a forum.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ePre-1.13 Forge only works with Java 8.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI don’t write java, or really know how to manage different versions of\njava, but I have nixpkgs installed and it has a ton of odd stuff like\nthis readily available, so\n\u003ca href=\"https://search.nixos.org/packages?channel=21.05\u0026amp;show=jdk8\u0026amp;from=0\u0026amp;size=50\u0026amp;sort=relevance\u0026amp;type=packages\u0026amp;query=java+8\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/search.nixos.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/search.nixos.org.png\" class=\"has-avatar  has-avatar-before\"\u003esearching nixpkgs\u003c/a\u003e\nlanded me with this.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enix-env -iA nixpkgs.jdk8\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eonce I had this installed I then just changed out java for the full path\nto my new nixpkgs.jdk8 java and it worked.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/walkers/.nix-profile/bin/java -server -Xms\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eMIN_RAM\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e -Xmx\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eMAX_RAM\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eJAVA_PARAMETERS\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e -jar \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eSERVER_JAR\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e nogui\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI don’t write java or do anything other than host minecraft servers wtih\nit.  There is probably a better way of maintaining java versions than\nthis, but this worked for me.\u003c/p\u003e\n",
      "content_text": "\nWith the latest version of minecraft it requires a very new, possibly\nthe latest, version of java.  Lately we have been getting into modded\nminecraft and I maintain the server for us.  It's been tricky to say the\nleast.  One hurdle I recently hit involves having the wrong version of\njava.\n\nI was getting this error trying to get a 1.12.2 forge server running.\n\n\u003e Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')\n\nIn researching our errors, I found this on a forum.\n\n\u003e Pre-1.13 Forge only works with Java 8.\n\nI don't write java, or really know how to manage different versions of\njava, but I have nixpkgs installed and it has a ton of odd stuff like\nthis readily available, so\n[searching nixpkgs](https://search.nixos.org/packages?channel=21.05\u0026show=jdk8\u0026from=0\u0026size=50\u0026sort=relevance\u0026type=packages\u0026query=java+8)\nlanded me with this.\n\n``` bash\nnix-env -iA nixpkgs.jdk8\n```\n\nonce I had this installed I then just changed out java for the full path\nto my new nixpkgs.jdk8 java and it worked.\n\n``` bash\n/home/walkers/.nix-profile/bin/java -server -Xms${MIN_RAM} -Xmx${MAX_RAM} ${JAVA_PARAMETERS} -jar ${SERVER_JAR} nogui\n```\n\nI don't write java or do anything other than host minecraft servers wtih\nit.  There is probably a better way of maintaining java versions than\nthis, but this worked for me.\n",
      "summary": "With the latest version of minecraft it requires a very new, possibly the latest, version of java. Lately we have been getting into modded minecraft and I...",
      "date_published": "2022-01-25T03:07:39Z",
      "date_modified": "2022-01-25T03:07:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli",
        "cli",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tmux-copier-templates/",
      "url": "https://go.waylonwalker.com/tmux-copier-templates/",
      "title": "Tmux hotkey for copier templates",
      "content_html": "\u003cp\u003eI have added a hotkey to my copier template setup to quickly access all my\ntemplates at any time from tmux.  At any point I can hit \u003ccode\u003e\u0026lt;c-b\u0026gt;\u0026lt;c-b\u0026gt;\u003c/code\u003e, thats\nholding control and hitting \u003ccode\u003ebb\u003c/code\u003e, and I will get a popup list of all of my\ntemplates directory names.  Its an fzf list, which means that I can fuzzy\nsearch through it for the template I want, or arrow key to the one I want if I\nam feeling insane.  I even setup it up so that the preview is a list of the\nfiles that come with the template in tree view.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebind-key c-b popup -E -w 80% -d \u003cspan class=\"s1\"\u003e\u0026#39;#{pane_current_path}\u0026#39;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    pipx run copier copy ~/.copier-templates/`ls ~/.copier-templates |\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    fzf --header \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e\u003cspan class=\"nb\"\u003epwd\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e --preview=\u0026#39;tree ~/.copier-templates/{} |\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    lolcat\u0026#39;` . \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI’ve had this on my systems for a few weeks now and I am constantly using it\nfor my \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\"\u003etils\u003c/a\u003e,\n\u003ca href=\"https://waylonwalker.com/archive\" 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\"\u003eblogs\u003c/a\u003e, and my .envrc file that goes into\nall of my projects to make sure that I have a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e installed and\nrunning any time I open it.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/copier-templates-tmux-popup.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/copier-templates-tmux-popup.png\" alt=\"this is what it looks like when I open my copier templates popup\"/ data-glightbox=\"description: this is what it looks like when I open my copier templates popup\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI have added a hotkey to my copier template setup to quickly access all my\ntemplates at any time from tmux.  At any point I can hit `\u003cc-b\u003e\u003cc-b\u003e`, thats\nholding control and hitting `bb`, and I will get a popup list of all of my\ntemplates directory names.  Its an fzf list, which means that I can fuzzy\nsearch through it for the template I want, or arrow key to the one I want if I\nam feeling insane.  I even setup it up so that the preview is a list of the\nfiles that come with the template in tree view.\n\n``` bash\nbind-key c-b popup -E -w 80% -d '#{pane_current_path}' \"\\\n    pipx run copier copy ~/.copier-templates/`ls ~/.copier-templates |\\\n    fzf --header $(pwd) --preview='tree ~/.copier-templates/{} |\\\n    lolcat'` . \\\n    \"\n```\n\nI've had this on my systems for a few weeks now and I am constantly using it\nfor my [tils](https://waylonwalker.com/til/),\n[blogs](https://waylonwalker.com/archive), and my .envrc file that goes into\nall of my projects to make sure that I have a virtual environment installed and\nrunning any time I open it.\n\n![this is what it looks like when I open my copier templates popup](https://images.waylonwalker.com/copier-templates-tmux-popup.png)\n",
      "summary": "I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...",
      "date_published": "2022-01-24T02:22:53Z",
      "date_modified": "2022-01-24T02:22:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux",
        "tmux",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markata-telescope-picker/",
      "url": "https://go.waylonwalker.com/markata-telescope-picker/",
      "title": "Markata Filters as Telescope Pickers in Neovim",
      "content_html": "\u003cp\u003eI often pop into my blog from neovim with the intent to look at just a\nsingle series of posts, \u003ccode\u003etil\u003c/code\u003e, \u003ccode\u003egratitude\u003c/code\u003e, or just see todays posts.\n\u003ca href=\"https://markata.dev/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/markata.dev.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/markata.dev.ico\" class=\"has-avatar  has-avatar-before\"\u003eMarkata\u003c/a\u003e has a great way of mapping over posts\nand returning their path that is designe exactly for this use case.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://images.waylonwalker.com/markta-list-todays-posts.png\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://images.waylonwalker.com/markta-list-todays-posts.png\" alt=\"Markata listing out posts from the command line\" class=\"wide glightbox\"/ data-glightbox=\"description: Markata listing out posts from the command line\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTo tie these into a Telescope picker you add the command as the\nfind_command, and comma separate the words of the command, with no\nspaces.  I did also \u003ccode\u003e--sort,date,--reverse\u003c/code\u003e in there so that the newest\nposts are closest to the cursor.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"n\"\u003egeit\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eTelescope\u003c/span\u003e \u003cspan class=\"n\"\u003efind_files\u003c/span\u003e \u003cspan class=\"n\"\u003efind_command\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"nb\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"nb\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"o\"\u003e==\u003c/span\u003e\u003cspan class=\"n\"\u003etoday\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"n\"\u003egeil\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eTelescope\u003c/span\u003e \u003cspan class=\"n\"\u003efind_files\u003c/span\u003e \u003cspan class=\"n\"\u003efind_command\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"nb\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"nb\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003etemplateKey\u003c/span\u003e\u003cspan class=\"o\"\u003e==\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;til\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003esort\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ereverse\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"n\"\u003egeig\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eTelescope\u003c/span\u003e \u003cspan class=\"n\"\u003efind_files\u003c/span\u003e \u003cspan class=\"n\"\u003efind_command\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nb\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"nb\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"nb\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003etemplateKey\u003c/span\u003e\u003cspan class=\"o\"\u003e==\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;gratitude\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003esort\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ereverse\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eNOTE telescope treates each word as a string, do not wrap an extra\nlayer of quotes around your words, it gets messy.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://images.waylonwalker.com/markata-list-telescope-picker.png\" class=\"glightbox-link\"\u003e\u003cimg src=\"https://images.waylonwalker.com/markata-list-telescope-picker.png\" alt=\"using this picker in neovim\" class=\"wide glightbox\"/ data-glightbox=\"description: using this picker in neovim\"\u003e\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI often pop into my blog from neovim with the intent to look at just a\nsingle series of posts, `til`, `gratitude`, or just see todays posts.\n[Markata](https://markata.dev/) has a great way of mapping over posts\nand returning their path that is designe exactly for this use case.\n\n![Markata listing out posts from the command line](https://images.waylonwalker.com/markta-list-todays-posts.png){.wide}\n\nTo tie these into a Telescope picker you add the command as the\nfind_command, and comma separate the words of the command, with no\nspaces.  I did also `--sort,date,--reverse` in there so that the newest\nposts are closest to the cursor.\n\n``` python\nnnoremap geit \u003ccmd\u003eTelescope find_files find_command=markata,list,--map,path,--filter,date==today\u003ccr\u003e\nnnoremap geil \u003ccmd\u003eTelescope find_files find_command=markata,list,--map,path,--filter,templateKey=='til',--sort,date,--reverse\u003ccr\u003e\nnnoremap geig \u003ccmd\u003eTelescope find_files find_command=markata,list,--map,path,--filter,templateKey=='gratitude',--sort,date,--reverse\u003ccr\u003e\n```\n\n\u003e NOTE telescope treates each word as a string, do not wrap an extra\n\u003e layer of quotes around your words, it gets messy.\n\n![using this picker in neovim](https://images.waylonwalker.com/markata-list-telescope-picker.png){.wide}\n",
      "summary": "I often pop into my blog from neovim with the intent to look at just a single series of posts, , , or just see todays posts. Markata has a great way of...",
      "date_published": "2022-01-23T04:52:20Z",
      "date_modified": "2022-01-23T04:52:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "vim",
        "markata"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dynaconf-dynaconf/",
      "url": "https://go.waylonwalker.com/dynaconf-dynaconf/",
      "title": "⭐ dynaconf dynaconf",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/dynaconf/dynaconf\" 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\"\u003edynaconf\u003c/a\u003e, created by \u003ca href=\"https://github.com/dynaconf\" 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\"\u003edynaconf\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eConfiguration Management for Python ⚙\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [dynaconf](https://github.com/dynaconf/dynaconf), created by [dynaconf](https://github.com/dynaconf).\n\nConfiguration Management for Python ⚙\n",
      "summary": "If you're into interesting projects, don't miss out on dynaconf, created by dynaconf.",
      "date_published": "2022-01-22T21:08:16Z",
      "date_modified": "2022-01-22T21:08:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier-tasks/",
      "url": "https://go.waylonwalker.com/copier-tasks/",
      "title": "Copier Tasks | Python templating post run task",
      "content_html": "\u003cp\u003eCopier allows you to run post render tasks, just like cookiecutter. These are\ndefined as a list of \u003ccode\u003etasks\u003c/code\u003e in your \u003ccode\u003ecopier.yml\u003c/code\u003e.  They are simply shell\ncommands to run.\u003c/p\u003e\n\u003cp\u003eThe example I have below runs an \u003ccode\u003eupdate-gratitude\u003c/code\u003e bash script after the\ncopier template has been rendered.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# copier.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003enum\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e128\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_answers_file\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e.gratitude-copier-answers.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_tasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;update-gratitude\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI have put the script in \u003ccode\u003e~/.local/bin\u003c/code\u003e so that I know it’s always on my\n\u003ccode\u003e$PATH\u003c/code\u003e.  It will reach back into the \u003ccode\u003ecopier.yml\u003c/code\u003e and update the default\nnumber.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\u003cspan class=\"c1\"\u003e# ~/.local/bin/update-gratitude\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ecurrent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003eawk \u003cspan class=\"s1\"\u003e\u0026#39;{print $2}\u0026#39;\u003c/span\u003e ~/.copier-templates/gratitude/copier.yml \u003cspan class=\"p\"\u003e|\u003c/span\u003e head -n 1\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003enew\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003eexpr \u003cspan class=\"nv\"\u003e$current\u003c/span\u003e + 1\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$current\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$new\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esed -i \u003cspan class=\"s2\"\u003e\u0026#34;s/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$current\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$new\u003c/span\u003e\u003cspan class=\"s2\"\u003e/g\u0026#34;\u003c/span\u003e ~/.copier-templates/gratitude/copier.yml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nCopier allows you to run post render tasks, just like cookiecutter. These are\ndefined as a list of `tasks` in your `copier.yml`.  They are simply shell\ncommands to run.\n\nThe example I have below runs an `update-gratitude` bash script after the\ncopier template has been rendered.\n\n``` yaml\n# copier.yml\nnum: 128\n_answers_file: .gratitude-copier-answers.yml\n_tasks:\n  - \"update-gratitude\"\n```\n\nI have put the script in `~/.local/bin` so that I know it's always on my\n`$PATH`.  It will reach back into the `copier.yml` and update the default\nnumber.\n\n``` bash\n#!/bin/bash\n# ~/.local/bin/update-gratitude\ncurrent=`awk '{print $2}' ~/.copier-templates/gratitude/copier.yml | head -n 1`\nnew=`expr $current + 1`\necho $current\necho $new\nsed -i \"s/$current/$new/g\" ~/.copier-templates/gratitude/copier.yml\n```\n",
      "summary": "Copier allows you to run post render tasks, just like cookiecutter. These are defined as a list of in your . They are simply shell commands to run.",
      "date_published": "2022-01-22T04:49:12Z",
      "date_modified": "2022-01-22T04:49:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli",
        "linux",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gradual-typing-python/",
      "url": "https://go.waylonwalker.com/gradual-typing-python/",
      "title": "Gradual Typing in Python",
      "content_html": "\u003cp\u003eI’ve referenced a video from Anthony Sotile in passing conversation several\ntimes.  Walking through his gradual typing process has really helped me\nunderstand typing better, and has helped me make some projects better over time\nrather than getting slammed with typing errors.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://youtu.be/Rk-Y71P_9KE\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/youtu.be.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/youtu.be.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://youtu.be/Rk-Y71P_9KE\u003c/a\u003e\u003c/p\u003e\n\u003ch1 id=\"step-1\"\u003eStep 1\u003c/h1\u003e\n\u003cp\u003eRun Mypy as is, don’t get fancy yet.  This will not reach into any functions\nunless they are alreay explicitly typed.  It will not enforce you to type them\neither.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install mypy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emypy .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or your specific project to avoid .venvs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emypy src\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or a single file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emypy my-script.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"step-2\"\u003eStep 2 \u003ca href=\"#step-2\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eNext we will add \u003ccode\u003echeck-untyped-defs\u003c/code\u003e, this will start checking inside\nfunctions that are not typed.  To add this to your config create a\n\u003ccode\u003esetup.cfg\u003c/code\u003e with the following.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003emypy\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003echeck_untyped_defs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"step-3\"\u003eStep 3 \u003ca href=\"#step-3\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe final stage to this series is to add \u003ccode\u003edisallow_untyped_defs\u003c/code\u003e.  This will\nstart requiring all of your functions to be type hinted.  This one is probably\nthe toughest, because as you type functions mypy can uncover more issues for\nyou to fix.  Often times the list of errors grows before it shrinks.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003emypy\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003echeck_untyped_defs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edisallow_untyped_defs\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nx\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"anthonys-video\"\u003eAnthony’s video \u003ca href=\"#anthonys-video\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMake sure that you watch Anthony’s video, give him a sub, he deserves it\nfor all the great things he is doing for the python community.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=Rk-Y71P_9KE\" 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\"\u003ehttps://www.youtube.com/watch?v=Rk-Y71P_9KE\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI've referenced a video from Anthony Sotile in passing conversation several\ntimes.  Walking through his gradual typing process has really helped me\nunderstand typing better, and has helped me make some projects better over time\nrather than getting slammed with typing errors.\n\nhttps://youtu.be/Rk-Y71P_9KE\n\n# Step 1\n\nRun Mypy as is, don't get fancy yet.  This will not reach into any functions\nunless they are alreay explicitly typed.  It will not enforce you to type them\neither.\n\n``` bash\npip install mypy\nmypy .\n# or your specific project to avoid .venvs\nmypy src\n# or a single file\nmypy my-script.py\n```\n\n## Step 2\n\nNext we will add `check-untyped-defs`, this will start checking inside\nfunctions that are not typed.  To add this to your config create a\n`setup.cfg` with the following.\n\n``` toml\n[mypy]\ncheck_untyped_defs = True\n```\n\n## Step 3\n\nThe final stage to this series is to add `disallow_untyped_defs`.  This will\nstart requiring all of your functions to be type hinted.  This one is probably\nthe toughest, because as you type functions mypy can uncover more issues for\nyou to fix.  Often times the list of errors grows before it shrinks.\n\n``` toml\n[mypy]\ncheck_untyped_defs = True\ndisallow_untyped_defs = True\n```\n\n## Anthony's video\n\nMake sure that you watch Anthony's video, give him a sub, he deserves it\nfor all the great things he is doing for the python community.\n\nhttps://www.youtube.com/watch?v=Rk-Y71P_9KE\n",
      "summary": "I've referenced a video from Anthony Sotile in passing conversation several times. Walking through his gradual typing process has really helped me understand...",
      "date_published": "2022-01-21T14:27:32Z",
      "date_modified": "2022-01-21T14:27:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-reverse-sluggify/",
      "url": "https://go.waylonwalker.com/python-reverse-sluggify/",
      "title": "Python Reverse Sluggify",
      "content_html": "\u003cp\u003eIn order to make an auto title plugin for markata I needed to come up\nwith a way to reverse the slug of a post to create a title for one that\ndoes not explicitly have a title.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eslugs\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e a slug is generally all lowercase and free of spaces, and is a way to\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003emake website routes (urls)\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eHere I have  a \u003ccode\u003epath\u003c/code\u003e available that gives me the articles path, ex.\n\u003ccode\u003epython-reverse-sluggify.md\u003c/code\u003e.  An easy way to get rid of the file\nextension, is to pass it into pathlib.Path and ask for the stem, which\nreturns \u003ccode\u003epython-reverse-sluggify\u003c/code\u003e.  Then from There I chose to replace\n\u003ccode\u003e-\u003c/code\u003e and \u003ccode\u003e_\u003c/code\u003e with a space.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003earticle\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003earticle\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;path\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;-\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;_\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTo turn this into a markata plugin I put it into a pre_render hook.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003emarkata.hookspec\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ehook_impl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eregister_attr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@hook_impl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@register_attr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;articles\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003epre_render\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003earticle\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003emarkata\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;title==\u0026#34;\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003earticle\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003earticle\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;path\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;-\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ereplace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;_\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIn order to make an auto title plugin for markata I needed to come up\nwith a way to reverse the slug of a post to create a title for one that\ndoes not explicitly have a title.\n\n!!! Note \"slugs\"\n     a slug is generally all lowercase and free of spaces, and is a way to\n     make website routes (urls)\n\nHere I have  a `path` available that gives me the articles path, ex.\n`python-reverse-sluggify.md`.  An easy way to get rid of the file\nextension, is to pass it into pathlib.Path and ask for the stem, which\nreturns `python-reverse-sluggify`.  Then from There I chose to replace\n`-` and `_` with a space.\n\n``` python\narticle[\"title\"] = (\n    Path(article[\"path\"]).stem.replace(\"-\", \" \").replace(\"_\", \" \").title()\n)\n```\n\nTo turn this into a markata plugin I put it into a pre_render hook.\n\n``` python\nfrom pathlib import Path\n\nfrom markata.hookspec import hook_impl, register_attr\n\n\n@hook_impl\n@register_attr(\"articles\")\ndef pre_render(markata) -\u003e None:\n    for article in markata.filter('title==\"\"'):\n        article[\"title\"] = (\n            Path(article[\"path\"]).stem.replace(\"-\", \" \").replace(\"_\", \" \").title()\n        )\n```\n",
      "summary": "In order to make an auto title plugin for markata I needed to come up with a way to reverse the slug of a post to create a title for one that does not...",
      "date_published": "2022-01-20T01:24:43Z",
      "date_modified": "2022-01-20T01:24:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fzf-wallpaper/",
      "url": "https://go.waylonwalker.com/fzf-wallpaper/",
      "title": "fuzzy wallpaper with fzf",
      "content_html": "\u003cp\u003eI really appreciate that in linux anything can be scripted, including\nsetting the wallpaper.  So everytime I disconnect a monitor I can just\nrerun my script and fix my wallpaper without digging deep into the ui\nand fussing through a bunch of settings.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efeh --bg-scale ~/.config/awesome/wallpaper/my_wallpaper.png\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eI set my default wallpaper with \u003ccode\u003efeh\u003c/code\u003e using the command above.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eLeaning in on feh, we can use fzf to pick a wallpaper from a directory\nfull of wallpapers with very few keystrokes.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ealias wallpaper=\u0026#39;ls ~/.config/awesome/wallpaper | fzf --preview=\u0026#34;feh --bg-scale ~/.config/awesome/wallpaper/{}\u0026#34; | xargs -I {} feh --bg-scale ~/.config/awesome/wallpaper/{}\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI have mine alias’d to \u003ccode\u003ewallpaper\u003c/code\u003e so that I can quickly run it from\nmy terminal.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nI really appreciate that in linux anything can be scripted, including\nsetting the wallpaper.  So everytime I disconnect a monitor I can just\nrerun my script and fix my wallpaper without digging deep into the ui\nand fussing through a bunch of settings.\n\n``` bash\nfeh --bg-scale ~/.config/awesome/wallpaper/my_wallpaper.png\n```\n\n\u003e I set my default wallpaper with `feh` using the command above.\n\nLeaning in on feh, we can use fzf to pick a wallpaper from a directory\nfull of wallpapers with very few keystrokes.\n\n```\nalias wallpaper='ls ~/.config/awesome/wallpaper | fzf --preview=\"feh --bg-scale ~/.config/awesome/wallpaper/{}\" | xargs -I {} feh --bg-scale ~/.config/awesome/wallpaper/{}'\n```\n\n\u003e I have mine alias'd to `wallpaper` so that I can quickly run it from\n\u003e my terminal.\n",
      "summary": "I really appreciate that in linux anything can be scripted, including setting the wallpaper. So everytime I disconnect a monitor I can just rerun my script...",
      "date_published": "2022-01-19T01:17:26Z",
      "date_modified": "2022-01-19T01:17:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-docstring-ast/",
      "url": "https://go.waylonwalker.com/python-docstring-ast/",
      "title": "Get Python docstring with ast",
      "content_html": "\u003cp\u003eGetting docstrings from python’s ast is far simpler and more reliable than any\nmethod of regex or brute force searching.  It’s also much less intimidating\nthan I originally thought.\u003c/p\u003e\n\u003ch2 id=\"parsing\"\u003eParsing \u003ca href=\"#parsing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFirst you need to load in some python code as a string, and parse it with\n\u003ccode\u003east.parse\u003c/code\u003e.  This gives you a tree like object, like an \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 dom.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epy_file\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;plugins/auto_publish.py\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eraw_tree\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epy_file\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_text\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etree\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eparse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eraw_tree\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"getting-the-docstring\"\u003eGetting the Docstring \u003ca href=\"#getting-the-docstring\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can then use \u003ccode\u003east.get_docstring\u003c/code\u003e to get the docstring of the node you are\ncurrently looking at.  In the case of freshly loading in a file, this will be\nthe module level doctring that is at the very top of a file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emodule_docstring\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_docstring\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etree\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"walking-for-all-functions\"\u003eWalking for all functions \u003ca href=\"#walking-for-all-functions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo get all of the functions docstrings we can use \u003ccode\u003east.walk\u003c/code\u003e to look for nodes\nthat are an instance of \u003ccode\u003east.FunctionDef\u003c/code\u003e, then run \u003ccode\u003eget_docstring\u003c/code\u003e on those\nnodes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efunctions\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewalk\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etree\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"nb\"\u003eisinstance\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eFunctionDef\u003c/span\u003e\u003cspan class=\"p\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efunction_docs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003east\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eget_docstring\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003efunctions\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003east.walk docs: Recursively yield all descendant nodes in the tree starting at \u003cem\u003enode\u003c/em\u003e\n(including \u003cem\u003enode\u003c/em\u003e itself), in no specified order.  This is useful if you\nonly want to modify nodes in place and don’t care about the context.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"example\"\u003eExample \u003ca href=\"#example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is an image of me running this example through \u003ccode\u003eipython\u003c/code\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/ast-get-docstring.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/ast-get-docstring.png\" alt=\"getting docstrings from the ast in python\"/ data-glightbox=\"description: getting docstrings from the ast in python\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nGetting docstrings from python's ast is far simpler and more reliable than any\nmethod of regex or brute force searching.  It's also much less intimidating\nthan I originally thought.\n\n## Parsing\n\nFirst you need to load in some python code as a string, and parse it with\n`ast.parse`.  This gives you a tree like object, like an html dom.\n\n``` python\npy_file = Path(\"plugins/auto_publish.py\")\nraw_tree = py_file.read_text()\ntree = ast.parse(raw_tree)\n```\n\n## Getting the Docstring\n\nYou can then use `ast.get_docstring` to get the docstring of the node you are\ncurrently looking at.  In the case of freshly loading in a file, this will be\nthe module level doctring that is at the very top of a file.\n\n``` python\nmodule_docstring = ast.get_docstring(tree)\n```\n\n## Walking for all functions\n\nTo get all of the functions docstrings we can use `ast.walk` to look for nodes\nthat are an instance of `ast.FunctionDef`, then run `get_docstring` on those\nnodes.\n\n```python\nfunctions = [f for f in ast.walk(tree) if isinstance(f, ast.FunctionDef)]\nfunction_docs = [ast.get_docstring(f) for f in functions]\n```\n\n\u003e ast.walk docs: Recursively yield all descendant nodes in the tree starting at *node*\n(including *node* itself), in no specified order.  This is useful if you\nonly want to modify nodes in place and don't care about the context.\n\n## Example\n\nHere is an image of me running this example through `ipython`.\n\n![getting docstrings from the ast in python](https://images.waylonwalker.com/ast-get-docstring.png)\n",
      "summary": "Getting docstrings from python's ast is far simpler and more reliable than any method of regex or brute force searching. It's also much less intimidating...",
      "date_published": "2022-01-18T20:13:32Z",
      "date_modified": "2022-01-18T20:13:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gitignore-python/",
      "url": "https://go.waylonwalker.com/gitignore-python/",
      "title": "Python Respect the .gitignore",
      "content_html": "\u003cp\u003eMany tools such as ripgrep respect the \u003ccode\u003e.gitignore\u003c/code\u003e file in the directory\nit’s searching in.  This helps make it incredibly faster and generally\nmore intuitive for the user as it just searches files that are part of\nthier project and not things like their virtual environments, node\nmodules, or compiled builds.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eEditors like vscode often do not include files that are .gitignored in\ntheir search either.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ccode\u003epathspec\u003c/code\u003e is a pattern matching library that implements \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e’s wildmatch\npattern so that you can ignore files included in your \u003ccode\u003e.gitignore\u003c/code\u003e\npatterns.  You might want this to help make your libraries more\nperformant, or more intuitive for you users.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epathspec\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003epathlib\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emarkdown_files\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;**/*.md\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.gitignore\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexists\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elines\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.gitignore\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eread_text\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esplitlines\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003espec\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epathspec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePathSpec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003efrom_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;gitwildmatch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elines\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emarkdown_files\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003emarkdown_files\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003espec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ematch_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003epathspec\u003c/code\u003e \u003ca href=\"https://github.com/cpburnz/python-path-specification\" 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\"\u003ehome page\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nMany tools such as ripgrep respect the `.gitignore` file in the directory\nit's searching in.  This helps make it incredibly faster and generally\nmore intuitive for the user as it just searches files that are part of\nthier project and not things like their virtual environments, node\nmodules, or compiled builds.\n\n\u003e Editors like vscode often do not include files that are .gitignored in\n\u003e their search either.\n\n`pathspec` is a pattern matching library that implements git's wildmatch\npattern so that you can ignore files included in your `.gitignore`\npatterns.  You might want this to help make your libraries more\nperformant, or more intuitive for you users.\n\n```python\nimport pathspec\nfrom pathlib import Path\n\nmarkdown_files = Path().glob('**/*.md')\nif (Path(\".gitignore\").exists():\n    lines = Path(\".gitignore\").read_text().splitlines()\n\n    spec = pathspec.PathSpec.from_lines(\"gitwildmatch\", lines)\n\n    markdown_files = [\n        file for file in markdown_files if not spec.match_file(str(file))\n    ]\n```\n\n`pathspec` [home page](https://github.com/cpburnz/python-path-specification)\n",
      "summary": "Many tools such as ripgrep respect the file in the directory it's searching in. This helps make it incredibly faster and generally more intuitive for the...",
      "date_published": "2022-01-17T15:16:33Z",
      "date_modified": "2022-01-17T15:16:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-rename-python/",
      "url": "https://go.waylonwalker.com/nvim-rename-python/",
      "title": "Rename Python Variables with nvim",
      "content_html": "\u003cp\u003eI don’t use refactoring tools as much as I probably should.  mostly\nbecause I work with small functions with unique names, but I recently\nhad a case where a variable name \u003ccode\u003em\u003c/code\u003e was everywhere and I wanted it\nnamed better.  This was not possible with find and replace, because\nthere were other \u003ccode\u003em\u003c/code\u003e’s in this region.\u003c/p\u003e\n\u003cp\u003eI first tried the nvim lsp rename, and it failed, Then I pip installed\nrope, a refactoring tool for python, and it just worked!\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install rope\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOnce you have rope installed you can call rename on the variable.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003elua\u003c/span\u003e \u003cspan class=\"nx\"\u003evim\u003c/span\u003e.\u003cspan class=\"nx\"\u003elsp\u003c/span\u003e.\u003cspan class=\"nx\"\u003ebuf\u003c/span\u003e.\u003cspan class=\"nx\"\u003erename\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI don't use refactoring tools as much as I probably should.  mostly\nbecause I work with small functions with unique names, but I recently\nhad a case where a variable name `m` was everywhere and I wanted it\nnamed better.  This was not possible with find and replace, because\nthere were other `m`'s in this region.\n\n\nI first tried the nvim lsp rename, and it failed, Then I pip installed\nrope, a refactoring tool for python, and it just worked!\n\n```bash\npip install rope\n```\n\nOnce you have rope installed you can call rename on the variable.\n\n```vim\n:lua vim.lsp.buf.rename()\n```\n",
      "summary": "I don't use refactoring tools as much as I probably should. mostly because I work with small functions with unique names, but I recently had a case where a...",
      "date_published": "2022-01-16T15:27:22Z",
      "date_modified": "2022-01-16T15:27:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "vim",
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-find-available-port/",
      "url": "https://go.waylonwalker.com/python-find-available-port/",
      "title": "Python Find Available Port",
      "content_html": "\u003cp\u003eWhen running a python process that requires a port it’s handy if there is an\noption for it to just run on the next avaialble port.  To do this we can use\nthe socket module to determine if the port is in use or not before starting our\nprocess.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esocket\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003efind_port\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e8000\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;Find a port not in ues starting at given port\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003esocket\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esocket\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esocket\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eAF_INET\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esocket\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSOCK_STREAM\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econnect_ex\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;localhost\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003efind_port\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eport\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nWhen running a python process that requires a port it's handy if there is an\noption for it to just run on the next avaialble port.  To do this we can use\nthe socket module to determine if the port is in use or not before starting our\nprocess.\n\n``` python\nimport socket\n\ndef find_port(port=8000):\n    \"\"\"Find a port not in ues starting at given port\"\"\"\n    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:\n        if s.connect_ex((\"localhost\", port)) == 0:\n            return find_port(port=port + 1)\n        else:\n            return port\n```\n",
      "summary": "When running a python process that requires a port it's handy if there is an option for it to just run on the next avaialble port. To do this we can use the...",
      "date_published": "2022-01-15T23:47:27Z",
      "date_modified": "2022-01-15T23:47:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/alanwsmith-neovim-grimoire/",
      "url": "https://go.waylonwalker.com/alanwsmith-neovim-grimoire/",
      "title": "⭐ alanwsmith neovim-grimoire",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/alanwsmith/neovim-grimoire\" 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\"\u003eneovim-grimoire\u003c/a\u003e by \u003ca href=\"https://github.com/alanwsmith\" 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\"\u003ealanwsmith\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [neovim-grimoire](https://github.com/alanwsmith/neovim-grimoire) by [alanwsmith](https://github.com/alanwsmith). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out neovim-grimoire by alanwsmith. It's a well-crafted project with great potential.",
      "date_published": "2022-01-15T01:08:20Z",
      "date_modified": "2022-01-15T01:08:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-functools-total-ordering/",
      "url": "https://go.waylonwalker.com/python-functools-total-ordering/",
      "title": "python functools total ordering",
      "content_html": "\u003cp\u003efunctools.total_ordering makes adding all of six of the rich comparison\noperators to your custom classes much easier, and more likely that you\nremember all of them.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFrom the Docs: The class must define one of __lt__(), __le__(),\n__gt__(), or __ge__ In addition, the class should supply an\n__eq__() method.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eone of these\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003elt\u003c/strong\u003e()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ele\u003c/strong\u003e()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egt\u003c/strong\u003e()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ege\u003c/strong\u003e()\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eand required to have this one\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eeq\u003c/strong\u003e()\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://docs.python.org/3/library/functools.html#functools.total_ordering\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.python.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.python.org.ico\" class=\"has-avatar  has-avatar-before\"\u003eTotal Ordering Docs\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eHere is an example using the Enum I was working on the other day.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eenum\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003efunctools\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003etotal_ordering\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nd\"\u003e@total_ordering\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eLifeCycle\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003econfigure\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eglob\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eload\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epre_render\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erender\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epost_render\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__lt__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eAttributeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__eq__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eAttributeError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003eother\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nfunctools.total_ordering makes adding all of six of the rich comparison\noperators to your custom classes much easier, and more likely that you\nremember all of them.\n\n\u003e From the Docs: The class must define one of \\_\\_lt\\_\\_(), \\_\\_le\\_\\_(),\n\u003e \\_\\_gt\\_\\_(), or \\_\\_ge\\_\\_ In addition, the class should supply an\n\u003e \\_\\_eq\\_\\_() method.\n\none of these\n\n* __lt__()\n* __le__()\n* __gt__()\n* __ge__()\n\nand required to have this one\n\n* __eq__()\n\n[Total Ordering Docs](https://docs.python.org/3/library/functools.html#functools.total_ordering)\n\nHere is an example using the Enum I was working on the other day.\n\n``` python\nfrom enum import Enum, auto\nfrom functools import total_ordering\n\n\n@total_ordering\nclass LifeCycle(Enum):\n\n    configure = auto()\n    glob = auto()\n    load = auto()\n    pre_render = auto()\n    render = auto()\n    post_render = auto()\n    save = auto()\n\n    def __lt__(self, other):\n        try:\n            return self.value \u003c other.value\n        except AttributeError:\n            return self.value \u003c other\n\n    def __eq__(self, other):\n        try:\n            return self.value == other.value\n        except AttributeError:\n            return self.value == other\n\n```\n",
      "summary": "functools.total_ordering makes adding all of six of the rich comparison operators to your custom classes much easier, and more likely that you remember all...",
      "date_published": "2022-01-14T23:43:42Z",
      "date_modified": "2022-01-14T23:43:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ipython-ipython/",
      "url": "https://go.waylonwalker.com/ipython-ipython/",
      "title": "⭐ ipython ipython",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ipython\" 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\"\u003eipython\u003c/a\u003e and their project \u003ca href=\"https://github.com/ipython/ipython\" 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\"\u003eipython\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eOfficial repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.\u003c/p\u003e\n",
      "content_text": "\nCheck out [ipython](https://github.com/ipython) and their project [ipython](https://github.com/ipython/ipython).\n\nOfficial repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.\n",
      "summary": "Check out ipython and their project ipython.",
      "date_published": "2022-01-14T01:53:53Z",
      "date_modified": "2022-01-14T01:53:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-auto-pdb/",
      "url": "https://go.waylonwalker.com/python-auto-pdb/",
      "title": "Implement --pdb in a python cli",
      "content_html": "\u003cp\u003eAdding a \u003ccode\u003e--pdb\u003c/code\u003e flag to your applications can make them much easier for\nthose using it to debug your application, especially if your applicatoin\nis a cli application where the user has much fewer options to start this\nfor themselves.  To add a pdb flag \u003ccode\u003e--pdb\u003c/code\u003e to your applications you will\nneed to wrap your function call in a try/except, and start a post_mortem\ndebugger. I give credit to\n\u003ca href=\"https://stackoverflow.com/questions/242485/starting-python-debugger-automatically-on-error\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/stackoverflow.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/stackoverflow.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ethis stack overflow post\u003c/a\u003e\nfor helping me figure this out.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epdb\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nn\"\u003etraceback\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nn\"\u003esys\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003ebombs\u003c/span\u003e\u003cspan class=\"p\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;--pdb\u0026#34;\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003ebombs\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eextype\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexc_info\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003etraceback\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint_exc\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003epdb\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epost_mortem\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etb\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ebombs\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using---pdb\"\u003eUsing –pdb \u003ca href=\"#using---pdb\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epython\u003c/span\u003e \u003cspan class=\"n\"\u003eyourfile\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003epdb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/using-pdb-flag-from-cli.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/using-pdb-flag-from-cli.png\" alt=\"running this example with and without –pdb flag\"/ data-glightbox=\"description: running this example with and without –pdb flag\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nAdding a `--pdb` flag to your applications can make them much easier for\nthose using it to debug your application, especially if your applicatoin\nis a cli application where the user has much fewer options to start this\nfor themselves.  To add a pdb flag `--pdb` to your applications you will\nneed to wrap your function call in a try/except, and start a post_mortem\ndebugger. I give credit to\n[this stack overflow post](https://stackoverflow.com/questions/242485/starting-python-debugger-automatically-on-error)\nfor helping me figure this out.\n\n``` python\nimport pdb, traceback, sys\n\n\ndef bombs():\n    a = []\n    print(a[0])\n\n\nif __name__ == \"__main__\":\n    if \"--pdb\" in sys.argv:\n        try:\n            bombs()\n        except:\n            extype, value, tb = sys.exc_info()\n            traceback.print_exc()\n            pdb.post_mortem(tb)\n    else:\n        bombs()\n```\n\n## Using --pdb\n\n``` python\npython yourfile.py --pdb\n```\n\n![running this example with and without --pdb flag](https://images.waylonwalker.com/using-pdb-flag-from-cli.png)\n",
      "summary": "Adding a flag to your applications can make them much easier for those using it to debug your application, especially if your applicatoin is a cli...",
      "date_published": "2022-01-13T00:09:20Z",
      "date_modified": "2022-01-13T00:09:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/convert-markdown-pdf-linux/",
      "url": "https://go.waylonwalker.com/convert-markdown-pdf-linux/",
      "title": "Converting markdown to pdf with pandoc on linux",
      "content_html": "\u003cp\u003eConverting markdown posts to pdf on ubuntu takes a few packages from the\nstandard repos.  I had to go through a few stack overflow posts, and\nnothing seemed to have all the fonts and packages that I needed to\nconvert markdown, but this is what ended up working for me.\u003c/p\u003e\n\u003ch2 id=\"installing-all-the-packages\"\u003eInstalling all the packages \u003ca href=\"#installing-all-the-packages\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  pandoc \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  texlive-latex-base \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  texlive-fonts-recommended \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  texlive-extra-utils \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  texlive-latex-extra \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  texlive-xetex\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-pandoc-to-convert-markdown-to-a-pdf\"\u003eUsing pandoc to convert markdown to a pdf \u003ca href=\"#using-pandoc-to-convert-markdown-to-a-pdf\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# older versions of pandoc, I needed this one on ubuntu 18.04\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e \u003cspan class=\"n\"\u003epages\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etil\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003econvert\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003elinux\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003econvert\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003elatex\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eengine\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003exelatex\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# newer versions of pandoc, I needed this one on ubuntu 21.04\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e \u003cspan class=\"n\"\u003epages\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etil\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003econvert\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003elinux\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emd\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003econvert\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003epdf\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eengine\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003exelatex\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/convert-markdown-pdf-linux-result.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/convert-markdown-pdf-linux-result.png\" alt=\"results of converting this post to a pdf\"/ data-glightbox=\"description: results of converting this post to a pdf\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHere is an image of what converting this article over to a pdf looks\nlike.  The raw markdown is\n\u003ca href=\"https://waylonwalker.com/convert-markdown-pdf-linux.md\" title=\"a link to the raw markdown of this post\" 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\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nConverting markdown posts to pdf on ubuntu takes a few packages from the\nstandard repos.  I had to go through a few stack overflow posts, and\nnothing seemed to have all the fonts and packages that I needed to\nconvert markdown, but this is what ended up working for me.\n\n## Installing all the packages\n\n``` bash\nsudo apt install \\\n  pandoc \\\n  texlive-latex-base \\\n  texlive-fonts-recommended \\\n  texlive-extra-utils \\\n  texlive-latex-extra \\\n  texlive-xetex\n```\n\n## Using pandoc to convert markdown to a pdf\n\n``` python\n# older versions of pandoc, I needed this one on ubuntu 18.04\npandoc pages/til/convert-markdown-pdf-linux.md -o convert-markdown-pdf.pdf --latex-engine=xelatex\n# newer versions of pandoc, I needed this one on ubuntu 21.04\npandoc pages/til/convert-markdown-pdf-linux.md -o convert-markdown-pdf.pdf --pdf-engine=xelatex\n```\n\n![results of converting this post to a pdf](https://images.waylonwalker.com/convert-markdown-pdf-linux-result.png)\n\n\u003e Here is an image of what converting this article over to a pdf looks\n\u003e like.  The raw markdown is\n\u003e [here](https://waylonwalker.com/convert-markdown-pdf-linux.md \"a link to the raw markdown of this post\").\n",
      "summary": "Converting markdown posts to pdf on ubuntu takes a few packages from the standard repos. I had to go through a few stack overflow posts, and nothing seemed...",
      "date_published": "2022-01-12T03:25:36Z",
      "date_modified": "2022-01-12T03:25:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "blog",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-enum/",
      "url": "https://go.waylonwalker.com/python-enum/",
      "title": "Python Enum",
      "content_html": "\u003cp\u003ePython comes with an enum module for creating enums.  You can make your\nown enum by inheriting importing and inheriting from Enum.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efrom enum import Enum\n\n\nclass LifeCycle(Enum):\n    configure = 1\n    glob = 2\n    pre_render = 3\n    render = 4\n    post_render = 5\n    save = 6\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"auto-incrementing\"\u003eauto incrementing \u003ca href=\"#auto-incrementing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEnum values can be auto incremented by importing auto, and calling\n\u003ccode\u003eauto()\u003c/code\u003e as their value.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eenum\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eLifeCycle\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003econfigure\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eglob\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epre_render\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erender\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epost_render\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-the-enum\"\u003eusing the enum \u003ca href=\"#using-the-enum\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEnum’s are accessed directy under the class itself, and have primarily\ntwo methods underneath each thing you make, \u003ccode\u003e.name\u003c/code\u003e and \u003ccode\u003e.value\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLifecycle\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLifecycle\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLifecycle\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eglob\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/using-lifecycle-enum.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/using-lifecycle-enum.png\" alt=\"using the Lifecycle Enum\"/ data-glightbox=\"description: using the Lifecycle Enum\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nPython comes with an enum module for creating enums.  You can make your\nown enum by inheriting importing and inheriting from Enum.\n\n```\nfrom enum import Enum\n\n\nclass LifeCycle(Enum):\n    configure = 1\n    glob = 2\n    pre_render = 3\n    render = 4\n    post_render = 5\n    save = 6\n```\n\n## auto incrementing\n\nEnum values can be auto incremented by importing auto, and calling\n`auto()` as their value.\n\n``` python\nfrom enum import Enum, auto\n\n\nclass LifeCycle(Enum):\n    configure = auto()\n    glob = auto()\n    pre_render = auto()\n    render = auto()\n    post_render = auto()\n    save = auto()\n```\n\n## using the enum\n\nEnum's are accessed directy under the class itself, and have primarily\ntwo methods underneath each thing you make, `.name` and `.value`.\n\n``` python\nLifecycle.glob\nLifecycle.glob.value\nLifecycle.glob.name\n```\n\n![using the Lifecycle Enum](https://images.waylonwalker.com/using-lifecycle-enum.png)\n",
      "summary": "Python comes with an enum module for creating enums. You can make your own enum by inheriting importing and inheriting from Enum.",
      "date_published": "2022-01-11T15:03:34Z",
      "date_modified": "2022-01-11T15:03:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/installing-pipx-on-ubuntu/",
      "url": "https://go.waylonwalker.com/installing-pipx-on-ubuntu/",
      "title": "Installing Pipx on Ubuntu",
      "content_html": "\u003cp\u003eI recently paired up with another dev running windows with Ubuntu running in\nwsl, and we had a bit of a stuggle to get our project off the ground because\nthey were missing com system dependencies to get going.\u003c/p\u003e\n\u003ch2 id=\"straight-in-the-terminal\"\u003eStraight in the terminal \u003ca href=\"#straight-in-the-terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOpen up a terminal and get your required system dependencies using the apt\npackage manager and the standard ubuntu repos.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt upgrade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e      python3-dev \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e      python3-pip \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e      python3-venv \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e      python3-virtualenv\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install pipx\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-an-ansible-playbook\"\u003eUsing an Ansible-Playbook \u003ca href=\"#using-an-ansible-playbook\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI like running things like this through an ansible-playbook as it give me some\nextra control and repeatability next time I have a new machine to setup.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ehosts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003elocalhost\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003egather_facts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;USER\u0026#39;) }}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epre_tasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupdate repositories\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eapt\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eupdate_cache=yes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eroot\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003echanged_when\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003evars\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{ ansible_user_id }}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etasks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eInstall System Packages 1 (terminal)\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ebecome_user\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eroot\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eapt\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003ebuild-essential\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003epython3-dev\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003epython3-pip\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003epython3-venv\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003epython3-virtualenv\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck is pipx installed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecommand -v pipx\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epipx_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epipx\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epipx_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003epip\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epipx\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"l\"\u003epipx\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"video-clip\"\u003evideo clip \u003ca href=\"#video-clip\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a clip of me getting pipx running on ubuntu 21.10, and running a few of\nmy favorite pipx commands.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/pipx-install-ubuntu.gif\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/pipx-install-ubuntu.gif\" alt=\"installation video\"/ data-glightbox=\"description: installation video\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nI recently paired up with another dev running windows with Ubuntu running in\nwsl, and we had a bit of a stuggle to get our project off the ground because\nthey were missing com system dependencies to get going.\n\n## Straight in the terminal\n\nOpen up a terminal and get your required system dependencies using the apt\npackage manager and the standard ubuntu repos.\n\n``` bash\nsudo apt update\nsudo apt upgrade\nsudo apt install \\\n      python3-dev \\\n      python3-pip \\\n      python3-venv \\\n      python3-virtualenv\npip install pipx\n```\n\n## Using an Ansible-Playbook\n\nI like running things like this through an ansible-playbook as it give me some\nextra control and repeatability next time I have a new machine to setup.\n\n``` yaml\n- hosts: localhost\n  gather_facts: true\n  become: true\n  become_user: \"{{ lookup('env', 'USER') }}\"\n\n  pre_tasks:\n    - name: update repositories\n      apt: update_cache=yes\n      become_user: root\n      changed_when: False\n  vars:\n    user: \"{{ ansible_user_id }}\"\n  tasks:\n    - name: Install System Packages 1 (terminal)\n      become_user: root\n      apt:\n        name:\n          - build-essential\n          - python3-dev\n          - python3-pip\n          - python3-venv\n          - python3-virtualenv\n    - name: check is pipx installed\n      shell: command -v pipx\n      register: pipx_exists\n      ignore_errors: yes\n\n    - name: pipx\n      when: pipx_exists is failed\n      pip:\n        name: pipx\n      tags:\n        - pipx\n```\n\n## video clip\n\nHere is a clip of me getting pipx running on ubuntu 21.10, and running a few of\nmy favorite pipx commands.\n\n![installation video](https://images.waylonwalker.com/pipx-install-ubuntu.gif)\n",
      "summary": "I recently paired up with another dev running windows with Ubuntu running in wsl, and we had a bit of a stuggle to get our project off the ground because...",
      "date_published": "2022-01-10T23:14:05Z",
      "date_modified": "2022-01-10T23:14:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/2-minutes-to-stow/",
      "url": "https://go.waylonwalker.com/2-minutes-to-stow/",
      "title": "2 minutes to stow",
      "content_html": "\u003cp\u003eStow is an incredible way to manage your dotfiles.  It works by managing\nsymlinks between your dotfiles directory and the rest of the system.  You can\nthen make your dotfiles directory a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo and have it version controlled.  In\nmy honest opinion, when I was trying to get started the docs straight into deep\ndetail of things I frankly don’t really care about and jumped right over how to\nuse it.\u003c/p\u003e\n\u003cp\u003eWhen using stow its easiest to keep your dotfiles directory (you may name it\nwhat you want) in your home directory, with application directories inside of\nit.\u003c/p\u003e\n\u003cp\u003eThen each application directory should reflet the same diretory structure as you\nwant in your home directory.\u003c/p\u003e\n\u003ch2 id=\"zsh\"\u003ezsh \u003ca href=\"#zsh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a simple example with my zshrc.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir zsh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.zshrc zsh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow --simulate zsh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can pass in the –simulate if you wish, it will tell you if there are going\nto be any more errors or not, but it wont give much more than that.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eWARNING: in simulation mode so not modifying filesystem.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOnce your ready you can stow your zsh application.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003estow zsh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"nvim\"\u003envim \u003ca href=\"#nvim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA slightly more complicated example is neovim since its diretory structure does\nnot put configuration files directly in your home directory, but rather at a\ndeeper level.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir ~/dotfiles/nvim/.config/nvim/ -p\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/dotfiles\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.config/nvim/ ~/dotfiles/nvim/.config/nvim/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow zsh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003e!notice how the nvim directory inside of dotfiles is structured like it would\nbe in your $HOME directory.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nStow is an incredible way to manage your dotfiles.  It works by managing\nsymlinks between your dotfiles directory and the rest of the system.  You can\nthen make your dotfiles directory a git repo and have it version controlled.  In\nmy honest opinion, when I was trying to get started the docs straight into deep\ndetail of things I frankly don't really care about and jumped right over how to\nuse it.\n\nWhen using stow its easiest to keep your dotfiles directory (you may name it\nwhat you want) in your home directory, with application directories inside of\nit.\n\nThen each application directory should reflet the same diretory structure as you\nwant in your home directory.\n\n## zsh\n\nHere is a simple example with my zshrc.\n\n``` bash\nmkdir ~/dotfiles\ncd ~/dotfiles\nmkdir zsh\nmv ~/.zshrc zsh\nstow --simulate zsh\n```\n\nYou can pass in the --simulate if you wish, it will tell you if there are going\nto be any more errors or not, but it wont give much more than that.\n\n```\nWARNING: in simulation mode so not modifying filesystem.\n```\n\nOnce your ready you can stow your zsh application.\n\n```\nstow zsh\n```\n\n## nvim\n\nA slightly more complicated example is neovim since its diretory structure does\nnot put configuration files directly in your home directory, but rather at a\ndeeper level.\n\n``` bash\nmkdir ~/dotfiles/nvim/.config/nvim/ -p\ncd ~/dotfiles\nmv ~/.config/nvim/ ~/dotfiles/nvim/.config/nvim/\nstow zsh\n```\n\n\u003e !notice how the nvim directory inside of dotfiles is structured like it would\n\u003e be in your $HOME directory.\n",
      "summary": "Stow is an incredible way to manage your dotfiles. It works by managing symlinks between your dotfiles directory and the rest of the system. You can then...",
      "date_published": "2022-01-09T00:33:58Z",
      "date_modified": "2022-01-09T00:33:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "cli",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sharkdp-pastel/",
      "url": "https://go.waylonwalker.com/sharkdp-pastel/",
      "title": "⭐ sharkdp pastel",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/sharkdp\" 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\"\u003esharkdp\u003c/a\u003e and their project \u003ca href=\"https://github.com/sharkdp/pastel\" 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\"\u003epastel\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA command-line tool to generate, analyze, convert and manipulate colors\u003c/p\u003e\n",
      "content_text": "\nCheck out [sharkdp](https://github.com/sharkdp) and their project [pastel](https://github.com/sharkdp/pastel).\n\nA command-line tool to generate, analyze, convert and manipulate colors\n",
      "summary": "Check out sharkdp and their project pastel.",
      "date_published": "2022-01-08T04:11:41Z",
      "date_modified": "2022-01-08T04:11:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asdf-vm-asdf/",
      "url": "https://go.waylonwalker.com/asdf-vm-asdf/",
      "title": "⭐ asdf-vm asdf",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/asdf-vm/asdf\" 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\"\u003easdf\u003c/a\u003e, created by \u003ca href=\"https://github.com/asdf-vm\" 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\"\u003easdf-vm\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eExtendable version manager with support for Ruby, Node.js, Elixir, Erlang \u0026amp; more\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [asdf](https://github.com/asdf-vm/asdf), created by [asdf-vm](https://github.com/asdf-vm).\n\nExtendable version manager with support for Ruby, Node.js, Elixir, Erlang \u0026 more\n",
      "summary": "If you're into interesting projects, don't miss out on asdf, created by asdf-vm.",
      "date_published": "2022-01-08T04:01:31Z",
      "date_modified": "2022-01-08T04:01:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier-answers/",
      "url": "https://go.waylonwalker.com/copier-answers/",
      "title": "Using Copier Answers to rerun templates quickly",
      "content_html": "\u003cp\u003eThe copier answers file is a key component to making your templates\nre-runnable.  Let’s look at the example for my setup.py.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ tree ~/.copier-templates/setup.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/home/walkers/.copier-templates/setup.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── \u003cspan class=\"o\"\u003e[[\u003c/span\u003e _copier_conf.answers_file \u003cspan class=\"o\"\u003e]]\u003c/span\u003e.tmpl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── copier.yml\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e├── setup.cfg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── setup.py.tmpl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e directories, \u003cspan class=\"m\"\u003e4\u003c/span\u003e files\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInside of my \u003ccode\u003e[[ _copier_conf.answers_file ]].tmpl\u003c/code\u003e file is this, a\nmessage not to muck around with it, and the ansers in yaml form.  The\nfirst line is just a helper for the blog post.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ~/.copier-templates/setup.py/\\[\\[\\ _copier_conf.answers_file\\ \\]\\].tmpl\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"l\"\u003e_copier_answers|to_nice_yaml]]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInside my copier.yml I have setup my _answers_file to point to a special\nfile.  This is because this is not a whole projet template, but one just\nfor a single file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# copier.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# ...\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_answers_file\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e.setup-py-copier-answers.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003eOnce I change the _answers_file I was incredibly stuck\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"run-it\"\u003eRun it \u003ca href=\"#run-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI’m making a library of personal copier templates in my\n\u003ccode\u003e~/.copier-templates\u003c/code\u003e directory and I am going to run it from there.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopier copy ~/.copier-templates/setup.py\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"results\"\u003eResults \u003ca href=\"#results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAfter rendering the template we have the following content in our\n\u003ccode\u003e.setup.setup-py-copier-answers.yml\u003c/code\u003e file.  This will allow us to update\nquick if we ever change our template.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# .setup-py-copier-answers.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_src_path\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e/home/walkers/.copier-templates/setup.py\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eauthor_github\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ewaylonwalker\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eauthor_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eWaylon Walker\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edescription\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eawesomeness\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eframework\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ekeywords\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003epackage_name\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy-package\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"update-it\"\u003eUpdate it \u003ca href=\"#update-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis is where I was most stuck, primarily becuase \u003ccode\u003e-a \u0026lt;answers_file\u0026gt;\u003c/code\u003e\nmust come exactly after the base command \u003ccode\u003ecopier\u003c/code\u003e.  This felt a bit odd\nto and not where I expected it so it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopier -a .setup-py-copier-answers.yml update\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"stop-asking-all-these-damn-questions\"\u003eStop asking all these damn questions \u003ca href=\"#stop-asking-all-these-damn-questions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSo the defaults are now changed to our previous results, but it keeps\nasking for them.  To stop asking we can simply add a \u003ccode\u003e-f\u003c/code\u003e flag.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopier -fa .setup-py-copier-answers.yml update\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThe copier answers file is a key component to making your templates\nre-runnable.  Let's look at the example for my setup.py.\n\n``` bash\n❯ tree ~/.copier-templates/setup.py\n/home/walkers/.copier-templates/setup.py\n├── [[ _copier_conf.answers_file ]].tmpl\n├── copier.yml\n├── setup.cfg\n└── setup.py.tmpl\n\n0 directories, 4 files\n```\n\nInside of my `[[ _copier_conf.answers_file ]].tmpl` file is this, a\nmessage not to muck around with it, and the ansers in yaml form.  The\nfirst line is just a helper for the blog post.\n\n``` yaml\n# ~/.copier-templates/setup.py/\\[\\[\\ _copier_conf.answers_file\\ \\]\\].tmpl\n# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY\n[[_copier_answers|to_nice_yaml]]\n```\n\nInside my copier.yml I have setup my _answers_file to point to a special\nfile.  This is because this is not a whole projet template, but one just\nfor a single file.\n\n``` yaml\n# copier.yml\n# ...\n_answers_file: .setup-py-copier-answers.yml\n```\n\n\u003e Once I change the _answers_file I was incredibly stuck\n\n## Run it\n\nI'm making a library of personal copier templates in my\n`~/.copier-templates` directory and I am going to run it from there.\n\n``` bash\ncopier copy ~/.copier-templates/setup.py\n```\n\n## Results\n\nAfter rendering the template we have the following content in our\n`.setup.setup-py-copier-answers.yml` file.  This will allow us to update\nquick if we ever change our template.\n\n``` yaml\n# .setup-py-copier-answers.yml\n# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY\n_src_path: /home/walkers/.copier-templates/setup.py\nauthor_github: waylonwalker\nauthor_name: Waylon Walker\ndescription: awesomeness\nframework: null\nkeywords: null\npackage_name: my-package\n```\n\n## Update it\n\nThis is where I was most stuck, primarily becuase `-a \u003canswers_file\u003e`\nmust come exactly after the base command `copier`.  This felt a bit odd\nto and not where I expected it so it.\n\n``` bash\ncopier -a .setup-py-copier-answers.yml update\n```\n\n## Stop asking all these damn questions\n\nSo the defaults are now changed to our previous results, but it keeps\nasking for them.  To stop asking we can simply add a `-f` flag.\n\n``` bash\ncopier -fa .setup-py-copier-answers.yml update\n```\n",
      "summary": "The copier answers file is a key component to making your templates re-runnable. Let's look at the example for my setup.py.",
      "date_published": "2022-01-08T01:16:52Z",
      "date_modified": "2022-01-08T01:16:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux",
        "cli",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/simple-textual-widget/",
      "url": "https://go.waylonwalker.com/simple-textual-widget/",
      "title": "Making a Textual Widget from a Rich Renderable",
      "content_html": "\u003cp\u003eOnce you have made your sick looking cli apps with rich, eventually you are\ngoing to want to add some keybindings to them.  Currently Textual, also written\nby \u003ca href=\"https://twitter.com/willmcgugan\"\u003e@willmcgugan\u003c/a\u003e, does this extremely well.\nFair Warning it is in super beta mode and expected to change a bunch.  So take\nit easy with hopping on the train so fast.\u003c/p\u003e\n\u003ch2 id=\"get-the-things\"\u003eGet the things \u003ca href=\"#get-the-things\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall them from the command line.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install textual\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install rich\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eImport make a .py file and import them in it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.app\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eApp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.widget\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eWidget\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.panel\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"make-what-you-have-a-widget\"\u003eMake what you have a widget \u003ca href=\"#make-what-you-have-a-widget\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you return your rich renderable out of class that inherits from\n\u003ccode\u003etextual.widget.Widget\u003c/code\u003e, you can then dock this inside of an app class\ninheriting from \u003ccode\u003etextual.app.App\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyWidget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eWidget\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erender\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emy_renderable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;press q to quit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003emy_renderable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyApp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eApp\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eon_mount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eview\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edock\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMyWidget\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"n\"\u003eedge\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;top\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;q\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;quit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"run-it\"\u003erun it \u003ca href=\"#run-it\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou’ve made a TUI (text user interface).  Run the classmethod \u003ccode\u003erun\u003c/code\u003e to display\nthe it in its full screen glory.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eMyApp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;textual.log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"final-result\"\u003eFinal result \u003ca href=\"#final-result\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAt this point It probably does not look much different, but it can be\ninteractive by binding keys to any method on your app that starts with the word\n\u003ccode\u003eaction_\u003c/code\u003e, this includes the built-in actions such as \u003ccode\u003eaction_quit\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.app\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eApp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etextual.widget\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eWidget\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.panel\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyWidget\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eWidget\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erender\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emy_renderable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;press q to quit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003emy_renderable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMyApp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eApp\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003easync\u003c/span\u003e \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003eon_mount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eview\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edock\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMyWidget\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"n\"\u003eedge\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;top\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eawait\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;q\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;quit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eMyApp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;textual.log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nOnce you have made your sick looking cli apps with rich, eventually you are\ngoing to want to add some keybindings to them.  Currently Textual, also written\nby [@willmcgugan](https://twitter.com/willmcgugan), does this extremely well.\nFair Warning it is in super beta mode and expected to change a bunch.  So take\nit easy with hopping on the train so fast.\n\n## Get the things\n\n\nInstall them from the command line.\n\n``` bash\npip install textual\npip install rich\n```\n\nImport make a .py file and import them in it.\n\n``` python\nfrom textual.app import App\nfrom textual.widget import Widget\nfrom rich.panel import Panel\n```\n\n## Make what you have a widget\n\nIf you return your rich renderable out of class that inherits from\n`textual.widget.Widget`, you can then dock this inside of an app class\ninheriting from `textual.app.App`.\n\n``` python\nclass MyWidget(Widget):\n    def render(self):\n        my_renderable = Panel(\"press q to quit\")\n        return my_renderable\n\nclass MyApp(App):\n    async def on_mount(self) -\u003e None:\n        await self.view.dock(MyWidget(), edge=\"top\")\n        await self.bind(\"q\", \"quit\")\n```\n\n## run it\n\nYou've made a TUI (text user interface).  Run the classmethod `run` to display\nthe it in its full screen glory.\n\n``` python\nMyApp.run(log=\"textual.log\")\n```\n\n## Final result\n\nAt this point It probably does not look much different, but it can be\ninteractive by binding keys to any method on your app that starts with the word\n`action_`, this includes the built-in actions such as `action_quit`.\n\n``` python\nfrom textual.app import App\nfrom textual.widget import Widget\nfrom rich.panel import Panel\n\n\nclass MyWidget(Widget):\n    def render(self):\n        my_renderable = Panel(\"press q to quit\")\n        return my_renderable\n\n\nclass MyApp(App):\n    async def on_mount(self) -\u003e None:\n        await self.view.dock(MyWidget(), edge=\"top\")\n        await self.bind(\"q\", \"quit\")\n\n\nif __name__ == \"__main__\":\n    MyApp.run(log=\"textual.log\")\n```\n",
      "summary": "Once you have made your sick looking cli apps with rich, eventually you are going to want to add some keybindings to them. Currently Textual, also written by...",
      "date_published": "2022-01-07T03:25:36Z",
      "date_modified": "2022-01-07T03:25:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/remove-vim-tab-characters/",
      "url": "https://go.waylonwalker.com/remove-vim-tab-characters/",
      "title": "Remove Vim Tab Characters",
      "content_html": "\u003cp\u003eI’ve been stuck many times looking at a vim buffer with little question\nmarks at the beginning of each line and trying to get rid of them.  for\nso long I didn’t know what they were so trying to get rid of them was\nimpossible.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/vim-tab-characters.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/vim-tab-characters.png\" alt=\"example of what the tab character renders as in my editor\"/ data-glightbox=\"description: example of what the tab character renders as in my editor\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIt turns out they are tabs, and you can get rid of the little leading\nquestion marks with this substitution command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e%\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/\\t/\u003c/span\u003e    /\u003cspan class=\"nx\"\u003eg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been stuck many times looking at a vim buffer with little question\nmarks at the beginning of each line and trying to get rid of them.  for\nso long I didn't know what they were so trying to get rid of them was\nimpossible.\n\n![example of what the tab character renders as in my editor](https://images.waylonwalker.com/vim-tab-characters.png)\n\nIt turns out they are tabs, and you can get rid of the little leading\nquestion marks with this substitution command.\n\n``` vim\n:%s/\\t/    /g\n```\n",
      "summary": "I've been stuck many times looking at a vim buffer with little question marks at the beginning of each line and trying to get rid of them. for so long I...",
      "date_published": "2022-01-06T01:49:31Z",
      "date_modified": "2022-01-06T01:49:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tmux-pop-size/",
      "url": "https://go.waylonwalker.com/tmux-pop-size/",
      "title": "Tmux Pop size",
      "content_html": "\u003cp\u003etmux popups can be sized how you like based on the % width of the\nterminal on creation by using the flags (h, w, x, y) for height, width,\nand position.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# normal popup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux popup figlet \u003cspan class=\"s2\"\u003e\u0026#34;Hello\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# fullscreen popup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux popup -h 100% -w 100% figlet \u003cspan class=\"s2\"\u003e\u0026#34;Hello\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 75% centered popup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux popup -h 100% -w 75% figlet \u003cspan class=\"s2\"\u003e\u0026#34;Hello\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 75% popup on left side\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux popup -h 100% -w 75% -x 0% figlet \u003cspan class=\"s2\"\u003e\u0026#34;Hello\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\" class=\"rounded-xl border-pink-900 border-2\"\u003e\n     \u003csource src=\"https://dropper.waylonwalker.com/api/file/c0e80bc5-a03d-40ad-a431-20436b82cf3b.mp4\" type=\"video/mp4\"/\u003e\n     Sorry, your browser doesn\u0026#39;t support embedded videos.\n\u003c/video\u003e\n\u003cblockquote\u003e\n\u003cp\u003eexample running these commands\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\ntmux popups can be sized how you like based on the % width of the\nterminal on creation by using the flags (h, w, x, y) for height, width,\nand position.\n\n``` bash\n# normal popup\ntmux popup figlet \"Hello\"\n# fullscreen popup\ntmux popup -h 100% -w 100% figlet \"Hello\"\n# 75% centered popup\ntmux popup -h 100% -w 75% figlet \"Hello\"\n# 75% popup on left side\ntmux popup -h 100% -w 75% -x 0% figlet \"Hello\"\n```\n\n\u003cvideo autoplay=\"\" controls=\"\" loop=\"true\" muted=\"\" playsinline=\"\" width=\"100%\" class=\"rounded-xl border-pink-900 border-2\"\u003e\n     \u003csource\n      src=\"https://dropper.waylonwalker.com/api/file/c0e80bc5-a03d-40ad-a431-20436b82cf3b.mp4\"\n      type=\"video/mp4\"\u003e\n     Sorry, your browser doesn't support embedded videos.\n\u003c/video\u003e\n\n\u003e example running these commands\n",
      "summary": "tmux popups can be sized how you like based on the % width of the terminal on creation by using the flags (h, w, x, y) for height, width, and position.",
      "date_published": "2022-01-05T17:37:26Z",
      "date_modified": "2022-01-05T17:37:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "tmux",
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier_endops/",
      "url": "https://go.waylonwalker.com/copier_endops/",
      "title": "Changing copier template strings (_endops)",
      "content_html": "\u003cp\u003eI was completely stuck for awhile.  copier was not replacing my template\nvariables.  I found out that adding all these \u003ccode\u003e_endops\u003c/code\u003e fixed it.  Now\nIt will support all of these types of variable wrappers\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# copier.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_templates_suffix\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e.jinja\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003e_envops\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eblock_end_string\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;%}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eblock_start_string\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{%\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecomment_end_string\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;#}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecomment_start_string\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{#\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ekeep_trailing_newline\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003evariable_end_string\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;}}\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003evariable_start_string\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003e!RTFM: Later I read the docs and realized that copier defaults to using \u003ccode\u003e[[\u003c/code\u003e\nand \u003ccode\u003e]]\u003c/code\u003e for its templates unlike other tools like cookiecutter.\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nI was completely stuck for awhile.  copier was not replacing my template\nvariables.  I found out that adding all these `_endops` fixed it.  Now\nIt will support all of these types of variable wrappers\n\n``` yaml\n# copier.yml\n_templates_suffix: .jinja\n_envops:\n  block_end_string: \"%}\"\n  block_start_string: \"{%\"\n  comment_end_string: \"#}\"\n  comment_start_string: \"{#\"\n  keep_trailing_newline: true\n  variable_end_string: \"}}\"\n  variable_start_string: \"{{\"\n```\n\n\u003e !RTFM: Later I read the docs and realized that copier defaults to using `[[`\n\u003e and `]]` for its templates unlike other tools like cookiecutter.\n",
      "summary": "I was completely stuck for awhile. copier was not replacing my template variables. I found out that adding all these fixed it. Now It will support all of...",
      "date_published": "2022-01-04T10:55:12Z",
      "date_modified": "2022-01-04T10:55:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "bash",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/copier-template-variables/",
      "url": "https://go.waylonwalker.com/copier-template-variables/",
      "title": "copier template variables",
      "content_html": "\u003cp\u003eI’ve been looking for a templating tool for awhile that works well with\nsingle files.  My go to templating tool \u003ccode\u003ecookiecutter\u003c/code\u003e does not work for\nsingle files, it needs to put files into a directory underneath of it.\u003c/p\u003e\n\u003ch2 id=\"template-variables\"\u003etemplate variables \u003ca href=\"#template-variables\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBy default copier uses double square brackets for its variables.\nvariables in files, directory_names, or file_names will be substituted\nfor their value once you render them.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# hello-py/hello.py.tmpl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;hello-[[name]]\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003enote! by default copier will not inject variables into your\n\u003ccode\u003etemplate-strings\u003c/code\u003e unless you use a .tmpl suffix.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eBefore running copier we need to tell copier what variables to ask for,\nwe do this with a copier.yml file.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# copier.yml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emy_name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003estr\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ehelp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eWhat is your name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"installing-copier\"\u003einstalling copier \u003ca href=\"#installing-copier\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI prefer to install cli tools that I need globally with pipx, this\nalways gives me access to the tool without worrying about dependency\nconflicts, bloating my system site-packages, or managing a separate\n\u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e for it myself.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epipx install copier\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"running-copier\"\u003erunning copier \u003ca href=\"#running-copier\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen running \u003ccode\u003ecopier copy\u003c/code\u003e we pass in the directory of the template, and\nthe directory that we want to render the template into.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopier copy hello-py .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003enote! the directory ‘.’ is often referred to in cli programs to\nrepresent the current working directory that we are calling the\ncommand from.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"results\"\u003eresults \u003ca href=\"#results\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe resulting files will have your variables injected into them if you have\nsetup your template and copier.yml up correctly.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;hello-you\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been looking for a templating tool for awhile that works well with\nsingle files.  My go to templating tool `cookiecutter` does not work for\nsingle files, it needs to put files into a directory underneath of it.\n\n## template variables\n\nBy default copier uses double square brackets for its variables.\nvariables in files, directory_names, or file_names will be substituted\nfor their value once you render them.\n\n``` python\n# hello-py/hello.py.tmpl\nprint('hello-[[name]]')\n```\n\n\u003e note! by default copier will not inject variables into your\n\u003e `template-strings` unless you use a .tmpl suffix.\n\nBefore running copier we need to tell copier what variables to ask for,\nwe do this with a copier.yml file.\n\n``` yaml\n# copier.yml\nname:\n  default: my_name\n  type: str\n  help: What is your name\n```\n\n## installing copier\n\nI prefer to install cli tools that I need globally with pipx, this\nalways gives me access to the tool without worrying about dependency\nconflicts, bloating my system site-packages, or managing a separate\nvirtual environment for it myself.\n\n``` bash\npipx install copier\n```\n\n## running copier\n\nWhen running `copier copy` we pass in the directory of the template, and\nthe directory that we want to render the template into.\n\n``` bash\ncopier copy hello-py .\n```\n\n\u003e note! the directory '.' is often referred to in cli programs to\n\u003e represent the current working directory that we are calling the\n\u003e command from.\n\n## results\n\nThe resulting files will have your variables injected into them if you have\nsetup your template and copier.yml up correctly.\n\n``` python\nprint('hello-you')\n```\n",
      "summary": "I've been looking for a templating tool for awhile that works well with single files. My go to templating tool does not work for single files, it needs to...",
      "date_published": "2022-01-03T12:37:32Z",
      "date_modified": "2022-01-03T12:37:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "bash",
        "copier"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-ubuntu-impish/",
      "url": "https://go.waylonwalker.com/kedro-ubuntu-impish/",
      "title": "Running Kedro on Ubuntu 21.10 Impish Indri",
      "content_html": "\u003cp\u003eI just installed a brand new Ubuntu 21.10 Impish Indri, and wanted a\nkedro project to play with so I did what any good kedroid would do, I\nwent to my command line and ran\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epipx run kedro new --starter spaceflights\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eBut what I got back was not what I expected!\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFatal error from pip prevented installation. Full pip output in file:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    /home/walkers/.local/pipx/logs/cmd_2022-01-01_20.42.16_pip_errors.log\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSome possibly relevant errors from pip install:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ERROR: Could not find a version that satisfies the requirement kedro \u003cspan class=\"o\"\u003e(\u003c/span\u003efrom versions: none\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ERROR: No matching distribution found \u003cspan class=\"k\"\u003efor\u003c/span\u003e kedro\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eError installing kedro.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis is weird, why cant I run kedro new with pipx?  Lets try pip.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install kedro\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSame issue.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eERROR: Could not find a version that satisfies the requirement kedro \u003cspan class=\"o\"\u003e(\u003c/span\u003efrom versions: none\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eERROR: No matching distribution found \u003cspan class=\"k\"\u003efor\u003c/span\u003e kedro\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/what-is-kedro/\" class=\"wikilink\" data-title=\"What is Kedro\" data-description=\"Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...\" data-date=\"2021-08-17\" data-preview=\"Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...\"\u003eWhat is Kedro\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCurious what kedro is?  Check out this article.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"whats-up\"\u003eWhat’s up \u003ca href=\"#whats-up\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ewrong python version\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThe issue is that kedro only runs on up to \u003ccode\u003epython 3.8\u003c/code\u003e, and on Ubuntu\n21.10 when you \u003ccode\u003eapt install python3\u003c/code\u003e you get \u003ccode\u003epython 3.9\u003c/code\u003e and the\nstandard repos don’t have an old enough version to run kedro.\u003c/p\u003e\n\u003ch2 id=\"how-to-fix-this\"\u003eHow to fix this? \u003ca href=\"#how-to-fix-this\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTheres a couple of ways you can fix this?  They all involve installing a\ndistribution that does not come from the standard repo.\u003c/p\u003e\n\u003ch2 id=\"where-can-i-get-the-right-version\"\u003eWhere Can I get the right version \u003ca href=\"#where-can-i-get-the-right-version\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAnaconda\u003c/li\u003e\n\u003cli\u003ePython.org\u003c/li\u003e\n\u003cli\u003edeadsnakes\u003c/li\u003e\n\u003cli\u003epyenv\u003c/li\u003e\n\u003cli\u003eminiconda\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"i-have-two-articles-that-can-help-you\"\u003eI have two articles that can help you \u003ca href=\"#i-have-two-articles-that-can-help-you\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"/install-miniconda/\" class=\"wikilink\" data-title=\"How to Install miniconda on linux (from the command line only)\" data-description=\"Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.\" data-date=\"2020-08-10\" data-preview=\"Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.\"\u003eHow to Install miniconda on linux (from the command line only)\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUsing miniconda\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda create -n myenv \u003cspan class=\"nv\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e3.8\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"/pyenv-first-impressions/\" class=\"wikilink\" data-title=\"My first impressions with pyenv\" data-description=\"pyenv provides an easy way to install almost any version of python from a large list of distributions. I have simply been using the version of python from...\" data-date=\"2021-12-30\" data-preview=\"pyenv provides an easy way to install almost any version of python from a large list of distributions. I have simply been using the version of python from...\"\u003eMy first impressions with pyenv\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUsing pyenv\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epyenv install 3.8.12\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI just installed a brand new Ubuntu 21.10 Impish Indri, and wanted a\nkedro project to play with so I did what any good kedroid would do, I\nwent to my command line and ran\n\n```\npipx run kedro new --starter spaceflights\n```\n\nBut what I got back was not what I expected!\n\n``` bash\nFatal error from pip prevented installation. Full pip output in file:\n    /home/walkers/.local/pipx/logs/cmd_2022-01-01_20.42.16_pip_errors.log\n\nSome possibly relevant errors from pip install:\n    ERROR: Could not find a version that satisfies the requirement kedro (from versions: none)\n    ERROR: No matching distribution found for kedro\nError installing kedro.\n```\n\nThis is weird, why cant I run kedro new with pipx?  Lets try pip.\n\n``` bash\npip install kedro\n```\n\nSame issue.\n\n``` bash\nERROR: Could not find a version that satisfies the requirement kedro (from versions: none)\nERROR: No matching distribution found for kedro\n```\n\n\u003ca href=\"/what-is-kedro/\" class=\"wikilink\" data-title=\"What is Kedro\" data-description=\"Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...\" data-date=\"2021-08-17\"\u003eWhat is Kedro\u003c/a\u003e\n\n\u003e Curious what kedro is?  Check out this article.\n\n## What's up\n\n_wrong python version_\n\nThe issue is that kedro only runs on up to `python 3.8`, and on Ubuntu\n21.10 when you `apt install python3` you get `python 3.9` and the\nstandard repos don't have an old enough version to run kedro.\n\n## How to fix this?\n\nTheres a couple of ways you can fix this?  They all involve installing a\ndistribution that does not come from the standard repo.\n\n## Where Can I get the right version\n\n* Anaconda\n* Python.org\n* deadsnakes\n* pyenv\n* miniconda\n\n## I have two articles that can help you\n\n\u003ca href=\"/install-miniconda/\" class=\"wikilink\" data-title=\"How to Install miniconda on linux (from the command line only)\" data-description=\"Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.\" data-date=\"2020-08-10\"\u003eHow to Install miniconda on linux (from the command line only)\u003c/a\u003e\n\n\u003e Using miniconda\n\n``` bash\nconda create -n myenv python=3.8\n```\n\n\u003ca href=\"/pyenv-first-impressions/\" class=\"wikilink\" data-title=\"My first impressions with pyenv\" data-description=\"pyenv provides an easy way to install almost any version of python from a large list of distributions. I have simply been using the version of python from...\" data-date=\"2021-12-30\"\u003eMy first impressions with pyenv\u003c/a\u003e\n\n\u003e Using pyenv\n\n``` bash\npyenv install 3.8.12\n```\n",
      "summary": "I just installed a brand new Ubuntu 21.10 Impish Indri, and wanted a kedro project to play with so I did what any good kedroid would do, I went to my command...",
      "date_published": "2022-01-02T20:24:48Z",
      "date_modified": "2022-01-02T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "kedro",
        "python",
        "datascience"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pluggy-minimal-example/",
      "url": "https://go.waylonwalker.com/pluggy-minimal-example/",
      "title": "A Minimal Pluggy Example",
      "content_html": "\u003cp\u003ePluggy makes it so easy to allow users to modify the behavior of a framework\nwithout thier specific feature needing to be implemented in the framework\nitself.\u003c/p\u003e\n\u003cp\u003eI’ve really been loving the workflow of frameworks built with pluggy.  The first\none that many python devs have experience with is pytest.  I’ve never created a\npytest plugin, and honestly at the time I looked into how they were made was a\nlong time ago and it went over my head.  I use a data pipelining framework\ncalled kedro, and have build many plugins for it.\u003c/p\u003e\n\u003ch2 id=\"making-a-plugin\"\u003eMaking a plugin \u003ca href=\"#making-a-plugin\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003esuper easy to do\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAs long as the framework document the hooks that are available and what it\npasses to them it’s so easy to make a plugin.  Its just importing the\n\u003ccode\u003ehook_impl\u003c/code\u003e, making a class with a function that represents one of the hooks,\nand decorating it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eframework\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ehook_impl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eLowerHook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@hook_impl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003estart\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elower\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"installing-pluggy\"\u003einstalling pluggy \u003ca href=\"#installing-pluggy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstalling pluggy is just like most python applications, install python, make\nyour \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e, and pip install it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install pluggy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"making-a-plugin-driven-framework\"\u003eMaking a plugin driven framework \u003ca href=\"#making-a-plugin-driven-framework\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003emuch less easy\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAt the time I started playing with pluggy, their docs were less\ncomplete, or I was just plain blind, but this was a huge part of the\ndocs that were missing for me that now actually appear to be there.  But\nto get some more examples out there, here is my version.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003epluggy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# These don\u0026#39;t need to match\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eHOOK_NAMESPACE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pluggy_example\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePROJECT_NAME\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pluggy_example\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehook_spec\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHookspecMarker\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eHOOK_NAMESPACE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehook_impl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHookimplMarker\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eHOOK_NAMESPACE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003ePluggyExampleSpecs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    This is where we spec out our frameworks hooks, I like to refer to them as\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    the lifecycle.  Each of these functions is a hook that we are exposing to\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    our users, with the kwargs that we expect to pass them.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@hook_spec\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003estart\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ePluggyExample\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        The first hook that runs.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003epass\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@hook_spec\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003estop\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003ePluggyExample\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        The last hook that runs.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003epass\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003ePluggyExample\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    This may not need to be a class, but I wanted a container where all the\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    hooks had access to the message.  This made sense to me to do as a class.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        Setup the plugin manager and register all the hooks.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_pm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePluginManager\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePROJECT_NAME\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_pm\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eadd_hookspecs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePluggyExampleSpecs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emessage\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehooks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehooks\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ehooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_register_hooks\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003e_register_hooks\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ehook\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_pm\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehook\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        Run the hooks in the documented order, and pass in any kwargs the hook\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        needs access to.  Here I am storing the message within this same class.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_pm\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehook\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estart\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003e_pm\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehook\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003estop\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eDefaultHook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    These are some hooks that run by default, maybe these are created by the\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    framework author.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@hook_impl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003estart\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eupper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nd\"\u003e@hook_impl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003estop\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epluggy_example\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    The user of this framework can apply the hook in their own code without\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    changing the behavior of the framework, but the library has\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    implemented it\u0026#39;s own default hooks.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epe\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ePluggyExample\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emessage\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hello world\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ehooks\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eDefaultHook\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epe\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"modifying-behavior\"\u003eModifying behavior \u003ca href=\"#modifying-behavior\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eas a user of PluggyExample\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNow Lets pretent the user of this library likes everything about it,\nexcept, they don’t like all the shouting.  They can either search for a\nplugin on Google, github, or pypi and find one, or make it themself. the\nmagic here is that they do not need to have the package maintainer patch\nthe core library itself.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nclass LowerHook:\n    \u0026#34;\u0026#34;\u0026#34;\n    This is a new hook that a plugin author has created to modify the behavior\n    of the framework to lowercase the message.\n    \u0026#34;\u0026#34;\u0026#34;\n    @hook_impl\n    def start(pluggy_example):\n        pluggy_example.message = pluggy_example.message.lower()\n\nfrom pluggy_example import PluggyExample\npe = PluggyExample(\n    message=\u0026#34;hello world\u0026#34;,\n    hooks=[\n        DefaultHook,\n        LowerHook\n    ],\n)\npe.run()\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"running-pluggy-example\"\u003eRunning Pluggy Example \u003ca href=\"#running-pluggy-example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHere is a short clip of me running the pluggy example in it’s default\nstate, then adding the LowerHook, and running a second time.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/til-pluggy-example.gif\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/til-pluggy-example.gif\" alt=\"example video\"/ data-glightbox=\"description: example video\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nPluggy makes it so easy to allow users to modify the behavior of a framework\nwithout thier specific feature needing to be implemented in the framework\nitself.\n\nI've really been loving the workflow of frameworks built with pluggy.  The first\none that many python devs have experience with is pytest.  I've never created a\npytest plugin, and honestly at the time I looked into how they were made was a\nlong time ago and it went over my head.  I use a data pipelining framework\ncalled kedro, and have build many plugins for it.\n\n## Making a plugin\n_super easy to do_\n\nAs long as the framework document the hooks that are available and what it\npasses to them it's so easy to make a plugin.  Its just importing the\n`hook_impl`, making a class with a function that represents one of the hooks,\nand decorating it.\n\n``` python\nfrom framework import hook_impl\n\nclass LowerHook:\n    @hook_impl\n    def start(pluggy_example):\n        pluggy_example.message = pluggy_example.message.lower()\n```\n\n## installing pluggy\n\nInstalling pluggy is just like most python applications, install python, make\nyour virtual environment, and pip install it.\n\n``` bash\npip install pluggy\n```\n\n## Making a plugin driven framework\n_much less easy_\n\nAt the time I started playing with pluggy, their docs were less\ncomplete, or I was just plain blind, but this was a huge part of the\ndocs that were missing for me that now actually appear to be there.  But\nto get some more examples out there, here is my version.\n\n``` python\nimport pluggy\n\n# These don't need to match\nHOOK_NAMESPACE = \"pluggy_example\"\nPROJECT_NAME = \"pluggy_example\"\n\nhook_spec = pluggy.HookspecMarker(HOOK_NAMESPACE)\nhook_impl = pluggy.HookimplMarker(HOOK_NAMESPACE)\n\n\nclass PluggyExampleSpecs:\n    \"\"\"\n    This is where we spec out our frameworks hooks, I like to refer to them as\n    the lifecycle.  Each of these functions is a hook that we are exposing to\n    our users, with the kwargs that we expect to pass them.\n    \"\"\"\n    @hook_spec\n    def start(self, pluggy_example: PluggyExample) -\u003e None:\n        \"\"\"\n        The first hook that runs.\n        \"\"\"\n        pass\n\n    @hook_spec\n    def stop(self, pluggy_example: PluggyExample) -\u003e None:\n        \"\"\"\n        The last hook that runs.\n        \"\"\"\n        pass\n\n\nclass PluggyExample:\n    \"\"\"\n    This may not need to be a class, but I wanted a container where all the\n    hooks had access to the message.  This made sense to me to do as a class.\n    \"\"\"\n\n    def __init__(self, message=\"\", hooks=None) -\u003e None:\n        \"\"\"\n        Setup the plugin manager and register all the hooks.\n        \"\"\"\n        self._pm = pluggy.PluginManager(PROJECT_NAME)\n        self._pm.add_hookspecs(PluggyExampleSpecs)\n        self.message = message\n        self.hooks = hooks\n        if hooks:\n            self._register_hooks()\n\n    def _register_hooks(self) -\u003e None:\n        for hook in self.hooks:\n            self._pm.register(hook)\n\n    def run(self):\n        \"\"\"\n        Run the hooks in the documented order, and pass in any kwargs the hook\n        needs access to.  Here I am storing the message within this same class.\n        \"\"\"\n        self._pm.hook.start(pluggy_example=self)\n        self._pm.hook.stop(pluggy_example=self)\n        return self.message\n\n\nclass DefaultHook:\n    \"\"\"\n    These are some hooks that run by default, maybe these are created by the\n    framework author.\n    \"\"\"\n    @hook_impl\n    def start(pluggy_example):\n        pluggy_example.message = pluggy_example.message.upper()\n\n    @hook_impl\n    def stop(pluggy_example):\n        print(pluggy_example.message)\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    The user of this framework can apply the hook in their own code without\n    changing the behavior of the framework, but the library has\n    implemented it's own default hooks.\n    \"\"\"\n    pe = PluggyExample(\n        message=\"hello world\",\n        hooks=[\n            DefaultHook,\n        ],\n    )\n    pe.run()\n```\n\n## Modifying behavior\n_as a user of PluggyExample_\n\nNow Lets pretent the user of this library likes everything about it,\nexcept, they don't like all the shouting.  They can either search for a\nplugin on Google, github, or pypi and find one, or make it themself. the\nmagic here is that they do not need to have the package maintainer patch\nthe core library itself.\n\n```\n\nclass LowerHook:\n    \"\"\"\n    This is a new hook that a plugin author has created to modify the behavior\n    of the framework to lowercase the message.\n    \"\"\"\n    @hook_impl\n    def start(pluggy_example):\n        pluggy_example.message = pluggy_example.message.lower()\n\nfrom pluggy_example import PluggyExample\npe = PluggyExample(\n    message=\"hello world\",\n    hooks=[\n        DefaultHook,\n        LowerHook\n    ],\n)\npe.run()\n```\n\n## Running Pluggy Example\n\nHere is a short clip of me running the pluggy example in it's default\nstate, then adding the LowerHook, and running a second time.\n\n![example video](https://images.waylonwalker.com/til-pluggy-example.gif)\n",
      "summary": "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.",
      "date_published": "2022-01-01T20:35:27Z",
      "date_modified": "2022-01-01T20:35:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/list-all-files-containing-phrase/",
      "url": "https://go.waylonwalker.com/list-all-files-containing-phrase/",
      "title": "List all the files containing a phrase",
      "content_html": "\u003cp\u003eOne of the most useful skills you can acquire to make you faster at\nalmost any job that uses a computer is getting good at finding text in\nyour current working diretory and identifying the files that its in.  I\noften use the silver searcher \u003ccode\u003eag\u003c/code\u003e or ripgrep \u003ccode\u003erg\u003c/code\u003e to find files in\nlarge directories quickly.  Both have a sane set of defaults that ignore\nhidden and gitignored files, but getting them to list only the filenames\nand not the matched was not trivial to me.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI’ve searched throught he help/man pages many times looking for these\nflags and they always seem to evade me.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"ag\"\u003eag \u003ca href=\"#ag\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePassing the flag \u003ccode\u003e-l\u003c/code\u003e to ag will get it to list only the filepath, and\nnot the match. Here I gave it a \u003ccode\u003e--md\u003c/code\u003e as well to only return markdown\nfiletypes.  \u003ccode\u003eag\u003c/code\u003e supports a number of filetypes in a very similar way.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eag nvim --md -l\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"rg\"\u003erg \u003ca href=\"#rg\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eGiving \u003ccode\u003erg\u003c/code\u003e the \u003ccode\u003e--files-with-matches\u003c/code\u003e flag will yield you a similar set\nof results, giving only the filepaths themselves and not the match\nstatement.  Also passing in the \u003ccode\u003e-g \u0026#34;*.md\u0026#34;\u003c/code\u003e will similarly yield only\nresults from markdown files.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erg --files-with-matches you -g \u003cspan class=\"s2\"\u003e\u0026#34;*.md\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nOne of the most useful skills you can acquire to make you faster at\nalmost any job that uses a computer is getting good at finding text in\nyour current working diretory and identifying the files that its in.  I\noften use the silver searcher `ag` or ripgrep `rg` to find files in\nlarge directories quickly.  Both have a sane set of defaults that ignore\nhidden and gitignored files, but getting them to list only the filenames\nand not the matched was not trivial to me.\n\n\u003e I've searched throught he help/man pages many times looking for these\n\u003e flags and they always seem to evade me.\n\n## ag\n\nPassing the flag `-l` to ag will get it to list only the filepath, and\nnot the match. Here I gave it a `--md` as well to only return markdown\nfiletypes.  `ag` supports a number of filetypes in a very similar way.\n\n``` bash\nag nvim --md -l\n```\n\n## rg\n\nGiving `rg` the `--files-with-matches` flag will yield you a similar set\nof results, giving only the filepaths themselves and not the match\nstatement.  Also passing in the `-g \"*.md\"` will similarly yield only\nresults from markdown files.\n\n``` bash\nrg --files-with-matches you -g \"*.md\"\n```\n",
      "summary": "One of the most useful skills you can acquire to make you faster at almost any job that uses a computer is getting good at finding text in your current...",
      "date_published": "2021-12-31T20:24:48Z",
      "date_modified": "2021-12-31T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pyenv-first-impressions/",
      "url": "https://go.waylonwalker.com/pyenv-first-impressions/",
      "title": "My first impressions with pyenv",
      "content_html": "\u003cp\u003epyenv provides an easy way to install almost any version of python from\na large list of distributions. I have simply been using the version of\npython from the os package manager for awhile, but recently I bumped my\nhome system to Ubuntu 21.10 impish, and it is only 3.9+ while the\nlibraries I needed were only compatable with up to 3.8.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI needed to install an older version of python on ubuntu\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eI’ve been wanting to check out pyenv for awhile now, but without a\nburning need to do so.\u003c/p\u003e\n\u003ch2 id=\"installing\"\u003einstalling \u003ca href=\"#installing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBased on the Readme it looked like I needed to install using homebrew,so this\nis what I did, but I later realized that there is a pyenv-installer repo that\nmay have saved me this need.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/installing-homebrew-linux/\" class=\"wikilink\" data-title=\"Installing Homebrew on Linux\" data-description=\"Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.\" data-date=\"2021-12-29\" data-preview=\"Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.\"\u003eInstalling Homebrew on Linux\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"list-out-install-candidates\"\u003eList out install candidates \u003ca href=\"#list-out-install-candidates\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou can list all of the available versions to install with\n\u003ccode\u003epyenv install --list\u003c/code\u003e.  It does reccomend updating pyenv if you suspect\nthat it is missing one.  At the time of writing this comes out to 532\ndifferent versions!\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epyenv install --list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"lets-install-the-latest-38-patch\"\u003eLet’s install the latest 3.8 patch \u003ca href=\"#lets-install-the-latest-38-patch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstalling a version is as easy as \u003ccode\u003epyenv install 3.8.12\u003c/code\u003e.  This will\ninstall it, but not make it active anywhere.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epyenv install 3.8.12\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"lets-use-python-3812-while-in-this-directory\"\u003elet’s use python 3.8.12 while in this directory \u003ca href=\"#lets-use-python-3812-while-in-this-directory\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eRunning \u003ccode\u003epyenv local\u003c/code\u003e will set the version of python that we wish to use\nwhile in this directory and any directory underneath of it while using\nthe pyenv command.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epyenv \u003cspan class=\"nb\"\u003elocal\u003c/span\u003e python3.8.12\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"python-version-file\"\u003e.python-version file \u003ca href=\"#python-version-file\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis creates a \u003ccode\u003e.python-version\u003c/code\u003e files in the directory I ran it in,\nthat contains simply the version number.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3.8.12\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"using-with-pipx\"\u003eusing with pipx \u003ca href=\"#using-with-pipx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI immediately ran into the same issue I was having before when trying to\nrun pipx, as pipx was running my system python.  I had to install pipx\nin the python3.8 environment to get it to use it.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epyenv \u003cspan class=\"nb\"\u003eexec\u003c/span\u003e pip install pipx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epyenv \u003cspan class=\"nb\"\u003eexec\u003c/span\u003e pipx run kedro new\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"python-is-still-the-system-python\"\u003epython is still the system python \u003ca href=\"#python-is-still-the-system-python\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhen I open a terminal and call \u003ccode\u003epython\u003c/code\u003e its still my system python that\nI installed and set with update-alternatives.  I am not sure if this is\nexpected or based on how I had installed the system python previously,\nbut it’s what happened on my system.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eupdate-alternatives --query python\n\nName: python\nLink: /home/walkers/.local/bin/python\nStatus: auto\nBest: /usr/bin/python3\nValue: /usr/bin/python3\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"making-a-virtual-environment\"\u003emaking a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e \u003ca href=\"#making-a-virtual-environment\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo make a virtual environment, I simply ran \u003ccode\u003epyenv exec python\u003c/code\u003e in place\nof where I would normally run python and it worked for me.  There is a\nwhole package to get pyenv and venv to play nicely together, so I\nsuspect that there is more to it, but this worked well for me and I was\nhappy.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epyenv exec python -m venv .venv --prompt $(basename $PWD)\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eNow when my virtual environment is active it points to the python in\nthat virtual environment, and is the version of python that was used to\ncreate the environment.\u003c/p\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pyenv/pyenv#installation\" class=\"hoverlink  has-avatar has-avatar-before\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/github.com.ico\"\u003ehttps://github.com/pyenv/pyenv#installation\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\npyenv provides an easy way to install almost any version of python from\na large list of distributions. I have simply been using the version of\npython from the os package manager for awhile, but recently I bumped my\nhome system to Ubuntu 21.10 impish, and it is only 3.9+ while the\nlibraries I needed were only compatable with up to 3.8.\n\n\u003e I needed to install an older version of python on ubuntu\n\nI've been wanting to check out pyenv for awhile now, but without a\nburning need to do so.\n\n## installing\n\nBased on the Readme it looked like I needed to install using homebrew,so this\nis what I did, but I later realized that there is a pyenv-installer repo that\nmay have saved me this need.\n\n\u003ca href=\"/installing-homebrew-linux/\" class=\"wikilink\" data-title=\"Installing Homebrew on Linux\" data-description=\"Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.\" data-date=\"2021-12-29\"\u003eInstalling Homebrew on Linux\u003c/a\u003e\n\n## List out install candidates\n\nYou can list all of the available versions to install with\n`pyenv install --list`.  It does reccomend updating pyenv if you suspect\nthat it is missing one.  At the time of writing this comes out to 532\ndifferent versions!\n\n``` bash\npyenv install --list\n```\n\n## Let's install the latest 3.8 patch\n\nInstalling a version is as easy as `pyenv install 3.8.12`.  This will\ninstall it, but not make it active anywhere.\n\n```\npyenv install 3.8.12\n```\n\n## let's use python 3.8.12 while in this directory\n\nRunning `pyenv local` will set the version of python that we wish to use\nwhile in this directory and any directory underneath of it while using\nthe pyenv command.\n\n``` bash\npyenv local python3.8.12\n```\n\n## .python-version file\n\nThis creates a `.python-version` files in the directory I ran it in,\nthat contains simply the version number.\n\n``` bash\n3.8.12\n```\n\n## using with pipx\n\nI immediately ran into the same issue I was having before when trying to\nrun pipx, as pipx was running my system python.  I had to install pipx\nin the python3.8 environment to get it to use it.\n\n``` bash\npyenv exec pip install pipx\npyenv exec pipx run kedro new\n```\n\n## python is still the system python\n\nWhen I open a terminal and call `python` its still my system python that\nI installed and set with update-alternatives.  I am not sure if this is\nexpected or based on how I had installed the system python previously,\nbut it's what happened on my system.\n\n```\nupdate-alternatives --query python\n\nName: python\nLink: /home/walkers/.local/bin/python\nStatus: auto\nBest: /usr/bin/python3\nValue: /usr/bin/python3\n```\n\n## making a virtual environment\n\nTo make a virtual environment, I simply ran `pyenv exec python` in place\nof where I would normally run python and it worked for me.  There is a\nwhole package to get pyenv and venv to play nicely together, so I\nsuspect that there is more to it, but this worked well for me and I was\nhappy.\n\n```\npyenv exec python -m venv .venv --prompt $(basename $PWD)\n```\n\nNow when my virtual environment is active it points to the python in\nthat virtual environment, and is the version of python that was used to\ncreate the environment.\n\n## Links\n\n[https://github.com/pyenv/pyenv#installation](https://github.com/pyenv/pyenv#installation){.hoverlink}\n",
      "summary": "pyenv provides an easy way to install almost any version of python from a large list of distributions. I have simply been using the version of python from...",
      "date_published": "2021-12-30T15:26:01Z",
      "date_modified": "2021-12-30T15:26:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/delestro-outputformat/",
      "url": "https://go.waylonwalker.com/delestro-outputformat/",
      "title": "⭐ delestro outputformat",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/delestro/outputformat\" 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\"\u003eoutputformat\u003c/a\u003e from \u003ca href=\"https://github.com/delestro\" 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\"\u003edelestro\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003ePython library to decorate and beautify strings\u003c/p\u003e\n",
      "content_text": "\nI came across [outputformat](https://github.com/delestro/outputformat) from [delestro](https://github.com/delestro), and it's packed with great features and ideas.\n\nPython library to decorate and beautify strings\n",
      "summary": "I came across outputformat from delestro, and it's packed with great features and ideas.",
      "date_published": "2021-12-30T04:55:29Z",
      "date_modified": "2021-12-30T04:55:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/installing-homebrew-linux/",
      "url": "https://go.waylonwalker.com/installing-homebrew-linux/",
      "title": "Installing Homebrew on Linux",
      "content_html": "\u003cp\u003eInstalling brew on linux proved quite easy and got pyenv running for me\nwithin 4 commands.\u003c/p\u003e\n\u003cp\u003eI had never used homebrew before, honestly I thought it was a mac only\nthing for years.  Today I wanted to try out pyenv, and the reccommended\nway to install was using homebrew.  I am not yet sure if I want either\nin my normal workflow, so for now I am just going to pop open a new\nterminal and install homebrew and see how it goes.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/bin/bash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecurl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;eval \u0026#34;$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)\u0026#34;\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; /home/walkers/.zprofile\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e/home/linuxbrew/.linuxbrew/bin/brew shellenv\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThat was it, now homebrew is working. Starting a new shell and running\nthe command to install pyenv worked.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install pyenv\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://brew.sh/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/brew.sh.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/brew.sh.ico\" class=\"has-avatar  has-avatar-before\"\u003ehomebrew\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nInstalling brew on linux proved quite easy and got pyenv running for me\nwithin 4 commands.\n\nI had never used homebrew before, honestly I thought it was a mac only\nthing for years.  Today I wanted to try out pyenv, and the reccommended\nway to install was using homebrew.  I am not yet sure if I want either\nin my normal workflow, so for now I am just going to pop open a new\nterminal and install homebrew and see how it goes.\n\n\n``` bash\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\necho 'eval \"$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)\"' \u003e\u003e /home/walkers/.zprofile\neval \"$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)\"\n```\n\nThat was it, now homebrew is working. Starting a new shell and running\nthe command to install pyenv worked.\n\n``` bash\nbrew install pyenv\n```\n\n## Links\n\n* [homebrew](https://brew.sh/)\n",
      "summary": "Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.",
      "date_published": "2021-12-29T20:24:48Z",
      "date_modified": "2021-12-29T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pyenv-pyenv/",
      "url": "https://go.waylonwalker.com/pyenv-pyenv/",
      "title": "⭐ pyenv pyenv",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pyenv\" 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\"\u003epyenv\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pyenv/pyenv\" 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\"\u003epyenv\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eSimple Python version management\u003c/p\u003e\n",
      "content_text": "\n[pyenv](https://github.com/pyenv) has done a fantastic job with [pyenv](https://github.com/pyenv/pyenv). Highly recommend taking a look.\n\nSimple Python version management\n",
      "summary": "pyenv has done a fantastic job with pyenv. Highly recommend taking a look.",
      "date_published": "2021-12-29T16:09:12Z",
      "date_modified": "2021-12-29T16:09:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pyenv-pyenv-installer/",
      "url": "https://go.waylonwalker.com/pyenv-pyenv-installer/",
      "title": "⭐ pyenv pyenv-installer",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/pyenv\" 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\"\u003epyenv\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/pyenv/pyenv-installer\" 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\"\u003epyenv-installer\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eThis tool is used to install \u003ccode\u003epyenv\u003c/code\u003e and friends.\u003c/p\u003e\n",
      "content_text": "\n[pyenv](https://github.com/pyenv) has done a fantastic job with [pyenv-installer](https://github.com/pyenv/pyenv-installer). Highly recommend taking a look.\n\nThis tool is used to install `pyenv` and friends.\n",
      "summary": "pyenv has done a fantastic job with pyenv-installer. Highly recommend taking a look.",
      "date_published": "2021-12-29T16:09:00Z",
      "date_modified": "2021-12-29T16:09:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/serve-html-command-line/",
      "url": "https://go.waylonwalker.com/serve-html-command-line/",
      "title": "Serve html from your command line",
      "content_html": "\u003cp\u003eWhen I first moved to vim from and ide like vscode or sublime text one of my\nvery first issues was trying to preview my website at \u003ccode\u003elocalhost:8000\u003c/code\u003e.  There\nhad always just been a button there to do it in all of my other editors, not\nvim.  There are not many buttons for anything in vim.  While there is probably a\nplugin that can run a webserver for me in vim, it’s not necessary, we just need\nthe command line we are already in.\u003c/p\u003e\n\u003ch2 id=\"running-a-separate-process\"\u003erunning a separate process \u003ca href=\"#running-a-separate-process\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou will need a way to run another process alongside vim, here are a couple\nideas to get you going that are not the focus here.style\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003euse background jobs\n\u003cul\u003e\n\u003cli\u003ec-z to send a job to the background\u003c/li\u003e\n\u003cli\u003efg to bring it back\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003euse a second terminal\u003c/li\u003e\n\u003cli\u003euse a second tab\u003c/li\u003e\n\u003cli\u003euse tmux and run it in a separate split/window\u003c/li\u003e\n\u003cli\u003euse an embeded nvim terminal\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"running-a-development-webserver-from-the-command-line\"\u003erunning a development webserver from the command line \u003ca href=\"#running-a-development-webserver-from-the-command-line\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePython already exists on most linux systems by default, and most are now on\npython3.  If you are on windows typing python will take you directly to the\nwindows store to install it, or you can also use wsl.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# python3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m http.server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# running on port 5000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m http.server --directory markout \u003cspan class=\"m\"\u003e5000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cpre\u003e\u003ccode\u003e# for the low chance you are on python2\npython -m SimpleHTTPServer\n\n# running on port 5000\npython -m SimpleHTTPServer 5000\npython -m SimpleHTTPServer --directory markout 5000\n\n\u003c/code\u003e\u003c/pre\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/python-m-http-server.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/python-m-http-server.png\" alt=\"running a python static webserver from the command line\"/ data-glightbox=\"description: running a python static webserver from the command line\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003ch2 id=\"using-nodejs\"\u003eusing nodejs \u003ca href=\"#using-nodejs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you are a web developer it’s likely that you need nodejs and npm on your\nsystem anyways and may want to use one of the servers from npm.  I’ll admit with\nthese not being tied to the long term support of a language they are much more\nfeature rich with things like compression out of the box.  In my opinion they\nare nice things that you would want out of a production server, but may not\nbe necessary for development.\u003c/p\u003e\n\u003ch3 id=\"installing-npx\"\u003einstalling npx \u003ca href=\"#installing-npx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# if you don\u0026#39;t alredy have npx\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpm i -g npx\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003cp\u003enpx is a handy tool that lets you run command line applications straight from\nnpm without installing them.  It pulls the latest version every time you want\nto run, then executes it without it being installed.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"running-the-http-server-with-npx\"\u003erunning the http-server with npx \u003ca href=\"#running-the-http-server-with-npx\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx http-server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# running on port 5000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx http-server -p \u003cspan class=\"m\"\u003e5000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpx http-server markout -p \u003cspan class=\"m\"\u003e5000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/npx-http-server.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/npx-http-server.png\" alt=\"running a nodejs static webserver from the command line\"/ data-glightbox=\"description: running a nodejs static webserver from the command line\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nWhen I first moved to vim from and ide like vscode or sublime text one of my\nvery first issues was trying to preview my website at `localhost:8000`.  There\nhad always just been a button there to do it in all of my other editors, not\nvim.  There are not many buttons for anything in vim.  While there is probably a\nplugin that can run a webserver for me in vim, it's not necessary, we just need\nthe command line we are already in.\n\n## running a separate process\n\nYou will need a way to run another process alongside vim, here are a couple\nideas to get you going that are not the focus here.style\n\n* use background jobs\n  * c-z to send a job to the background\n  * fg to bring it back\n* use a second terminal\n* use a second tab\n* use tmux and run it in a separate split/window\n* use an embeded nvim terminal\n\n## running a development webserver from the command line\n\nPython already exists on most linux systems by default, and most are now on\npython3.  If you are on windows typing python will take you directly to the\nwindows store to install it, or you can also use wsl.\n\n``` bash\n# python3\npython -m http.server\n\n# running on port 5000\npython -m http.server --directory markout 5000\n```\n\n```\n# for the low chance you are on python2\npython -m SimpleHTTPServer\n\n# running on port 5000\npython -m SimpleHTTPServer 5000\npython -m SimpleHTTPServer --directory markout 5000\n\n```\n\n![running a python static webserver from the command line](https://images.waylonwalker.com/python-m-http-server.png)\n\n## using nodejs\n\nIf you are a web developer it's likely that you need nodejs and npm on your\nsystem anyways and may want to use one of the servers from npm.  I'll admit with\nthese not being tied to the long term support of a language they are much more\nfeature rich with things like compression out of the box.  In my opinion they\nare nice things that you would want out of a production server, but may not\nbe necessary for development.\n\n### installing npx\n\n``` bash\n# if you don't alredy have npx\nnpm i -g npx\n```\n\n\u003e npx is a handy tool that lets you run command line applications straight from\n\u003e npm without installing them.  It pulls the latest version every time you want\n\u003e to run, then executes it without it being installed.\n\n### running the http-server with npx\n\n``` bash\nnpx http-server\n\n# running on port 5000\nnpx http-server -p 5000\nnpx http-server markout -p 5000\n\n```\n\n![running a nodejs static webserver from the command line](https://images.waylonwalker.com/npx-http-server.png)\n",
      "summary": "When I first moved to vim from and ide like vscode or sublime text one of my very first issues was trying to preview my website at . There had always just...",
      "date_published": "2021-12-28T20:24:48Z",
      "date_modified": "2021-12-28T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim",
        "linux",
        "bash"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-custom-command/",
      "url": "https://go.waylonwalker.com/nvim-telescope-custom-command/",
      "title": "Opening files in vim from output of command",
      "content_html": "\u003cp\u003eMany command line tools can output a list of files, this is quite powerful.\nI often want to search for something, then open it from a fuzzy picker.  This\ncan be done with fzf in the terminal, but often I am already in vim and I want\nto open it inside my current session.\u003c/p\u003e\n\u003ch2 id=\"telescope\"\u003eTelescope \u003ca href=\"#telescope\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ehow to pass a custom command to telescope\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eTelescope is the fuzzy file finder I use every day inside of neovim.  Its pretty\nfantastic and easy to extent like this.  This first example I am only passing in\nfiles from the current working directory by using \u003ccode\u003els\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003eTelescope\u003c/span\u003e \u003cspan class=\"nx\"\u003efind_files\u003c/span\u003e \u003cspan class=\"nx\"\u003efind_command\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"nx\"\u003els\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis brings up a normal Telescope picker with results from the \u003ccode\u003els\u003c/code\u003e command.\u003c/p\u003e\n\u003ch2 id=\"more-arguments\"\u003eMore arguments \u003ca href=\"#more-arguments\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003ehow to pass a muli-argument command to telescope\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAdding more arguments can be done by comma separating them as shown in the\nexample below.  This command will run the silver-searcher, search for all\noccurences of nvim inside of a markdown file, and return only the filepaths so\nTelescope can pick from them.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nx\"\u003eTelescope\u003c/span\u003e \u003cspan class=\"nx\"\u003efind_files\u003c/span\u003e \u003cspan class=\"nx\"\u003efind_command\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"nx\"\u003eag\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"nx\"\u003envim\u003c/span\u003e\u003cspan class=\"p\"\u003e,--\u003c/span\u003e\u003cspan class=\"nx\"\u003emd\u003c/span\u003e\u003cspan class=\"p\"\u003e,-\u003c/span\u003e\u003cspan class=\"nx\"\u003el\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nMany command line tools can output a list of files, this is quite powerful.\nI often want to search for something, then open it from a fuzzy picker.  This\ncan be done with fzf in the terminal, but often I am already in vim and I want\nto open it inside my current session.\n\n## Telescope\n_how to pass a custom command to telescope_\n\nTelescope is the fuzzy file finder I use every day inside of neovim.  Its pretty\nfantastic and easy to extent like this.  This first example I am only passing in\nfiles from the current working directory by using `ls`.\n\n``` vim\n:Telescope find_files find_command=ls\n```\n\nThis brings up a normal Telescope picker with results from the `ls` command.\n\n## More arguments\n_how to pass a muli-argument command to telescope_\n\nAdding more arguments can be done by comma separating them as shown in the\nexample below.  This command will run the silver-searcher, search for all\noccurences of nvim inside of a markdown file, and return only the filepaths so\nTelescope can pick from them.\n\n```vim\n:Telescope find_files find_command=ag,nvim,--md,-l\n```\n",
      "summary": "Many command line tools can output a list of files, this is quite powerful. I often want to search for something, then open it from a fuzzy picker. This can...",
      "date_published": "2021-12-27T20:24:48Z",
      "date_modified": "2021-12-27T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-hidden-files/",
      "url": "https://go.waylonwalker.com/nvim-telescope-hidden-files/",
      "title": "Finding hidden (dotfiles) using Telescope in neovim",
      "content_html": "\u003cp\u003eFinding hidden files using Telescope as you fuzzy file finder is not too\nhard, its a single flag passed in.  Then it will use whichever file\nfinder it can find [‘fd’, ‘fdfind’, ‘rg –files’, ‘find’, or ‘where’] in\nthat order.  These tools each have their own way of handling hidden\nfiles, but telescope takes care of that so all you need to do is pass in\n\u003ccode\u003ehidden=true\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eI have this keymap set to help me list out all files including hidden\nfiles using the pnumonic go edit hidden.  I use ge for quite a few\ndifferent things to take me directly to a specific file or picker.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ennoremap\u003c/span\u003e \u003cspan class=\"n\"\u003egeh\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eTelescope\u003c/span\u003e \u003cspan class=\"n\"\u003efind_files\u003c/span\u003e \u003cspan class=\"n\"\u003ehidden\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003esee the\n\u003ca href=\"https://github.com/nvim-telescope/telescope.nvim/blob/82e3cc322ad87b262aef092cb7475e769740e83a/lua/telescope/builtin/files.lua#L167-L184\" 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\"\u003eimplementation\u003c/a\u003e\ntelescope finds your files.\u003c/p\u003e\n",
      "content_text": "\nFinding hidden files using Telescope as you fuzzy file finder is not too\nhard, its a single flag passed in.  Then it will use whichever file\nfinder it can find ['fd', 'fdfind', 'rg --files', 'find', or 'where'] in\nthat order.  These tools each have their own way of handling hidden\nfiles, but telescope takes care of that so all you need to do is pass in\n`hidden=true`.\n\nI have this keymap set to help me list out all files including hidden\nfiles using the pnumonic go edit hidden.  I use ge for quite a few\ndifferent things to take me directly to a specific file or picker.\n\n``` python\nnnoremap geh \u003ccmd\u003eTelescope find_files hidden=true\u003ccr\u003e\n```\n\n\nsee the\n[implementation](https://github.com/nvim-telescope/telescope.nvim/blob/82e3cc322ad87b262aef092cb7475e769740e83a/lua/telescope/builtin/files.lua#L167-L184)\ntelescope finds your files.\n",
      "summary": "Finding hidden files using Telescope as you fuzzy file finder is not too hard, its a single flag passed in. Then it will use whichever file finder it can...",
      "date_published": "2021-12-26T20:24:48Z",
      "date_modified": "2021-12-26T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ansible_install_fonts/",
      "url": "https://go.waylonwalker.com/ansible_install_fonts/",
      "title": "Installing system nerd-fonts with ansible",
      "content_html": "\u003cp\u003eLately I’ve been on a journey to really clean up my dotfiles, and I was\ncompletely missing fonts.  I noticed jumping into a new vm I had a bunch\nof broken devicons when using Telescope with the devicons plugins.\u003c/p\u003e\n\u003cp\u003eThis is one of those things that can be a total pain to get right on\nsome systems, and it’s so nice when it’s just there for you pretty much\nout of the box.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003emake sure your user fonts directory exists\u003c/li\u003e\n\u003cli\u003echech if the font you want exists on your machine\u003c/li\u003e\n\u003cli\u003edownload and unzip fonts into the fonts directory\u003c/li\u003e\n\u003cli\u003erepeat 2-3 for all the fonts you use on your system\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eensure fonts directory\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;HOME\u0026#39;) }}/.fonts\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003estate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edirectory\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHack exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ls {{ lookup(\u0026#39;env\u0026#39;, \u0026#39;HOME\u0026#39;) }}/.fonts/Hack*Nerd*Font*Complete*\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehack_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDownload Hack\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehack_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eansible.builtin.unarchive\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esrc\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Hack.zip\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003edest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;HOME\u0026#39;) }}/.fonts/\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eremote_src\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=2MEmsinxRK4\" class=\"hoverlink  has-avatar has-avatar-before\" 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\"\u003ehttps://www.youtube.com/watch?v=2MEmsinxRK4\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI made a YT based on this post\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"links\"\u003eLinks \u003ca href=\"#links\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eansible docs for \u003ca href=\"https://docs.ansible.com/ansible/latest/collections/ansible/builtin/unarchive_module.html\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/docs.ansible.com.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/docs.ansible.com.png\" class=\"has-avatar  has-avatar-before\"\u003ebuiltin.unarchive\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"/setup-yamlls/\" class=\"wikilink\" data-title=\"Setup a yaml schema | yamlls for a silky smooth setup\" data-description=\"I\u0026#39;ve gone far too long without a good setup for editing yaml files, I am missing out on autocomplete and proper diagnostics. This ends today as I setup...\" data-date=\"2021-12-03\" data-preview=\"I\u0026#39;ve gone far too long without a good setup for editing yaml files, I am missing out on autocomplete and proper diagnostics. This ends today as I setup...\"\u003eSetup a yaml schema | yamlls for a silky smooth setup\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003echeck out how I install yamlls using ansible\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nLately I've been on a journey to really clean up my dotfiles, and I was\ncompletely missing fonts.  I noticed jumping into a new vm I had a bunch\nof broken devicons when using Telescope with the devicons plugins.\n\nThis is one of those things that can be a total pain to get right on\nsome systems, and it's so nice when it's just there for you pretty much\nout of the box.\n\n1. make sure your user fonts directory exists\n2. chech if the font you want exists on your machine\n3. download and unzip fonts into the fonts directory\n4. repeat 2-3 for all the fonts you use on your system\n\n``` yaml\n- name: ensure fonts directory\n  file:\n    path: \"{{ lookup('env', 'HOME') }}/.fonts\"\n    state: directory\n\n- name: Hack exists\n  shell: \"ls {{ lookup('env', 'HOME') }}/.fonts/Hack*Nerd*Font*Complete*\"\n  register: hack_exists\n  ignore_errors: yes\n\n- name: Download Hack\n  when: hack_exists is failed\n  ansible.builtin.unarchive:\n    src: https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Hack.zip\n    dest: \"{{ lookup('env', 'HOME') }}/.fonts/\"\n    remote_src: yes\n\n```\n\n[https://www.youtube.com/watch?v=2MEmsinxRK4](https://www.youtube.com/watch?v=2MEmsinxRK4){.hoverlink}\n\n\u003e I made a YT based on this post\n\n## Links\n\n* ansible docs for [builtin.unarchive](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/unarchive_module.html)\n\n\u003ca href=\"/setup-yamlls/\" class=\"wikilink\" data-title=\"Setup a yaml schema | yamlls for a silky smooth setup\" data-description=\"I\u0026#39;ve gone far too long without a good setup for editing yaml files, I am missing out on autocomplete and proper diagnostics. This ends today as I setup...\" data-date=\"2021-12-03\"\u003eSetup a yaml schema | yamlls for a silky smooth setup\u003c/a\u003e\n\n\u003e check out how I install yamlls using ansible\n",
      "summary": "Lately I've been on a journey to really clean up my dotfiles, and I was completely missing fonts. I noticed jumping into a new vm I had a bunch of broken...",
      "date_published": "2021-12-25T20:24:48Z",
      "date_modified": "2021-12-25T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dotfiles",
        "ansible"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tpope-vim-abolish/",
      "url": "https://go.waylonwalker.com/tpope-vim-abolish/",
      "title": "⭐ tpope vim-abolish",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tpope/vim-abolish\" 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\"\u003evim-abolish\u003c/a\u003e by \u003ca href=\"https://github.com/tpope\" 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\"\u003etpope\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eabolish.vim: Work with several variants of a word at once\u003c/p\u003e\n",
      "content_text": "\n[vim-abolish](https://github.com/tpope/vim-abolish) by [tpope](https://github.com/tpope) is a game-changer in its space. Excited to see how it evolves.\n\nabolish.vim: Work with several variants of a word at once\n",
      "summary": "vim-abolish by tpope is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-12-24T21:06:22Z",
      "date_modified": "2021-12-24T21:06:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ansible_install_if_not_callable/",
      "url": "https://go.waylonwalker.com/ansible_install_if_not_callable/",
      "title": "Installing packages with ansible only if they do not exist",
      "content_html": "\u003cp\u003ePart of my neovim setup requires having the \u003ccode\u003eblack\u003c/code\u003e python formatter\ninstalled and callable.  I install it with \u003ccode\u003epipx\u003c/code\u003e so that I don’t have\nto manage a \u003ca href=\"/virtual-environment/\" class=\"glossary-term\" title=\"Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...\"\u003evirtual environment\u003c/a\u003e and have it available everywhere.  So\nfar this works well for me, if there are ever breaking changes I may\nneed to rethink this.\u003c/p\u003e\n\u003cp\u003ere-installing a bunch of things that are already installed can be quite\na waste and really add up to my ansible run time, so for most of my\nansible tasks that install a command like this I have been following\nthis pattern.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003echeck if the command is installed with \u003ccode\u003ecommand -v \u0026lt;command\u0026gt;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eregister that step\u003c/li\u003e\n\u003cli\u003eignore if that step fails\u003c/li\u003e\n\u003cli\u003eadd a \u003ccode\u003ewhen: \u0026lt;xxx\u0026gt;_exists is failed\u003c/code\u003e condition to the step that\ninstalls that command.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003echeck is black installed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecommand -v black\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eregister\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eblack_exists\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eignore_errors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003eyes\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003einstall black\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ewhen\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eblack_exists is failed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epipx install black\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=MCFg6-W5SBI\" 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\"\u003ehttps://www.youtube.com/watch?v=MCFg6-W5SBI\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI made a video based on this post, check it out if its your thing\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nPart of my neovim setup requires having the `black` python formatter\ninstalled and callable.  I install it with `pipx` so that I don't have\nto manage a virtual environment and have it available everywhere.  So\nfar this works well for me, if there are ever breaking changes I may\nneed to rethink this.\n\nre-installing a bunch of things that are already installed can be quite\na waste and really add up to my ansible run time, so for most of my\nansible tasks that install a command like this I have been following\nthis pattern.\n\n1. check if the command is installed with `command -v \u003ccommand\u003e`\n2. register that step\n3. ignore if that step fails\n4. add a `when: \u003cxxx\u003e_exists is failed` condition to the step that\n   installs that command.\n\n``` yaml\n- name: check is black installed\n  shell: command -v black\n  register: black_exists\n  ignore_errors: yes\n\n- name: install black\n  when: black_exists is failed\n  shell: pipx install black\n```\n\nhttps://www.youtube.com/watch?v=MCFg6-W5SBI\n\n\u003e I made a video based on this post, check it out if its your thing\n",
      "summary": "Part of my neovim setup requires having the python formatter installed and callable. I install it with so that I don't have to manage a virtual environment...",
      "date_published": "2021-12-24T20:24:48Z",
      "date_modified": "2021-12-24T20:24:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "ansible"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dunder_rich/",
      "url": "https://go.waylonwalker.com/dunder_rich/",
      "title": "Adding __rich__ methods to python classes",
      "content_html": "\u003cp\u003eAdding a \u003ccode\u003e__render__\u003c/code\u003e method that returns a rich renderable to any python class\nmakes it display this output if printed with rich.  This also includes being\nnested inside a rich Layout.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003erich\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003erich.panel\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eShowMe\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003e__rich__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ePanel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;hello\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eborder_style\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;gold1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erich\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eShowMe\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/dunder_rich_showme.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/dunder_rich_showme.png\" alt=\"results of printing ShowMe with rich\"/ data-glightbox=\"description: results of printing ShowMe with rich\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nAdding a `__render__` method that returns a rich renderable to any python class\nmakes it display this output if printed with rich.  This also includes being\nnested inside a rich Layout.\n\n\n``` python\nimport rich\nfrom rich.panel import Panel\n\n\nclass ShowMe:\n    def __rich__(self):\n        return Panel(\"hello\", border_style=\"gold1\")\n\n\nif __name__ == \"__main__\":\n    rich.print(ShowMe())\n```\n\n![results of printing ShowMe with rich](https://images.waylonwalker.com/dunder_rich_showme.png)\n",
      "summary": "Adding a method that returns a rich renderable to any python class makes it display this output if printed with rich. This also includes being nested inside...",
      "date_published": "2021-12-23T19:34:18Z",
      "date_modified": "2021-12-23T19:34:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python",
        "rich"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fugitive-commit-verbose/",
      "url": "https://go.waylonwalker.com/fugitive-commit-verbose/",
      "title": "fugitive verbose commit",
      "content_html": "\u003cp\u003eFugitive comes with a pretty sick way to commit files and see the diff at the\nsame time with verbose commit.  Opening the fugitive menu with \u003ccode\u003e:G\u003c/code\u003e brings up\nyour \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e status, you can stage files with \u003ccode\u003es\u003c/code\u003e, unstage them with \u003ccode\u003eu\u003c/code\u003e, toggle\nthem with \u003ccode\u003e-\u003c/code\u003e, and toggle their diff with \u003ccode\u003e\u0026gt;\u003c/code\u003e.  Once you have staged your files\nfor commit, you can commit with \u003ccode\u003ecc\u003c/code\u003e, but today I found that you can commit\nverbose with \u003ccode\u003ecvc\u003c/code\u003e.  This brings up not only a commit widow with your git\nstatus shown, but the diff that you are about to commit.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://images.waylonwalker.com/fugitive-verbose-commit.png\" class=\"glightbox-link\"\u003e\u003cimg class=\"glightbox\" src=\"https://images.waylonwalker.com/fugitive-verbose-commit.png\" alt=\"fugitive verbose commit example\"/ data-glightbox=\"description: fugitive verbose commit example\"\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cblockquote\u003e\n\u003cp\u003eexample of a verbose commit in fugitive\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nFugitive comes with a pretty sick way to commit files and see the diff at the\nsame time with verbose commit.  Opening the fugitive menu with `:G` brings up\nyour git status, you can stage files with `s`, unstage them with `u`, toggle\nthem with `-`, and toggle their diff with `\u003e`.  Once you have staged your files\nfor commit, you can commit with `cc`, but today I found that you can commit\nverbose with `cvc`.  This brings up not only a commit widow with your git\nstatus shown, but the diff that you are about to commit.\n\n![fugitive verbose commit example](https://images.waylonwalker.com/fugitive-verbose-commit.png)\n\n\u003e example of a verbose commit in fugitive\n",
      "summary": "Fugitive comes with a pretty sick way to commit files and see the diff at the same time with verbose commit. Opening the fugitive menu with brings up your...",
      "date_published": "2021-12-22T19:34:18Z",
      "date_modified": "2021-12-22T19:34:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git",
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/xandrade-talkpython-fm-notable-packages/",
      "url": "https://go.waylonwalker.com/xandrade-talkpython-fm-notable-packages/",
      "title": "⭐ xandrade Talkpython.fm-Notable-Packages",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/xandrade/Talkpython.fm-Notable-Packages\" 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\"\u003eTalkpython.fm-Notable-Packages\u003c/a\u003e from \u003ca href=\"https://github.com/xandrade\" 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\"\u003exandrade\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003e[unofficial] Talkpython.fm podcast notable PyPI packages compilation\u003c/p\u003e\n",
      "content_text": "\nI came across [Talkpython.fm-Notable-Packages](https://github.com/xandrade/Talkpython.fm-Notable-Packages) from [xandrade](https://github.com/xandrade), and it's packed with great features and ideas.\n\n[unofficial] Talkpython.fm podcast notable PyPI packages compilation\n",
      "summary": "I came across Talkpython.fm-Notable-Packages from xandrade, and it's packed with great features and ideas.",
      "date_published": "2021-12-21T22:56:58Z",
      "date_modified": "2021-12-21T22:56:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-aoc-2021-kedro-playground/",
      "url": "https://go.waylonwalker.com/pypeaday-aoc-2021-kedro-playground/",
      "title": "⭐ pypeaday aoc-2021-kedro-playground",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/pypeaday/aoc-2021-kedro-playground\" 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\"\u003eaoc-2021-kedro-playground\u003c/a\u003e by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [aoc-2021-kedro-playground](https://github.com/pypeaday/aoc-2021-kedro-playground) by [pypeaday](https://github.com/pypeaday). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out aoc-2021-kedro-playground by pypeaday. It's a well-crafted project with great potential.",
      "date_published": "2021-12-17T21:05:51Z",
      "date_modified": "2021-12-17T21:05:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/elnappo-dotfiles/",
      "url": "https://go.waylonwalker.com/elnappo-dotfiles/",
      "title": "⭐ elnappo dotfiles",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/elnappo/dotfiles\" 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\"\u003edotfiles\u003c/a\u003e by \u003ca href=\"https://github.com/elnappo\" 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\"\u003eelnappo\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003emy .files - powered by Ansible\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [dotfiles](https://github.com/elnappo/dotfiles) by [elnappo](https://github.com/elnappo).\n\nmy .files - powered by Ansible\n",
      "summary": "Looking for inspiration? dotfiles by elnappo.",
      "date_published": "2021-12-11T06:03:43Z",
      "date_modified": "2021-12-11T06:03:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/borgmanjeremy-aoc_2021/",
      "url": "https://go.waylonwalker.com/borgmanjeremy-aoc_2021/",
      "title": "⭐ borgmanJeremy aoc_2021",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/borgmanJeremy/aoc_2021\" 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\"\u003eaoc_2021\u003c/a\u003e by \u003ca href=\"https://github.com/borgmanJeremy\" 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\"\u003eborgmanJeremy\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nJust starred [aoc_2021](https://github.com/borgmanJeremy/aoc_2021) by [borgmanJeremy](https://github.com/borgmanJeremy). It's an exciting project with a lot to offer.\n\nNo description available.\n",
      "summary": "Just starred aoc_2021 by borgmanJeremy. It's an exciting project with a lot to offer.",
      "date_published": "2021-12-03T01:42:54Z",
      "date_modified": "2021-12-03T01:42:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-aoc-2021/",
      "url": "https://go.waylonwalker.com/pypeaday-aoc-2021/",
      "title": "⭐ pypeaday aoc-2021",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/pypeaday/aoc-2021\" 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\"\u003eaoc-2021\u003c/a\u003e by \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eAdvent of Code 2021 repo\u003c/p\u003e\n",
      "content_text": "\nJust starred [aoc-2021](https://github.com/pypeaday/aoc-2021) by [pypeaday](https://github.com/pypeaday). It's an exciting project with a lot to offer.\n\nAdvent of Code 2021 repo\n",
      "summary": "Just starred aoc-2021 by pypeaday. It's an exciting project with a lot to offer.",
      "date_published": "2021-12-02T23:20:05Z",
      "date_modified": "2021-12-02T23:20:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/neovim-neovim/",
      "url": "https://go.waylonwalker.com/neovim-neovim/",
      "title": "⭐ neovim neovim",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/neovim/neovim\" 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\"\u003eneovim\u003c/a\u003e by \u003ca href=\"https://github.com/neovim\" 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\"\u003eneovim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eVim-fork focused on extensibility and usability\u003c/p\u003e\n",
      "content_text": "\nThe work on [neovim](https://github.com/neovim/neovim) by [neovim](https://github.com/neovim).\n\nVim-fork focused on extensibility and usability\n",
      "summary": "The work on neovim by neovim.",
      "date_published": "2021-11-30T18:22:35Z",
      "date_modified": "2021-11-30T18:22:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lewis6991-gitsigns-nvim/",
      "url": "https://go.waylonwalker.com/lewis6991-gitsigns-nvim/",
      "title": "⭐ lewis6991 gitsigns.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/lewis6991\" 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\"\u003elewis6991\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/lewis6991/gitsigns.nvim\" 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\"\u003egitsigns.nvim\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e integration for buffers\u003c/p\u003e\n",
      "content_text": "\n[lewis6991](https://github.com/lewis6991) has done a fantastic job with [gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim). Highly recommend taking a look.\n\nGit integration for buffers\n",
      "summary": "lewis6991 has done a fantastic job with gitsigns.nvim. Highly recommend taking a look.",
      "date_published": "2021-11-30T17:45:28Z",
      "date_modified": "2021-11-30T17:45:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thoughtbot-dotfiles/",
      "url": "https://go.waylonwalker.com/thoughtbot-dotfiles/",
      "title": "⭐ thoughtbot dotfiles",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/thoughtbot/dotfiles\" 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\"\u003edotfiles\u003c/a\u003e by \u003ca href=\"https://github.com/thoughtbot\" 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\"\u003ethoughtbot\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA set of vim, zsh, \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e, and tmux configuration files.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [dotfiles](https://github.com/thoughtbot/dotfiles) by [thoughtbot](https://github.com/thoughtbot).\n\nA set of vim, zsh, git, and tmux configuration files.\n",
      "summary": "Looking for inspiration? dotfiles by thoughtbot.",
      "date_published": "2021-11-17T15:03:00Z",
      "date_modified": "2021-11-17T15:03:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-telescope-media-files-nvim/",
      "url": "https://go.waylonwalker.com/nvim-telescope-telescope-media-files-nvim/",
      "title": "⭐ nvim-telescope telescope-media-files.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/nvim-telescope/telescope-media-files.nvim\" 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\"\u003etelescope-media-files.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/nvim-telescope\" 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\"\u003envim-telescope\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eTelescope extension to preview media files using Ueberzug.\u003c/p\u003e\n",
      "content_text": "\n[telescope-media-files.nvim](https://github.com/nvim-telescope/telescope-media-files.nvim) by [nvim-telescope](https://github.com/nvim-telescope) is a game-changer in its space. Excited to see how it evolves.\n\nTelescope extension to preview media files using Ueberzug.\n",
      "summary": "telescope-media-files.nvim by nvim-telescope is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-11-08T16:27:08Z",
      "date_modified": "2021-11-08T16:27:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sqlfluff-sqlfluff/",
      "url": "https://go.waylonwalker.com/sqlfluff-sqlfluff/",
      "title": "⭐ sqlfluff sqlfluff",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/sqlfluff/sqlfluff\" 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\"\u003esqlfluff\u003c/a\u003e by \u003ca href=\"https://github.com/sqlfluff\" 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\"\u003esqlfluff\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA modular SQL linter and auto-formatter with support for multiple dialects and templated code.\u003c/p\u003e\n",
      "content_text": "\n[sqlfluff](https://github.com/sqlfluff/sqlfluff) by [sqlfluff](https://github.com/sqlfluff) is a game-changer in its space. Excited to see how it evolves.\n\nA modular SQL linter and auto-formatter with support for multiple dialects and templated code.\n",
      "summary": "sqlfluff by sqlfluff is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-11-06T18:22:45Z",
      "date_modified": "2021-11-06T18:22:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hrsh7th-cmp-copilot/",
      "url": "https://go.waylonwalker.com/hrsh7th-cmp-copilot/",
      "title": "⭐ hrsh7th cmp-copilot",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/hrsh7th/cmp-copilot\" 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\"\u003ecmp-copilot\u003c/a\u003e by \u003ca href=\"https://github.com/hrsh7th\" 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\"\u003ehrsh7th\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003ecopilot.vim source for nvim-cmp\u003c/p\u003e\n",
      "content_text": "\n[cmp-copilot](https://github.com/hrsh7th/cmp-copilot) by [hrsh7th](https://github.com/hrsh7th) is a game-changer in its space. Excited to see how it evolves.\n\ncopilot.vim source for nvim-cmp\n",
      "summary": "cmp-copilot by hrsh7th is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-11-04T20:01:18Z",
      "date_modified": "2021-11-04T20:01:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jessicategner-pypandoc/",
      "url": "https://go.waylonwalker.com/jessicategner-pypandoc/",
      "title": "⭐ JessicaTegner pypandoc",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/JessicaTegner/pypandoc\" 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\"\u003epypandoc\u003c/a\u003e by \u003ca href=\"https://github.com/JessicaTegner\" 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\"\u003eJessicaTegner\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThin wrapper for “pandoc” (MIT)\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [pypandoc](https://github.com/JessicaTegner/pypandoc) by [JessicaTegner](https://github.com/JessicaTegner).\n\nThin wrapper for \"pandoc\" (MIT)\n",
      "summary": "Looking for inspiration? pypandoc by JessicaTegner.",
      "date_published": "2021-10-30T13:58:12Z",
      "date_modified": "2021-10-30T13:58:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/abhinavsp0730-kedro-wdbc-tf/",
      "url": "https://go.waylonwalker.com/abhinavsp0730-kedro-wdbc-tf/",
      "title": "⭐ abhinavsp0730 kedro-wdbc-tf",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/abhinavsp0730/kedro-wdbc-tf\" 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\"\u003ekedro-wdbc-tf\u003c/a\u003e from \u003ca href=\"https://github.com/abhinavsp0730\" 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\"\u003eabhinavsp0730\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [kedro-wdbc-tf](https://github.com/abhinavsp0730/kedro-wdbc-tf) from [abhinavsp0730](https://github.com/abhinavsp0730).\n\nNo description available.\n",
      "summary": "I'm impressed by kedro-wdbc-tf from abhinavsp0730.",
      "date_published": "2021-10-30T13:56:56Z",
      "date_modified": "2021-10-30T13:56:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/chipsenkbeil-distant-nvim/",
      "url": "https://go.waylonwalker.com/chipsenkbeil-distant-nvim/",
      "title": "⭐ chipsenkbeil distant.nvim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/chipsenkbeil\" 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\"\u003echipsenkbeil\u003c/a\u003e and their project \u003ca href=\"https://github.com/chipsenkbeil/distant.nvim\" 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\"\u003edistant.nvim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🚧 (Alpha stage software) Edit files, run programs, and work with LSP on a remote machine from the comfort of your local environment 🚧\u003c/p\u003e\n",
      "content_text": "\nCheck out [chipsenkbeil](https://github.com/chipsenkbeil) and their project [distant.nvim](https://github.com/chipsenkbeil/distant.nvim).\n\n🚧 (Alpha stage software) Edit files, run programs, and work with LSP on a remote machine from the comfort of your local environment 🚧\n",
      "summary": "Check out chipsenkbeil and their project distant.nvim.",
      "date_published": "2021-10-29T18:58:53Z",
      "date_modified": "2021-10-29T18:58:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tesseract-ocr-tesseract/",
      "url": "https://go.waylonwalker.com/tesseract-ocr-tesseract/",
      "title": "⭐ tesseract-ocr tesseract",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tesseract-ocr/tesseract\" 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\"\u003etesseract\u003c/a\u003e by \u003ca href=\"https://github.com/tesseract-ocr\" 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\"\u003etesseract-ocr\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eTesseract Open Source OCR Engine (main repository)\u003c/p\u003e\n",
      "content_text": "\n[tesseract](https://github.com/tesseract-ocr/tesseract) by [tesseract-ocr](https://github.com/tesseract-ocr) is a game-changer in its space. Excited to see how it evolves.\n\nTesseract Open Source OCR Engine (main repository)\n",
      "summary": "tesseract by tesseract-ocr is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-10-28T20:35:39Z",
      "date_modified": "2021-10-28T20:35:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kkharji-sqlite-lua/",
      "url": "https://go.waylonwalker.com/kkharji-sqlite-lua/",
      "title": "⭐ kkharji sqlite.lua",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/kkharji/sqlite.lua\" 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\"\u003esqlite.lua\u003c/a\u003e by \u003ca href=\"https://github.com/kkharji\" 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\"\u003ekkharji\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSQLite LuaJIT binding with a very simple api.\u003c/p\u003e\n",
      "content_text": "\nThe work on [sqlite.lua](https://github.com/kkharji/sqlite.lua) by [kkharji](https://github.com/kkharji).\n\nSQLite LuaJIT binding with a very simple api.\n",
      "summary": "The work on sqlite.lua by kkharji.",
      "date_published": "2021-10-20T18:54:59Z",
      "date_modified": "2021-10-20T18:54:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-telescope-frecency-nvim/",
      "url": "https://go.waylonwalker.com/nvim-telescope-telescope-frecency-nvim/",
      "title": "⭐ nvim-telescope telescope-frecency.nvim",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/nvim-telescope/telescope-frecency.nvim\" 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\"\u003etelescope-frecency.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/nvim-telescope\" 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\"\u003envim-telescope\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA telescope.nvim extension that offers intelligent prioritization when selecting files from your editing history.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [telescope-frecency.nvim](https://github.com/nvim-telescope/telescope-frecency.nvim) from [nvim-telescope](https://github.com/nvim-telescope).\n\nA telescope.nvim extension that offers intelligent prioritization when selecting files from your editing history.\n",
      "summary": "I'm impressed by telescope-frecency.nvim from nvim-telescope.",
      "date_published": "2021-10-20T18:51:16Z",
      "date_modified": "2021-10-20T18:51:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cmgriffing-flick-it/",
      "url": "https://go.waylonwalker.com/cmgriffing-flick-it/",
      "title": "⭐ cmgriffing flick-it",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/cmgriffing/flick-it\" 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\"\u003eflick-it\u003c/a\u003e by \u003ca href=\"https://github.com/cmgriffing\" 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\"\u003ecmgriffing\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eAn OBS overlay game similar to the !drop game.\u003c/p\u003e\n",
      "content_text": "\nCheck out [flick-it](https://github.com/cmgriffing/flick-it) by [cmgriffing](https://github.com/cmgriffing). It's a well-crafted project with great potential.\n\nAn OBS overlay game similar to the !drop game.\n",
      "summary": "Check out flick-it by cmgriffing. It's a well-crafted project with great potential.",
      "date_published": "2021-10-19T21:22:23Z",
      "date_modified": "2021-10-19T21:22:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/andrewradev-diffurcate-vim/",
      "url": "https://go.waylonwalker.com/andrewradev-diffurcate-vim/",
      "title": "⭐ AndrewRadev diffurcate.vim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/AndrewRadev/diffurcate.vim\" 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\"\u003ediffurcate.vim\u003c/a\u003e by \u003ca href=\"https://github.com/AndrewRadev\" 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\"\u003eAndrewRadev\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eSplit a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e diff into separate files\u003c/p\u003e\n",
      "content_text": "\nCheck out [diffurcate.vim](https://github.com/AndrewRadev/diffurcate.vim) by [AndrewRadev](https://github.com/AndrewRadev). It's a well-crafted project with great potential.\n\nSplit a git diff into separate files\n",
      "summary": "Check out diffurcate.vim by AndrewRadev. It's a well-crafted project with great potential.",
      "date_published": "2021-10-19T13:59:34Z",
      "date_modified": "2021-10-19T13:59:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/codelucas-newspaper/",
      "url": "https://go.waylonwalker.com/codelucas-newspaper/",
      "title": "⭐ codelucas newspaper",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/codelucas\" 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\"\u003ecodelucas\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/codelucas/newspaper\" 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\"\u003enewspaper\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003enewspaper3k is a news, full-text, and article metadata extraction in Python 3. Advanced docs:\u003c/p\u003e\n",
      "content_text": "\n[codelucas](https://github.com/codelucas) has done a fantastic job with [newspaper](https://github.com/codelucas/newspaper). Highly recommend taking a look.\n\nnewspaper3k is a news, full-text, and article metadata extraction in Python 3. Advanced docs:\n",
      "summary": "codelucas has done a fantastic job with newspaper. Highly recommend taking a look.",
      "date_published": "2021-10-17T20:14:37Z",
      "date_modified": "2021-10-17T20:14:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/delta-io-delta-rs/",
      "url": "https://go.waylonwalker.com/delta-io-delta-rs/",
      "title": "⭐ delta-io delta-rs",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/delta-io/delta-rs\" 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\"\u003edelta-rs\u003c/a\u003e by \u003ca href=\"https://github.com/delta-io\" 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\"\u003edelta-io\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA native Rust library for Delta Lake, with bindings into Python\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [delta-rs](https://github.com/delta-io/delta-rs) by [delta-io](https://github.com/delta-io), and it's truly impressive.\n\nA native Rust library for Delta Lake, with bindings into Python\n",
      "summary": "I recently discovered delta-rs by delta-io, and it's truly impressive.",
      "date_published": "2021-10-15T11:59:36Z",
      "date_modified": "2021-10-15T11:59:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rinx-cmp-skkeleton/",
      "url": "https://go.waylonwalker.com/rinx-cmp-skkeleton/",
      "title": "⭐ rinx cmp-skkeleton",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/rinx/cmp-skkeleton\" 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\"\u003ecmp-skkeleton\u003c/a\u003e by \u003ca href=\"https://github.com/rinx\" 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\"\u003erinx\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eskkeleton source for nvim-cmp\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [cmp-skkeleton](https://github.com/rinx/cmp-skkeleton) by [rinx](https://github.com/rinx), and it's truly impressive.\n\nskkeleton source for nvim-cmp\n",
      "summary": "I recently discovered cmp-skkeleton by rinx, and it's truly impressive.",
      "date_published": "2021-10-12T14:17:06Z",
      "date_modified": "2021-10-12T14:17:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nedbat-coveragepy/",
      "url": "https://go.waylonwalker.com/nedbat-coveragepy/",
      "title": "⭐ nedbat coveragepy",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/nedbat/coveragepy\" 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\"\u003ecoveragepy\u003c/a\u003e by \u003ca href=\"https://github.com/nedbat\" 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\"\u003enedbat\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe code coverage tool for Python\u003c/p\u003e\n",
      "content_text": "\nThe work on [coveragepy](https://github.com/nedbat/coveragepy) by [nedbat](https://github.com/nedbat).\n\nThe code coverage tool for Python\n",
      "summary": "The work on coveragepy by nedbat.",
      "date_published": "2021-10-11T21:48:18Z",
      "date_modified": "2021-10-11T21:48:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/coveragepy-coveragepy/",
      "url": "https://go.waylonwalker.com/coveragepy-coveragepy/",
      "title": "⭐ coveragepy coveragepy",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/coveragepy\" 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\"\u003ecoveragepy’s\u003c/a\u003e project \u003ca href=\"https://github.com/coveragepy/coveragepy\" 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\"\u003ecoveragepy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe code coverage tool for Python\u003c/p\u003e\n",
      "content_text": "\nI like [coveragepy's](https://github.com/coveragepy) project [coveragepy](https://github.com/coveragepy/coveragepy).\n\nThe code coverage tool for Python\n",
      "summary": "I like coveragepy's project coveragepy.",
      "date_published": "2021-10-11T21:48:18Z",
      "date_modified": "2021-10-11T21:48:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pytest-dev-pytest-cov/",
      "url": "https://go.waylonwalker.com/pytest-dev-pytest-cov/",
      "title": "⭐ pytest-dev pytest-cov",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/pytest-dev\" 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\"\u003epytest-dev’s\u003c/a\u003e project \u003ca href=\"https://github.com/pytest-dev/pytest-cov\" 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\"\u003epytest-cov\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCoverage plugin for pytest.\u003c/p\u003e\n",
      "content_text": "\nI like [pytest-dev's](https://github.com/pytest-dev) project [pytest-cov](https://github.com/pytest-dev/pytest-cov).\n\nCoverage plugin for pytest.\n",
      "summary": "I like pytest-dev's project pytest-cov.",
      "date_published": "2021-10-11T21:46:17Z",
      "date_modified": "2021-10-11T21:46:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-ansible/",
      "url": "https://go.waylonwalker.com/theprimeagen-ansible/",
      "title": "⭐ ThePrimeagen ansible",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ThePrimeagen/ansible\" 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\"\u003eansible\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nThe work on [ansible](https://github.com/ThePrimeagen/ansible) by [ThePrimeagen](https://github.com/ThePrimeagen).\n\nNo description available.\n",
      "summary": "The work on ansible by ThePrimeagen.",
      "date_published": "2021-10-01T13:35:28Z",
      "date_modified": "2021-10-01T13:35:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-telegraph-nvim/",
      "url": "https://go.waylonwalker.com/waylonwalker-telegraph-nvim/",
      "title": "⭐ WaylonWalker Telegraph.nvim",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/WaylonWalker/Telegraph.nvim\" 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\"\u003eTelegraph.nvim\u003c/a\u003e from \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/p\u003e\n\u003cp\u003eSend commands system commands in an elegant way\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [Telegraph.nvim](https://github.com/WaylonWalker/Telegraph.nvim) from [WaylonWalker](https://github.com/WaylonWalker).\n\nSend commands system commands in an elegant way\n",
      "summary": "I'm impressed by Telegraph.nvim from WaylonWalker.",
      "date_published": "2021-09-13T02:30:43Z",
      "date_modified": "2021-09-13T02:30:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jacobsimpson-nvim-example-lua-plugin/",
      "url": "https://go.waylonwalker.com/jacobsimpson-nvim-example-lua-plugin/",
      "title": "⭐ jacobsimpson nvim-example-lua-plugin",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/jacobsimpson/nvim-example-lua-plugin\" 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\"\u003envim-example-lua-plugin\u003c/a\u003e from \u003ca href=\"https://github.com/jacobsimpson\" 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\"\u003ejacobsimpson\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA simple Neovim Lua plugin using the Lua embedded in Neovim, suitable as a template.\u003c/p\u003e\n",
      "content_text": "\nI came across [nvim-example-lua-plugin](https://github.com/jacobsimpson/nvim-example-lua-plugin) from [jacobsimpson](https://github.com/jacobsimpson), and it's packed with great features and ideas.\n\nA simple Neovim Lua plugin using the Lua embedded in Neovim, suitable as a template.\n",
      "summary": "I came across nvim-example-lua-plugin from jacobsimpson, and it's packed with great features and ideas.",
      "date_published": "2021-09-09T14:39:14Z",
      "date_modified": "2021-09-09T14:39:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/aeturrell-skimpy/",
      "url": "https://go.waylonwalker.com/aeturrell-skimpy/",
      "title": "⭐ aeturrell skimpy",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/aeturrell/skimpy\" 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\"\u003eskimpy\u003c/a\u003e from \u003ca href=\"https://github.com/aeturrell\" 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\"\u003eaeturrell\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eskimpy is a light weight tool that provides summary statistics about variables in data frames within the console.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [skimpy](https://github.com/aeturrell/skimpy) from [aeturrell](https://github.com/aeturrell).\n\nskimpy is a light weight tool that provides summary statistics about variables in data frames within the console.\n",
      "summary": "I'm impressed by skimpy from aeturrell.",
      "date_published": "2021-09-05T19:52:38Z",
      "date_modified": "2021-09-05T19:52:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mobilemancer-windows-terminal-aurelia/",
      "url": "https://go.waylonwalker.com/mobilemancer-windows-terminal-aurelia/",
      "title": "⭐ mobilemancer windows-terminal-aurelia",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/mobilemancer\" 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\"\u003emobilemancer’s\u003c/a\u003e project \u003ca href=\"https://github.com/mobilemancer/windows-terminal-aurelia\" 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\"\u003ewindows-terminal-aurelia\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAurelia inspired Windows Terminal theme\u003c/p\u003e\n",
      "content_text": "\nI like [mobilemancer's](https://github.com/mobilemancer) project [windows-terminal-aurelia](https://github.com/mobilemancer/windows-terminal-aurelia).\n\nAurelia inspired Windows Terminal theme\n",
      "summary": "I like mobilemancer's project windows-terminal-aurelia.",
      "date_published": "2021-09-03T21:28:35Z",
      "date_modified": "2021-09-03T21:28:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dstein64-vim-startuptime/",
      "url": "https://go.waylonwalker.com/dstein64-vim-startuptime/",
      "title": "⭐ dstein64 vim-startuptime",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/dstein64/vim-startuptime\" 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\"\u003evim-startuptime\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/dstein64\" 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\"\u003edstein64\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA plugin for viewing Vim and Neovim startup event timing information.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [vim-startuptime](https://github.com/dstein64/vim-startuptime), an amazing project by [dstein64](https://github.com/dstein64). It's worth exploring!\n\nA plugin for viewing Vim and Neovim startup event timing information.\n",
      "summary": "I'm really excited about vim-startuptime, an amazing project by dstein64. It's worth exploring!",
      "date_published": "2021-09-03T03:08:37Z",
      "date_modified": "2021-09-03T03:08:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wbthomason-packer-nvim/",
      "url": "https://go.waylonwalker.com/wbthomason-packer-nvim/",
      "title": "⭐ wbthomason packer.nvim",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/wbthomason\" 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\"\u003ewbthomason’s\u003c/a\u003e project \u003ca href=\"https://github.com/wbthomason/packer.nvim\" 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\"\u003epacker.nvim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config\u003c/p\u003e\n",
      "content_text": "\nI like [wbthomason's](https://github.com/wbthomason) project [packer.nvim](https://github.com/wbthomason/packer.nvim).\n\nA use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config\n",
      "summary": "I like wbthomason's project packer.nvim.",
      "date_published": "2021-08-30T13:39:39Z",
      "date_modified": "2021-08-30T13:39:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/neovim-nvim-lspconfig/",
      "url": "https://go.waylonwalker.com/neovim-nvim-lspconfig/",
      "title": "⭐ neovim nvim-lspconfig",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/neovim/nvim-lspconfig\" 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\"\u003envim-lspconfig\u003c/a\u003e by \u003ca href=\"https://github.com/neovim\" 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\"\u003eneovim\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eQuickstart configs for Nvim LSP\u003c/p\u003e\n",
      "content_text": "\nJust starred [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) by [neovim](https://github.com/neovim). It's an exciting project with a lot to offer.\n\nQuickstart configs for Nvim LSP\n",
      "summary": "Just starred nvim-lspconfig by neovim. It's an exciting project with a lot to offer.",
      "date_published": "2021-08-30T13:23:18Z",
      "date_modified": "2021-08-30T13:23:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-treesitter-nvim-treesitter/",
      "url": "https://go.waylonwalker.com/nvim-treesitter-nvim-treesitter/",
      "title": "⭐ nvim-treesitter nvim-treesitter",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/nvim-treesitter/nvim-treesitter\" 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\"\u003envim-treesitter\u003c/a\u003e, created by \u003ca href=\"https://github.com/nvim-treesitter\" 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\"\u003envim-treesitter\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNvim Treesitter configurations and abstraction layer\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter), created by [nvim-treesitter](https://github.com/nvim-treesitter).\n\nNvim Treesitter configurations and abstraction layer\n",
      "summary": "If you're into interesting projects, don't miss out on nvim-treesitter, created by nvim-treesitter.",
      "date_published": "2021-08-30T13:23:17Z",
      "date_modified": "2021-08-30T13:23:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/andymass-vim-matchup/",
      "url": "https://go.waylonwalker.com/andymass-vim-matchup/",
      "title": "⭐ andymass vim-matchup",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/andymass/vim-matchup\" 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\"\u003evim-matchup\u003c/a\u003e by \u003ca href=\"https://github.com/andymass\" 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\"\u003eandymass\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003evim match-up: even better % 👊 navigate and highlight matching words 👊 modern matchit and matchparen.  Supports both vim and neovim + tree-sitter.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [vim-matchup](https://github.com/andymass/vim-matchup) by [andymass](https://github.com/andymass).\n\nvim match-up: even better % :facepunch: navigate and highlight matching words :facepunch: modern matchit and matchparen.  Supports both vim and neovim + tree-sitter.\n",
      "summary": "Looking for inspiration? vim-matchup by andymass.",
      "date_published": "2021-08-30T13:23:11Z",
      "date_modified": "2021-08-30T13:23:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/david-kunz-treesitter-unit/",
      "url": "https://go.waylonwalker.com/david-kunz-treesitter-unit/",
      "title": "⭐ David-Kunz treesitter-unit",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/David-Kunz/treesitter-unit\" 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\"\u003etreesitter-unit\u003c/a\u003e by \u003ca href=\"https://github.com/David-Kunz\" 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\"\u003eDavid-Kunz\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA Neovim plugin to deal with treesitter units\u003c/p\u003e\n",
      "content_text": "\n[treesitter-unit](https://github.com/David-Kunz/treesitter-unit) by [David-Kunz](https://github.com/David-Kunz) is a game-changer in its space. Excited to see how it evolves.\n\nA Neovim plugin to deal with treesitter units\n",
      "summary": "treesitter-unit by David-Kunz is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-08-28T21:38:34Z",
      "date_modified": "2021-08-28T21:38:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/projekt0n-circles-nvim/",
      "url": "https://go.waylonwalker.com/projekt0n-circles-nvim/",
      "title": "⭐ projekt0n circles.nvim",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/projekt0n/circles.nvim\" 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\"\u003ecircles.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/projekt0n\" 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\"\u003eprojekt0n\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003euniform icons for neovim\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [circles.nvim](https://github.com/projekt0n/circles.nvim) from [projekt0n](https://github.com/projekt0n).\n\nuniform icons for neovim\n",
      "summary": "I'm impressed by circles.nvim from projekt0n.",
      "date_published": "2021-08-22T14:08:18Z",
      "date_modified": "2021-08-22T14:08:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/acksld-nvim-neoclip-lua/",
      "url": "https://go.waylonwalker.com/acksld-nvim-neoclip-lua/",
      "title": "⭐ AckslD nvim-neoclip.lua",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/AckslD\" 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\"\u003eAckslD\u003c/a\u003e and their project \u003ca href=\"https://github.com/AckslD/nvim-neoclip.lua\" 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\"\u003envim-neoclip.lua\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eClipboard manager neovim plugin with telescope integration\u003c/p\u003e\n",
      "content_text": "\nCheck out [AckslD](https://github.com/AckslD) and their project [nvim-neoclip.lua](https://github.com/AckslD/nvim-neoclip.lua).\n\nClipboard manager neovim plugin with telescope integration\n",
      "summary": "Check out AckslD and their project nvim-neoclip.lua.",
      "date_published": "2021-08-18T00:14:52Z",
      "date_modified": "2021-08-18T00:14:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/heathdbrown-python_code_tips/",
      "url": "https://go.waylonwalker.com/heathdbrown-python_code_tips/",
      "title": "⭐ heathdbrown python_code_tips",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/heathdbrown/python_code_tips\" 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\"\u003epython_code_tips\u003c/a\u003e, created by \u003ca href=\"https://github.com/heathdbrown\" 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\"\u003eheathdbrown\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [python_code_tips](https://github.com/heathdbrown/python_code_tips), created by [heathdbrown](https://github.com/heathdbrown).\n\nNo description available.\n",
      "summary": "If you're into interesting projects, don't miss out on python_tips, created by heathdbrown.",
      "date_published": "2021-08-11T14:44:12Z",
      "date_modified": "2021-08-11T14:44:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bigskysoftware-htmx/",
      "url": "https://go.waylonwalker.com/bigskysoftware-htmx/",
      "title": "⭐ bigskysoftware htmx",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/bigskysoftware/htmx\" 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\"\u003ehtmx\u003c/a\u003e from \u003ca href=\"https://github.com/bigskysoftware\" 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\"\u003ebigskysoftware\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u0026lt;/\u0026gt; \u003ca href=\"/htmx/\" class=\"glossary-term\" title=\"htmx is a frontend javascript library for creating dynamic web applications.\"\u003ehtmx\u003c/a\u003e - high power tools for \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\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [htmx](https://github.com/bigskysoftware/htmx) from [bigskysoftware](https://github.com/bigskysoftware).\n\n\u003c/\u003e htmx - high power tools for HTML\n",
      "summary": "I'm impressed by htmx from bigskysoftware.",
      "date_published": "2021-08-08T20:16:53Z",
      "date_modified": "2021-08-08T20:16:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-vim-nav-playground/",
      "url": "https://go.waylonwalker.com/theprimeagen-vim-nav-playground/",
      "title": "⭐ ThePrimeagen vim-nav-playground",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e and their project \u003ca href=\"https://github.com/ThePrimeagen/vim-nav-playground\" 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\"\u003evim-nav-playground\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [ThePrimeagen](https://github.com/ThePrimeagen) and their project [vim-nav-playground](https://github.com/ThePrimeagen/vim-nav-playground).\n\nNo description available.\n",
      "summary": "Check out ThePrimeagen and their project vim-nav-playground.",
      "date_published": "2021-08-02T15:33:11Z",
      "date_modified": "2021-08-02T15:33:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-vim-fundamentals/",
      "url": "https://go.waylonwalker.com/theprimeagen-vim-fundamentals/",
      "title": "⭐ ThePrimeagen vim-fundamentals",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/ThePrimeagen/vim-fundamentals\" 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\"\u003evim-fundamentals\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [vim-fundamentals](https://github.com/ThePrimeagen/vim-fundamentals) by [ThePrimeagen](https://github.com/ThePrimeagen), and it's truly impressive.\n\nNo description available.\n",
      "summary": "I recently discovered vim-fundamentals by ThePrimeagen, and it's truly impressive.",
      "date_published": "2021-08-02T15:32:11Z",
      "date_modified": "2021-08-02T15:32:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/emkademy-jumpcutter/",
      "url": "https://go.waylonwalker.com/emkademy-jumpcutter/",
      "title": "⭐ emkademy jumpcutter",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/emkademy/jumpcutter\" 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\"\u003ejumpcutter\u003c/a\u003e from \u003ca href=\"https://github.com/emkademy\" 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\"\u003eemkademy\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eAutomatically jump-cut silent parts of your videos using Python\u003c/p\u003e\n",
      "content_text": "\nI came across [jumpcutter](https://github.com/emkademy/jumpcutter) from [emkademy](https://github.com/emkademy), and it's packed with great features and ideas.\n\nAutomatically jump-cut silent parts of your videos using Python\n",
      "summary": "I came across jumpcutter from emkademy, and it's packed with great features and ideas.",
      "date_published": "2021-07-24T18:49:57Z",
      "date_modified": "2021-07-24T18:49:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-refactoring-nvim/",
      "url": "https://go.waylonwalker.com/theprimeagen-refactoring-nvim/",
      "title": "⭐ ThePrimeagen refactoring.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/ThePrimeagen/refactoring.nvim\" 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\"\u003erefactoring.nvim\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eThe Refactoring library based off the Refactoring book by Martin Fowler\u003c/p\u003e\n",
      "content_text": "\n[ThePrimeagen](https://github.com/ThePrimeagen) has done a fantastic job with [refactoring.nvim](https://github.com/ThePrimeagen/refactoring.nvim). Highly recommend taking a look.\n\nThe Refactoring library based off the Refactoring book by Martin Fowler\n",
      "summary": "ThePrimeagen has done a fantastic job with refactoring.nvim. Highly recommend taking a look.",
      "date_published": "2021-07-20T15:44:22Z",
      "date_modified": "2021-07-20T15:44:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/laktak-extrakto/",
      "url": "https://go.waylonwalker.com/laktak-extrakto/",
      "title": "⭐ laktak extrakto",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/laktak\" 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\"\u003elaktak’s\u003c/a\u003e project \u003ca href=\"https://github.com/laktak/extrakto\" 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\"\u003eextrakto\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eextrakto for tmux - quickly select, copy/insert/complete text without a mouse\u003c/p\u003e\n",
      "content_text": "\nI like [laktak's](https://github.com/laktak) project [extrakto](https://github.com/laktak/extrakto).\n\nextrakto for tmux - quickly select, copy/insert/complete text without a mouse\n",
      "summary": "I like laktak's project extrakto.",
      "date_published": "2021-07-17T20:55:06Z",
      "date_modified": "2021-07-17T20:55:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mar1cx-kedro-toolkit/",
      "url": "https://go.waylonwalker.com/mar1cx-kedro-toolkit/",
      "title": "⭐ Mar1cX kedro-toolkit",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Mar1cX/kedro-toolkit\" 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\"\u003ekedro-toolkit\u003c/a\u003e by \u003ca href=\"https://github.com/Mar1cX\" 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\"\u003eMar1cX\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eKedro Toolkit is a VSCode Extension for the Kedro Framework\u003c/p\u003e\n",
      "content_text": "\nCheck out [kedro-toolkit](https://github.com/Mar1cX/kedro-toolkit) by [Mar1cX](https://github.com/Mar1cX). It's a well-crafted project with great potential.\n\nKedro Toolkit is a VSCode Extension for the Kedro Framework\n",
      "summary": "Check out kedro-toolkit by Mar1cX. It's a well-crafted project with great potential.",
      "date_published": "2021-07-17T13:42:19Z",
      "date_modified": "2021-07-17T13:42:19Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pysondb-pysondb/",
      "url": "https://go.waylonwalker.com/pysondb-pysondb/",
      "title": "⭐ pysonDB pysonDB",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/pysonDB/pysonDB\" 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\"\u003epysonDB\u003c/a\u003e by \u003ca href=\"https://github.com/pysonDB\" 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\"\u003epysonDB\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA Simple , ☁️ Lightweight ,  💪 Efficent JSON based database for 🐍 Python. PysonDB-V2 has been released ⬇️\u003c/p\u003e\n",
      "content_text": "\nCheck out [pysonDB](https://github.com/pysonDB/pysonDB) by [pysonDB](https://github.com/pysonDB). It's a well-crafted project with great potential.\n\nA Simple , ☁️ Lightweight ,  💪 Efficent JSON based database for 🐍 Python. PysonDB-V2 has been released ⬇️\n",
      "summary": "Check out pysonDB by pysonDB. It's a well-crafted project with great potential.",
      "date_published": "2021-07-14T18:11:37Z",
      "date_modified": "2021-07-14T18:11:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-pack-nvim-spectre/",
      "url": "https://go.waylonwalker.com/nvim-pack-nvim-spectre/",
      "title": "⭐ nvim-pack nvim-spectre",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/nvim-pack/nvim-spectre\" 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\"\u003envim-spectre\u003c/a\u003e from \u003ca href=\"https://github.com/nvim-pack\" 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\"\u003envim-pack\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eFind the enemy and replace them with dark power.\u003c/p\u003e\n",
      "content_text": "\nI came across [nvim-spectre](https://github.com/nvim-pack/nvim-spectre) from [nvim-pack](https://github.com/nvim-pack), and it's packed with great features and ideas.\n\nFind the enemy and replace them with dark power.\n",
      "summary": "I came across nvim-spectre from nvim-pack, and it's packed with great features and ideas.",
      "date_published": "2021-07-09T19:05:59Z",
      "date_modified": "2021-07-09T19:05:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markstos-qmk_firmware/",
      "url": "https://go.waylonwalker.com/markstos-qmk_firmware/",
      "title": "⭐ markstos qmk_firmware",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/markstos/qmk_firmware\" 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\"\u003eqmk_firmware\u003c/a\u003e by \u003ca href=\"https://github.com/markstos\" 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\"\u003emarkstos\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eOpen-source keyboard firmware for Atmel AVR and Arm USB families\u003c/p\u003e\n",
      "content_text": "\nJust starred [qmk_firmware](https://github.com/markstos/qmk_firmware) by [markstos](https://github.com/markstos). It's an exciting project with a lot to offer.\n\nOpen-source keyboard firmware for Atmel AVR and Arm USB families\n",
      "summary": "Just starred qmk_firmware by markstos. It's an exciting project with a lot to offer.",
      "date_published": "2021-07-01T18:05:42Z",
      "date_modified": "2021-07-01T18:05:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/studioswong-kedro-viz-glitch/",
      "url": "https://go.waylonwalker.com/studioswong-kedro-viz-glitch/",
      "title": "⭐ studioswong kedro-viz-glitch",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/studioswong\" 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\"\u003estudioswong\u003c/a\u003e and their project \u003ca href=\"https://github.com/studioswong/kedro-viz-glitch\" 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\"\u003ekedro-viz-glitch\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [studioswong](https://github.com/studioswong) and their project [kedro-viz-glitch](https://github.com/studioswong/kedro-viz-glitch).\n\nNo description available.\n",
      "summary": "Check out studioswong and their project kedro-viz-glitch.",
      "date_published": "2021-07-01T17:40:41Z",
      "date_modified": "2021-07-01T17:40:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dolthub-dolt/",
      "url": "https://go.waylonwalker.com/dolthub-dolt/",
      "title": "⭐ dolthub dolt",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/dolthub/dolt\" 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\"\u003edolt\u003c/a\u003e from \u003ca href=\"https://github.com/dolthub\" 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\"\u003edolthub\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDolt – \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e for Data\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [dolt](https://github.com/dolthub/dolt) from [dolthub](https://github.com/dolthub).\n\nDolt – Git for Data\n",
      "summary": "I'm impressed by dolt from dolthub.",
      "date_published": "2021-06-22T21:16:00Z",
      "date_modified": "2021-06-22T21:16:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asottile-pyupgrade/",
      "url": "https://go.waylonwalker.com/asottile-pyupgrade/",
      "title": "⭐ asottile pyupgrade",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/asottile/pyupgrade\" 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\"\u003epyupgrade\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/asottile\" 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\"\u003easottile\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [pyupgrade](https://github.com/asottile/pyupgrade), an amazing project by [asottile](https://github.com/asottile). It's worth exploring!\n\nA tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language.\n",
      "summary": "I'm really excited about pyupgrade, an amazing project by asottile. It's worth exploring!",
      "date_published": "2021-06-19T20:45:07Z",
      "date_modified": "2021-06-19T20:45:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/l3mon4d3-luasnip/",
      "url": "https://go.waylonwalker.com/l3mon4d3-luasnip/",
      "title": "⭐ L3MON4D3 LuaSnip",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/L3MON4D3/LuaSnip\" 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\"\u003eLuaSnip\u003c/a\u003e by \u003ca href=\"https://github.com/L3MON4D3\" 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\"\u003eL3MON4D3\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eSnippet Engine for Neovim written in Lua.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [LuaSnip](https://github.com/L3MON4D3/LuaSnip) by [L3MON4D3](https://github.com/L3MON4D3), and it's truly impressive.\n\nSnippet Engine for Neovim written in Lua.\n",
      "summary": "I recently discovered LuaSnip by L3MON4D3, and it's truly impressive.",
      "date_published": "2021-06-11T20:16:57Z",
      "date_modified": "2021-06-11T20:16:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nearbeach-nearbeach/",
      "url": "https://go.waylonwalker.com/nearbeach-nearbeach/",
      "title": "⭐ nearbeach NearBeach",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/nearbeach/NearBeach\" 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\"\u003eNearBeach\u003c/a\u003e by \u003ca href=\"https://github.com/nearbeach\" 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\"\u003enearbeach\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNearBeach is an open sourced project management tool, helping you keep track of your project. You can track requirements, projects and tasks\u003c/p\u003e\n",
      "content_text": "\nThe work on [NearBeach](https://github.com/nearbeach/NearBeach) by [nearbeach](https://github.com/nearbeach).\n\nNearBeach is an open sourced project management tool, helping you keep track of your project. You can track requirements, projects and tasks\n",
      "summary": "The work on NearBeach by nearbeach.",
      "date_published": "2021-06-11T12:35:37Z",
      "date_modified": "2021-06-11T12:35:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/brickfrog-srcards/",
      "url": "https://go.waylonwalker.com/brickfrog-srcards/",
      "title": "⭐ brickfrog srcards",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/brickfrog/srcards\" 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\"\u003esrcards\u003c/a\u003e by \u003ca href=\"https://github.com/brickfrog\" 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\"\u003ebrickfrog\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[srcards](https://github.com/brickfrog/srcards) by [brickfrog](https://github.com/brickfrog) is a game-changer in its space. Excited to see how it evolves.\n\nNo description available.\n",
      "summary": "srcards by brickfrog is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-06-10T23:10:14Z",
      "date_modified": "2021-06-10T23:10:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/noopkat-vim-twitch-line-sign/",
      "url": "https://go.waylonwalker.com/noopkat-vim-twitch-line-sign/",
      "title": "⭐ noopkat vim-twitch-line-sign",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/noopkat/vim-twitch-line-sign\" 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\"\u003evim-twitch-line-sign\u003c/a\u003e by \u003ca href=\"https://github.com/noopkat\" 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\"\u003enoopkat\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003esome helpers to annotate vim signs with Twitch related metadata. Inspired by: clarkio/vscode-twitch-highlighter\u003c/p\u003e\n",
      "content_text": "\nCheck out [vim-twitch-line-sign](https://github.com/noopkat/vim-twitch-line-sign) by [noopkat](https://github.com/noopkat). It's a well-crafted project with great potential.\n\nsome helpers to annotate vim signs with Twitch related metadata. Inspired by: clarkio/vscode-twitch-highlighter\n",
      "summary": "Check out vim-twitch-line-sign by noopkat. It's a well-crafted project with great potential.",
      "date_published": "2021-06-10T01:20:50Z",
      "date_modified": "2021-06-10T01:20:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pycqa-flake8/",
      "url": "https://go.waylonwalker.com/pycqa-flake8/",
      "title": "⭐ PyCQA flake8",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/PyCQA/flake8\" 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\"\u003eflake8\u003c/a\u003e by \u003ca href=\"https://github.com/PyCQA\" 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\"\u003ePyCQA\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eflake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.\u003c/p\u003e\n",
      "content_text": "\nJust starred [flake8](https://github.com/PyCQA/flake8) by [PyCQA](https://github.com/PyCQA). It's an exciting project with a lot to offer.\n\nflake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.\n",
      "summary": "Just starred flake8 by PyCQA. It's an exciting project with a lot to offer.",
      "date_published": "2021-06-08T13:30:59Z",
      "date_modified": "2021-06-08T13:30:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/liiight-notifiers/",
      "url": "https://go.waylonwalker.com/liiight-notifiers/",
      "title": "⭐ liiight notifiers",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/liiight/notifiers\" 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\"\u003enotifiers\u003c/a\u003e by \u003ca href=\"https://github.com/liiight\" 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\"\u003eliiight\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eThe easy way to send notifications\u003c/p\u003e\n",
      "content_text": "\nCheck out [notifiers](https://github.com/liiight/notifiers) by [liiight](https://github.com/liiight). It's a well-crafted project with great potential.\n\nThe easy way to send notifications\n",
      "summary": "Check out notifiers by liiight. It's a well-crafted project with great potential.",
      "date_published": "2021-06-05T21:14:28Z",
      "date_modified": "2021-06-05T21:14:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/norcalli-neovim-plugin/",
      "url": "https://go.waylonwalker.com/norcalli-neovim-plugin/",
      "title": "⭐ norcalli neovim-plugin",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/norcalli/neovim-plugin\" 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\"\u003eneovim-plugin\u003c/a\u003e by \u003ca href=\"https://github.com/norcalli\" 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\"\u003enorcalli\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [neovim-plugin](https://github.com/norcalli/neovim-plugin) by [norcalli](https://github.com/norcalli). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out neovim-plugin by norcalli. It's a well-crafted project with great potential.",
      "date_published": "2021-06-04T22:36:25Z",
      "date_modified": "2021-06-04T22:36:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-lsp-python-lsp-server/",
      "url": "https://go.waylonwalker.com/python-lsp-python-lsp-server/",
      "title": "⭐ python-lsp python-lsp-server",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/python-lsp/python-lsp-server\" 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\"\u003epython-lsp-server\u003c/a\u003e from \u003ca href=\"https://github.com/python-lsp\" 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\"\u003epython-lsp\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFork of the python-language-server project, maintained by the Spyder IDE team and the community\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [python-lsp-server](https://github.com/python-lsp/python-lsp-server) from [python-lsp](https://github.com/python-lsp).\n\nFork of the python-language-server project, maintained by the Spyder IDE team and the community\n",
      "summary": "I'm impressed by python-lsp-server from python-lsp.",
      "date_published": "2021-06-04T22:22:04Z",
      "date_modified": "2021-06-04T22:22:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cwebster2-github-coauthors-nvim/",
      "url": "https://go.waylonwalker.com/cwebster2-github-coauthors-nvim/",
      "title": "⭐ cwebster2 github-coauthors.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/cwebster2/github-coauthors.nvim\" 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\"\u003egithub-coauthors.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/cwebster2\" 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\"\u003ecwebster2\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA neovim extension for populating coauthors when comitting\u003c/p\u003e\n",
      "content_text": "\n[github-coauthors.nvim](https://github.com/cwebster2/github-coauthors.nvim) by [cwebster2](https://github.com/cwebster2) is a game-changer in its space. Excited to see how it evolves.\n\nA neovim extension for populating coauthors when comitting\n",
      "summary": "github-coauthors.nvim by cwebster2 is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-06-04T22:18:30Z",
      "date_modified": "2021-06-04T22:18:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/galileo-galilei-kedro-mlflow/",
      "url": "https://go.waylonwalker.com/galileo-galilei-kedro-mlflow/",
      "title": "⭐ Galileo-Galilei kedro-mlflow",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/Galileo-Galilei/kedro-mlflow\" 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\"\u003ekedro-mlflow\u003c/a\u003e by \u003ca href=\"https://github.com/Galileo-Galilei\" 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\"\u003eGalileo-Galilei\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA kedro-plugin for integration of mlflow capabilities inside kedro projects (especially machine learning model versioning and packaging)\u003c/p\u003e\n",
      "content_text": "\nThe work on [kedro-mlflow](https://github.com/Galileo-Galilei/kedro-mlflow) by [Galileo-Galilei](https://github.com/Galileo-Galilei).\n\nA kedro-plugin for integration of mlflow capabilities inside kedro projects (especially machine learning model versioning and packaging)\n",
      "summary": "The work on kedro-mlflow by Galileo-Galilei.",
      "date_published": "2021-06-02T22:00:13Z",
      "date_modified": "2021-06-02T22:00:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-textual/",
      "url": "https://go.waylonwalker.com/textualize-textual/",
      "title": "⭐ Textualize textual",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Textualize/textual\" 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\"\u003etextual\u003c/a\u003e, created by \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe lean application framework for Python.  Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [textual](https://github.com/Textualize/textual), created by [Textualize](https://github.com/Textualize).\n\nThe lean application framework for Python.  Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.\n",
      "summary": "If you're into interesting projects, don't miss out on textual, created by Textualize.",
      "date_published": "2021-05-31T19:20:35Z",
      "date_modified": "2021-05-31T19:20:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/folke-lsp-colors-nvim/",
      "url": "https://go.waylonwalker.com/folke-lsp-colors-nvim/",
      "title": "⭐ folke lsp-colors.nvim",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/folke/lsp-colors.nvim\" 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\"\u003elsp-colors.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/folke\" 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\"\u003efolke\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🌈  Plugin that creates missing LSP diagnostics highlight groups for color schemes that don’t yet support the Neovim 0.5 builtin LSP client.\u003c/p\u003e\n",
      "content_text": "\nThe work on [lsp-colors.nvim](https://github.com/folke/lsp-colors.nvim) by [folke](https://github.com/folke).\n\n🌈  Plugin that creates missing LSP diagnostics highlight groups for color schemes that don't yet support the Neovim 0.5 builtin LSP client.\n",
      "summary": "The work on lsp-colors.nvim by folke.",
      "date_published": "2021-05-29T13:59:55Z",
      "date_modified": "2021-05-29T13:59:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lannonbr-netlify_deploy/",
      "url": "https://go.waylonwalker.com/lannonbr-netlify_deploy/",
      "title": "⭐ lannonbr netlify_deploy",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/lannonbr/netlify_deploy\" 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\"\u003enetlify_deploy\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/lannonbr\" 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\"\u003elannonbr\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eMini Rust CLI to deploy sites to Netlify using their API\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [netlify_deploy](https://github.com/lannonbr/netlify_deploy), an amazing project by [lannonbr](https://github.com/lannonbr). It's worth exploring!\n\nMini Rust CLI to deploy sites to Netlify using their API\n",
      "summary": "I'm really excited about netlify_deploy, an amazing project by lannonbr. It's worth exploring!",
      "date_published": "2021-05-23T02:31:52Z",
      "date_modified": "2021-05-23T02:31:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/slidevjs-slidev/",
      "url": "https://go.waylonwalker.com/slidevjs-slidev/",
      "title": "⭐ slidevjs slidev",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/slidevjs/slidev\" 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\"\u003eslidev\u003c/a\u003e by \u003ca href=\"https://github.com/slidevjs\" 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\"\u003eslidevjs\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ePresentation Slides for Developers\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [slidev](https://github.com/slidevjs/slidev) by [slidevjs](https://github.com/slidevjs), and it's truly impressive.\n\nPresentation Slides for Developers\n",
      "summary": "I recently discovered slidev by slidevjs, and it's truly impressive.",
      "date_published": "2021-05-23T02:31:43Z",
      "date_modified": "2021-05-23T02:31:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/orta-bio/",
      "url": "https://go.waylonwalker.com/orta-bio/",
      "title": "⭐ orta bio",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/orta/bio\" 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\"\u003ebio\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/orta\" 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\"\u003eorta\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [bio](https://github.com/orta/bio), an amazing project by [orta](https://github.com/orta). It's worth exploring!\n\nNo description available.\n",
      "summary": "I'm really excited about bio, an amazing project by orta. It's worth exploring!",
      "date_published": "2021-05-21T17:10:50Z",
      "date_modified": "2021-05-21T17:10:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/benawad-dogehouse/",
      "url": "https://go.waylonwalker.com/benawad-dogehouse/",
      "title": "⭐ benawad dogehouse",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/benawad/dogehouse\" 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\"\u003edogehouse\u003c/a\u003e by \u003ca href=\"https://github.com/benawad\" 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\"\u003ebenawad\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eTaking voice conversations to the moon 🚀\u003c/p\u003e\n",
      "content_text": "\nCheck out [dogehouse](https://github.com/benawad/dogehouse) by [benawad](https://github.com/benawad). It's a well-crafted project with great potential.\n\nTaking voice conversations to the moon 🚀\n",
      "summary": "Check out dogehouse by benawad. It's a well-crafted project with great potential.",
      "date_published": "2021-05-21T17:10:23Z",
      "date_modified": "2021-05-21T17:10:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/grantjenks-python-diskcache/",
      "url": "https://go.waylonwalker.com/grantjenks-python-diskcache/",
      "title": "⭐ grantjenks python-diskcache",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/grantjenks/python-diskcache\" 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\"\u003epython-diskcache\u003c/a\u003e by \u003ca href=\"https://github.com/grantjenks\" 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\"\u003egrantjenks\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePython disk-backed cache (Django-compatible). Faster than Redis and Memcached. Pure-Python.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [python-diskcache](https://github.com/grantjenks/python-diskcache) by [grantjenks](https://github.com/grantjenks).\n\nPython disk-backed cache (Django-compatible). Faster than Redis and Memcached. Pure-Python.\n",
      "summary": "Looking for inspiration? python-diskcache by grantjenks.",
      "date_published": "2021-05-17T13:22:16Z",
      "date_modified": "2021-05-17T13:22:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/d0c-s4vage-lookatme/",
      "url": "https://go.waylonwalker.com/d0c-s4vage-lookatme/",
      "title": "⭐ d0c-s4vage lookatme",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/d0c-s4vage/lookatme\" 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\"\u003elookatme\u003c/a\u003e by \u003ca href=\"https://github.com/d0c-s4vage\" 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\"\u003ed0c-s4vage\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn interactive, terminal-based markdown presenter\u003c/p\u003e\n",
      "content_text": "\nThe work on [lookatme](https://github.com/d0c-s4vage/lookatme) by [d0c-s4vage](https://github.com/d0c-s4vage).\n\nAn interactive, terminal-based markdown presenter\n",
      "summary": "The work on lookatme by d0c-s4vage.",
      "date_published": "2021-05-14T18:59:59Z",
      "date_modified": "2021-05-14T18:59:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/darrenburns-ward/",
      "url": "https://go.waylonwalker.com/darrenburns-ward/",
      "title": "⭐ darrenburns ward",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/darrenburns/ward\" 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\"\u003eward\u003c/a\u003e by \u003ca href=\"https://github.com/darrenburns\" 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\"\u003edarrenburns\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWard is a modern test framework for Python with a focus on productivity and readability.\u003c/p\u003e\n",
      "content_text": "\nThe work on [ward](https://github.com/darrenburns/ward) by [darrenburns](https://github.com/darrenburns).\n\nWard is a modern test framework for Python with a focus on productivity and readability.\n",
      "summary": "The work on ward by darrenburns.",
      "date_published": "2021-05-13T12:12:11Z",
      "date_modified": "2021-05-13T12:12:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dereknheiley-compactyl/",
      "url": "https://go.waylonwalker.com/dereknheiley-compactyl/",
      "title": "⭐ dereknheiley compactyl",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/dereknheiley/compactyl\" 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\"\u003ecompactyl\u003c/a\u003e from \u003ca href=\"https://github.com/dereknheiley\" 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\"\u003edereknheiley\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI came across [compactyl](https://github.com/dereknheiley/compactyl) from [dereknheiley](https://github.com/dereknheiley), and it's packed with great features and ideas.\n\nNo description available.\n",
      "summary": "I came across compactyl from dereknheiley, and it's packed with great features and ideas.",
      "date_published": "2021-05-11T01:00:28Z",
      "date_modified": "2021-05-11T01:00:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/moduloindustries-thinkeys/",
      "url": "https://go.waylonwalker.com/moduloindustries-thinkeys/",
      "title": "⭐ moduloindustries thinkeys",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/moduloindustries/thinkeys\" 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\"\u003ethinkeys\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/moduloindustries\" 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\"\u003emoduloindustries\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eSplit ortholinear custom replacement keyboard with TrackPoint for ThinkPad laptops.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [thinkeys](https://github.com/moduloindustries/thinkeys), an amazing project by [moduloindustries](https://github.com/moduloindustries). It's worth exploring!\n\nSplit ortholinear custom replacement keyboard with TrackPoint for ThinkPad laptops.\n",
      "summary": "I'm really excited about thinkeys, an amazing project by moduloindustries. It's worth exploring!",
      "date_published": "2021-05-10T19:48:16Z",
      "date_modified": "2021-05-10T19:48:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dandavison-delta/",
      "url": "https://go.waylonwalker.com/dandavison-delta/",
      "title": "⭐ dandavison delta",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/dandavison/delta\" 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\"\u003edelta\u003c/a\u003e by \u003ca href=\"https://github.com/dandavison\" 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\"\u003edandavison\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA syntax-highlighting pager for \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e, diff, grep, and blame output\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [delta](https://github.com/dandavison/delta) by [dandavison](https://github.com/dandavison), and it's truly impressive.\n\nA syntax-highlighting pager for git, diff, grep, and blame output\n",
      "summary": "I recently discovered delta by dandavison, and it's truly impressive.",
      "date_published": "2021-05-02T16:14:24Z",
      "date_modified": "2021-05-02T16:14:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/monkeytypegame-monkeytype/",
      "url": "https://go.waylonwalker.com/monkeytypegame-monkeytype/",
      "title": "⭐ monkeytypegame monkeytype",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/monkeytypegame/monkeytype\" 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\"\u003emonkeytype\u003c/a\u003e by \u003ca href=\"https://github.com/monkeytypegame\" 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\"\u003emonkeytypegame\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eThe most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.\u003c/p\u003e\n",
      "content_text": "\nJust starred [monkeytype](https://github.com/monkeytypegame/monkeytype) by [monkeytypegame](https://github.com/monkeytypegame). It's an exciting project with a lot to offer.\n\nThe most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.\n",
      "summary": "Just starred monkeytype by monkeytypegame. It's an exciting project with a lot to offer.",
      "date_published": "2021-05-02T15:12:57Z",
      "date_modified": "2021-05-02T15:12:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jbyuki-ntangle-nvim/",
      "url": "https://go.waylonwalker.com/jbyuki-ntangle-nvim/",
      "title": "⭐ jbyuki ntangle.nvim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/jbyuki/ntangle.nvim\" 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\"\u003entangle.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/jbyuki\" 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\"\u003ejbyuki\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eliterate programming for neovim\u003c/p\u003e\n",
      "content_text": "\nCheck out [ntangle.nvim](https://github.com/jbyuki/ntangle.nvim) by [jbyuki](https://github.com/jbyuki). It's a well-crafted project with great potential.\n\nliterate programming for neovim\n",
      "summary": "Check out ntangle.nvim by jbyuki. It's a well-crafted project with great potential.",
      "date_published": "2021-04-29T12:41:48Z",
      "date_modified": "2021-04-29T12:41:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fabi1cazenave-termopen-vim/",
      "url": "https://go.waylonwalker.com/fabi1cazenave-termopen-vim/",
      "title": "⭐ fabi1cazenave termopen.vim",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/fabi1cazenave/termopen.vim\" 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\"\u003etermopen.vim\u003c/a\u003e, created by \u003ca href=\"https://github.com/fabi1cazenave\" 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\"\u003efabi1cazenave\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEasy integration of TUI apps in Neovim: Ranger, LF, Tig… Tetris…\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [termopen.vim](https://github.com/fabi1cazenave/termopen.vim), created by [fabi1cazenave](https://github.com/fabi1cazenave).\n\nEasy integration of TUI apps in Neovim: Ranger, LF, Tig… Tetris…\n",
      "summary": "If you're into interesting projects, don't miss out on termopen.vim, created by fabi1cazenave.",
      "date_published": "2021-04-26T12:38:10Z",
      "date_modified": "2021-04-26T12:38:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/karimknaebel-nvim-lspinstall/",
      "url": "https://go.waylonwalker.com/karimknaebel-nvim-lspinstall/",
      "title": "⭐ karimknaebel nvim-lspinstall",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/karimknaebel\" 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\"\u003ekarimknaebel\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/karimknaebel/nvim-lspinstall\" 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\"\u003envim-lspinstall\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eProvides the missing :LspInstall for nvim-lspconfig\u003c/p\u003e\n",
      "content_text": "\n[karimknaebel](https://github.com/karimknaebel) has done a fantastic job with [nvim-lspinstall](https://github.com/karimknaebel/nvim-lspinstall). Highly recommend taking a look.\n\nProvides the missing :LspInstall for nvim-lspconfig\n",
      "summary": "karimknaebel has done a fantastic job with nvim-lspinstall. Highly recommend taking a look.",
      "date_published": "2021-04-26T12:19:21Z",
      "date_modified": "2021-04-26T12:19:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kabouzeid-nvim-lspinstall/",
      "url": "https://go.waylonwalker.com/kabouzeid-nvim-lspinstall/",
      "title": "⭐ kabouzeid nvim-lspinstall",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/kabouzeid/nvim-lspinstall\" 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\"\u003envim-lspinstall\u003c/a\u003e from \u003ca href=\"https://github.com/kabouzeid\" 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\"\u003ekabouzeid\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eProvides the missing :LspInstall for nvim-lspconfig\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [nvim-lspinstall](https://github.com/kabouzeid/nvim-lspinstall) from [kabouzeid](https://github.com/kabouzeid).\n\nProvides the missing :LspInstall for nvim-lspconfig\n",
      "summary": "I'm impressed by nvim-lspinstall from kabouzeid.",
      "date_published": "2021-04-26T12:19:21Z",
      "date_modified": "2021-04-26T12:19:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/conni2461-dotfiles/",
      "url": "https://go.waylonwalker.com/conni2461-dotfiles/",
      "title": "⭐ Conni2461 dotfiles",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/Conni2461/dotfiles\" 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\"\u003edotfiles\u003c/a\u003e by \u003ca href=\"https://github.com/Conni2461\" 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\"\u003eConni2461\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCurrent dotfiles and scripts\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [dotfiles](https://github.com/Conni2461/dotfiles) by [Conni2461](https://github.com/Conni2461).\n\nCurrent dotfiles and scripts\n",
      "summary": "Looking for inspiration? dotfiles by Conni2461.",
      "date_published": "2021-04-23T13:04:09Z",
      "date_modified": "2021-04-23T13:04:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-treesitter-nvim-treesitter-textobjects/",
      "url": "https://go.waylonwalker.com/nvim-treesitter-nvim-treesitter-textobjects/",
      "title": "⭐ nvim-treesitter nvim-treesitter-textobjects",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/nvim-treesitter\" 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\"\u003envim-treesitter\u003c/a\u003e and their project \u003ca href=\"https://github.com/nvim-treesitter/nvim-treesitter-textobjects\" 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\"\u003envim-treesitter-textobjects\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [nvim-treesitter](https://github.com/nvim-treesitter) and their project [nvim-treesitter-textobjects](https://github.com/nvim-treesitter/nvim-treesitter-textobjects).\n\nNo description available.\n",
      "summary": "Check out nvim-treesitter and their project nvim-treesitter-textobjects.",
      "date_published": "2021-04-20T20:11:13Z",
      "date_modified": "2021-04-20T20:11:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-telescope-project-nvim/",
      "url": "https://go.waylonwalker.com/nvim-telescope-telescope-project-nvim/",
      "title": "⭐ nvim-telescope telescope-project.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/nvim-telescope/telescope-project.nvim\" 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\"\u003etelescope-project.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/nvim-telescope\" 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\"\u003envim-telescope\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[telescope-project.nvim](https://github.com/nvim-telescope/telescope-project.nvim) by [nvim-telescope](https://github.com/nvim-telescope) is a game-changer in its space. Excited to see how it evolves.\n\nNo description available.\n",
      "summary": "telescope-project.nvim by nvim-telescope is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-04-20T20:10:15Z",
      "date_modified": "2021-04-20T20:10:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvimdev-lspsaga-nvim/",
      "url": "https://go.waylonwalker.com/nvimdev-lspsaga-nvim/",
      "title": "⭐ nvimdev lspsaga.nvim",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/nvimdev/lspsaga.nvim\" 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\"\u003elspsaga.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/nvimdev\" 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\"\u003envimdev\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eimprove neovim lsp experience\u003c/p\u003e\n",
      "content_text": "\nI came across [lspsaga.nvim](https://github.com/nvimdev/lspsaga.nvim) from [nvimdev](https://github.com/nvimdev), and it's packed with great features and ideas.\n\nimprove neovim lsp experience\n",
      "summary": "I came across lspsaga.nvim from nvimdev, and it's packed with great features and ideas.",
      "date_published": "2021-04-19T12:52:14Z",
      "date_modified": "2021-04-19T12:52:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rmagatti-auto-session/",
      "url": "https://go.waylonwalker.com/rmagatti-auto-session/",
      "title": "⭐ rmagatti auto-session",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rmagatti\" 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\"\u003ermagatti\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/rmagatti/auto-session\" 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\"\u003eauto-session\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA small automated session manager for Neovim\u003c/p\u003e\n",
      "content_text": "\n[rmagatti](https://github.com/rmagatti) has done a fantastic job with [auto-session](https://github.com/rmagatti/auto-session). Highly recommend taking a look.\n\nA small automated session manager for Neovim\n",
      "summary": "rmagatti has done a fantastic job with auto-session. Highly recommend taking a look.",
      "date_published": "2021-04-18T01:37:39Z",
      "date_modified": "2021-04-18T01:37:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/th3whit3wolf-onebuddy/",
      "url": "https://go.waylonwalker.com/th3whit3wolf-onebuddy/",
      "title": "⭐ Th3Whit3Wolf onebuddy",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/Th3Whit3Wolf/onebuddy\" 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\"\u003eonebuddy\u003c/a\u003e from \u003ca href=\"https://github.com/Th3Whit3Wolf\" 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\"\u003eTh3Whit3Wolf\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eLight and dark atom one theme\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [onebuddy](https://github.com/Th3Whit3Wolf/onebuddy) from [Th3Whit3Wolf](https://github.com/Th3Whit3Wolf).\n\nLight and dark atom one theme\n",
      "summary": "I'm impressed by onebuddy from Th3Whit3Wolf.",
      "date_published": "2021-04-16T13:41:57Z",
      "date_modified": "2021-04-16T13:41:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/awesome-streamers-awesome-streamerrc/",
      "url": "https://go.waylonwalker.com/awesome-streamers-awesome-streamerrc/",
      "title": "⭐ awesome-streamers awesome-streamerrc",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/awesome-streamers/awesome-streamerrc\" 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\"\u003eawesome-streamerrc\u003c/a\u003e from \u003ca href=\"https://github.com/awesome-streamers\" 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\"\u003eawesome-streamers\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDotfiles for various streamers on Twitch.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [awesome-streamerrc](https://github.com/awesome-streamers/awesome-streamerrc) from [awesome-streamers](https://github.com/awesome-streamers).\n\nDotfiles for various streamers on Twitch.\n",
      "summary": "I'm impressed by awesome-streamerrc from awesome-streamers.",
      "date_published": "2021-04-16T13:21:20Z",
      "date_modified": "2021-04-16T13:21:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-telescope-fzf-native-nvim/",
      "url": "https://go.waylonwalker.com/nvim-telescope-telescope-fzf-native-nvim/",
      "title": "⭐ nvim-telescope telescope-fzf-native.nvim",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/nvim-telescope/telescope-fzf-native.nvim\" 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\"\u003etelescope-fzf-native.nvim\u003c/a\u003e, created by \u003ca href=\"https://github.com/nvim-telescope\" 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\"\u003envim-telescope\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFZF sorter for telescope written in c\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [telescope-fzf-native.nvim](https://github.com/nvim-telescope/telescope-fzf-native.nvim), created by [nvim-telescope](https://github.com/nvim-telescope).\n\nFZF sorter for telescope written in c\n",
      "summary": "If you're into interesting projects, don't miss out on telescope-fzf-native.nvim, created by nvim-telescope.",
      "date_published": "2021-04-15T23:07:23Z",
      "date_modified": "2021-04-15T23:07:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/euclidianace-ltreesitter/",
      "url": "https://go.waylonwalker.com/euclidianace-ltreesitter/",
      "title": "⭐ euclidianAce ltreesitter",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/euclidianAce/ltreesitter\" 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\"\u003eltreesitter\u003c/a\u003e by \u003ca href=\"https://github.com/euclidianAce\" 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\"\u003eeuclidianAce\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eStandalone tree sitter bindings for the Lua language\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [ltreesitter](https://github.com/euclidianAce/ltreesitter) by [euclidianAce](https://github.com/euclidianAce).\n\nStandalone tree sitter bindings for the Lua language\n",
      "summary": "Looking for inspiration? ltreesitter by euclidianAce.",
      "date_published": "2021-04-14T15:05:07Z",
      "date_modified": "2021-04-14T15:05:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hadronized-hop-nvim/",
      "url": "https://go.waylonwalker.com/hadronized-hop-nvim/",
      "title": "⭐ hadronized hop.nvim",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/hadronized/hop.nvim\" 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\"\u003ehop.nvim\u003c/a\u003e from \u003ca href=\"https://github.com/hadronized\" 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\"\u003ehadronized\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNeovim motions on speed!\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [hop.nvim](https://github.com/hadronized/hop.nvim) from [hadronized](https://github.com/hadronized).\n\nNeovim motions on speed!\n",
      "summary": "I'm impressed by hop.nvim from hadronized.",
      "date_published": "2021-04-12T13:22:58Z",
      "date_modified": "2021-04-12T13:22:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/arl-gitmux/",
      "url": "https://go.waylonwalker.com/arl-gitmux/",
      "title": "⭐ arl gitmux",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/arl/gitmux\" 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\"\u003egitmux\u003c/a\u003e from \u003ca href=\"https://github.com/arl\" 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\"\u003earl\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e💻 \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e in your tmux status bar\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [gitmux](https://github.com/arl/gitmux) from [arl](https://github.com/arl).\n\n:computer: Git in your tmux status bar\n",
      "summary": "I'm impressed by gitmux from arl.",
      "date_published": "2021-04-10T13:48:18Z",
      "date_modified": "2021-04-10T13:48:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jab-bidict/",
      "url": "https://go.waylonwalker.com/jab-bidict/",
      "title": "⭐ jab bidict",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/jab/bidict\" 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\"\u003ebidict\u003c/a\u003e by \u003ca href=\"https://github.com/jab\" 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\"\u003ejab\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eThe bidirectional mapping library for Python.\u003c/p\u003e\n",
      "content_text": "\nCheck out [bidict](https://github.com/jab/bidict) by [jab](https://github.com/jab). It's a well-crafted project with great potential.\n\nThe bidirectional mapping library for Python.\n",
      "summary": "Check out bidict by jab. It's a well-crafted project with great potential.",
      "date_published": "2021-04-08T22:12:23Z",
      "date_modified": "2021-04-08T22:12:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/photopea-photopea/",
      "url": "https://go.waylonwalker.com/photopea-photopea/",
      "title": "⭐ photopea photopea",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/photopea/photopea\" 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\"\u003ephotopea\u003c/a\u003e by \u003ca href=\"https://github.com/photopea\" 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\"\u003ephotopea\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003ePhotopea is online image editor\u003c/p\u003e\n",
      "content_text": "\n[photopea](https://github.com/photopea/photopea) by [photopea](https://github.com/photopea) is a game-changer in its space. Excited to see how it evolves.\n\nPhotopea is online image editor\n",
      "summary": "photopea by photopea is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-04-07T23:46:23Z",
      "date_modified": "2021-04-07T23:46:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tehmaze-lolcat/",
      "url": "https://go.waylonwalker.com/tehmaze-lolcat/",
      "title": "⭐ tehmaze lolcat",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/tehmaze/lolcat\" 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\"\u003elolcat\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/tehmaze\" 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\"\u003etehmaze\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eRainbows and unicorns (without Ruby! jay!)\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [lolcat](https://github.com/tehmaze/lolcat), an amazing project by [tehmaze](https://github.com/tehmaze). It's worth exploring!\n\nRainbows and unicorns (without Ruby! jay!)\n",
      "summary": "I'm really excited about lolcat, an amazing project by tehmaze. It's worth exploring!",
      "date_published": "2021-04-07T19:54:02Z",
      "date_modified": "2021-04-07T19:54:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-bubbles/",
      "url": "https://go.waylonwalker.com/charmbracelet-bubbles/",
      "title": "⭐ charmbracelet bubbles",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/charmbracelet/bubbles\" 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\"\u003ebubbles\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eTUI components for Bubble Tea 🫧\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [bubbles](https://github.com/charmbracelet/bubbles), an amazing project by [charmbracelet](https://github.com/charmbracelet). It's worth exploring!\n\nTUI components for Bubble Tea 🫧\n",
      "summary": "I'm really excited about bubbles, an amazing project by charmbracelet. It's worth exploring!",
      "date_published": "2021-04-07T12:34:06Z",
      "date_modified": "2021-04-07T12:34:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-lipgloss/",
      "url": "https://go.waylonwalker.com/charmbracelet-lipgloss/",
      "title": "⭐ charmbracelet lipgloss",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e and their project \u003ca href=\"https://github.com/charmbracelet/lipgloss\" 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\"\u003elipgloss\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eStyle definitions for nice terminal layouts 👄\u003c/p\u003e\n",
      "content_text": "\nCheck out [charmbracelet](https://github.com/charmbracelet) and their project [lipgloss](https://github.com/charmbracelet/lipgloss).\n\nStyle definitions for nice terminal layouts 👄\n",
      "summary": "Check out charmbracelet and their project lipgloss.",
      "date_published": "2021-04-07T03:17:31Z",
      "date_modified": "2021-04-07T03:17:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-lua-plenary-nvim/",
      "url": "https://go.waylonwalker.com/nvim-lua-plenary-nvim/",
      "title": "⭐ nvim-lua plenary.nvim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/nvim-lua/plenary.nvim\" 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\"\u003eplenary.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/nvim-lua\" 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\"\u003envim-lua\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eplenary: full; complete; entire; absolute; unqualified. All the lua functions I don’t want to write twice.\u003c/p\u003e\n",
      "content_text": "\n[plenary.nvim](https://github.com/nvim-lua/plenary.nvim) by [nvim-lua](https://github.com/nvim-lua) is a game-changer in its space. Excited to see how it evolves.\n\nplenary: full; complete; entire; absolute; unqualified. All the lua functions I don't want to write twice.\n",
      "summary": "plenary.nvim by nvim-lua is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2021-04-05T15:38:12Z",
      "date_modified": "2021-04-05T15:38:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-kedro-diff/",
      "url": "https://go.waylonwalker.com/waylonwalker-kedro-diff/",
      "title": "⭐ WaylonWalker kedro-diff",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/WaylonWalker/kedro-diff\" 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\"\u003ekedro-diff\u003c/a\u003e from \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/p\u003e\n\u003cp\u003equickly diff kedro history\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [kedro-diff](https://github.com/WaylonWalker/kedro-diff) from [WaylonWalker](https://github.com/WaylonWalker).\n\nquickly diff kedro history\n",
      "summary": "I'm impressed by kedro-diff from WaylonWalker.",
      "date_published": "2021-04-02T02:04:05Z",
      "date_modified": "2021-04-02T02:04:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-git-worktree-nvim/",
      "url": "https://go.waylonwalker.com/theprimeagen-git-worktree-nvim/",
      "title": "⭐ ThePrimeagen git-worktree.nvim",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen’s\u003c/a\u003e project \u003ca href=\"https://github.com/ThePrimeagen/git-worktree.nvim\" 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\"\u003egit-worktree.nvim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI like [ThePrimeagen's](https://github.com/ThePrimeagen) project [git-worktree.nvim](https://github.com/ThePrimeagen/git-worktree.nvim).\n\nNo description available.\n",
      "summary": "I like ThePrimeagen's project git-worktree.nvim.",
      "date_published": "2021-04-02T01:23:26Z",
      "date_modified": "2021-04-02T01:23:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kuator-nvim/",
      "url": "https://go.waylonwalker.com/kuator-nvim/",
      "title": "⭐ kuator nvim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/kuator/nvim\" 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\"\u003envim\u003c/a\u003e by \u003ca href=\"https://github.com/kuator\" 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\"\u003ekuator\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eThere are many neovim configurations, but this one is mine…\u003c/p\u003e\n",
      "content_text": "\nCheck out [nvim](https://github.com/kuator/nvim) by [kuator](https://github.com/kuator). It's a well-crafted project with great potential.\n\nThere are many neovim configurations, but this one is mine...\n",
      "summary": "Check out nvim by kuator. It's a well-crafted project with great potential.",
      "date_published": "2021-04-01T03:19:31Z",
      "date_modified": "2021-04-01T03:19:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jamesabel-awsimple/",
      "url": "https://go.waylonwalker.com/jamesabel-awsimple/",
      "title": "⭐ jamesabel awsimple",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/jamesabel/awsimple\" 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\"\u003eawsimple\u003c/a\u003e by \u003ca href=\"https://github.com/jamesabel\" 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\"\u003ejamesabel\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSimple API for basic AWS services\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [awsimple](https://github.com/jamesabel/awsimple) by [jamesabel](https://github.com/jamesabel).\n\nSimple API for basic AWS services\n",
      "summary": "Looking for inspiration? awsimple by jamesabel.",
      "date_published": "2021-03-29T13:41:24Z",
      "date_modified": "2021-03-29T13:41:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nvim-telescope-telescope-nvim/",
      "url": "https://go.waylonwalker.com/nvim-telescope-telescope-nvim/",
      "title": "⭐ nvim-telescope telescope.nvim",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/nvim-telescope/telescope.nvim\" 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\"\u003etelescope.nvim\u003c/a\u003e by \u003ca href=\"https://github.com/nvim-telescope\" 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\"\u003envim-telescope\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFind, Filter, Preview, Pick. All lua, all the time.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) by [nvim-telescope](https://github.com/nvim-telescope).\n\nFind, Filter, Preview, Pick. All lua, all the time.\n",
      "summary": "Looking for inspiration? telescope.nvim by nvim-telescope.",
      "date_published": "2021-03-26T16:06:13Z",
      "date_modified": "2021-03-26T16:06:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-harpoon/",
      "url": "https://go.waylonwalker.com/theprimeagen-harpoon/",
      "title": "⭐ ThePrimeagen harpoon",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/ThePrimeagen/harpoon\" 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\"\u003eharpoon\u003c/a\u003e, created by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [harpoon](https://github.com/ThePrimeagen/harpoon), created by [ThePrimeagen](https://github.com/ThePrimeagen).\n\nNo description available.\n",
      "summary": "If you're into interesting projects, don't miss out on harpoon, created by ThePrimeagen.",
      "date_published": "2021-03-26T16:06:10Z",
      "date_modified": "2021-03-26T16:06:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/maggieappleton-maggieappleton-com/",
      "url": "https://go.waylonwalker.com/maggieappleton-maggieappleton-com/",
      "title": "⭐ MaggieAppleton maggieappleton.com",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/MaggieAppleton/maggieappleton.com\" 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\"\u003emaggieappleton.com\u003c/a\u003e by \u003ca href=\"https://github.com/MaggieAppleton\" 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\"\u003eMaggieAppleton\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e⚠️ Now retired. My previous, poorly constructed digital garden built with Gatsby and MDX. Updated garden here: \u003ca href=\"https://github.com/MaggieAppleton/maggieappleton.com-V2\" 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\"\u003ehttps://github.com/MaggieAppleton/maggieappleton.com-V2\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nThe work on [maggieappleton.com](https://github.com/MaggieAppleton/maggieappleton.com) by [MaggieAppleton](https://github.com/MaggieAppleton).\n\n⚠️ Now retired. My previous, poorly constructed digital garden built with Gatsby and MDX. Updated garden here: https://github.com/MaggieAppleton/maggieappleton.com-V2\n",
      "summary": "The work on maggieappleton.com by MaggieAppleton.",
      "date_published": "2021-03-26T03:02:28Z",
      "date_modified": "2021-03-26T03:02:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tmate-io-tmate/",
      "url": "https://go.waylonwalker.com/tmate-io-tmate/",
      "title": "⭐ tmate-io tmate",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/tmate-io\" 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\"\u003etmate-io\u003c/a\u003e and their project \u003ca href=\"https://github.com/tmate-io/tmate\" 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\"\u003etmate\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eInstant Terminal Sharing\u003c/p\u003e\n",
      "content_text": "\nCheck out [tmate-io](https://github.com/tmate-io) and their project [tmate](https://github.com/tmate-io/tmate).\n\nInstant Terminal Sharing\n",
      "summary": "Check out tmate-io and their project tmate.",
      "date_published": "2021-03-25T17:38:26Z",
      "date_modified": "2021-03-25T17:38:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/drivendataorg-cookiecutter-data-science/",
      "url": "https://go.waylonwalker.com/drivendataorg-cookiecutter-data-science/",
      "title": "⭐ drivendataorg cookiecutter-data-science",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/drivendataorg/cookiecutter-data-science\" 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\"\u003ecookiecutter-data-science\u003c/a\u003e by \u003ca href=\"https://github.com/drivendataorg\" 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\"\u003edrivendataorg\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA logical, reasonably standardized, but flexible project structure for doing and sharing data science work.\u003c/p\u003e\n",
      "content_text": "\nThe work on [cookiecutter-data-science](https://github.com/drivendataorg/cookiecutter-data-science) by [drivendataorg](https://github.com/drivendataorg).\n\nA logical, reasonably standardized, but flexible project structure for doing and sharing data science work.\n",
      "summary": "The work on cookiecutter-data-science by drivendataorg.",
      "date_published": "2021-03-24T19:20:55Z",
      "date_modified": "2021-03-24T19:20:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/smitajit-bufutils-vim/",
      "url": "https://go.waylonwalker.com/smitajit-bufutils-vim/",
      "title": "⭐ smitajit bufutils.vim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/smitajit\" 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\"\u003esmitajit\u003c/a\u003e and their project \u003ca href=\"https://github.com/smitajit/bufutils.vim\" 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\"\u003ebufutils.vim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ebufutils.vim provide utilities to open, close, refresh, move, resize, zoom buffers faster\u003c/p\u003e\n",
      "content_text": "\nCheck out [smitajit](https://github.com/smitajit) and their project [bufutils.vim](https://github.com/smitajit/bufutils.vim).\n\nbufutils.vim provide utilities to open, close, refresh, move, resize, zoom buffers faster\n",
      "summary": "Check out smitajit and their project bufutils.vim.",
      "date_published": "2021-03-14T15:34:13Z",
      "date_modified": "2021-03-14T15:34:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rigellute-spotify-tui/",
      "url": "https://go.waylonwalker.com/rigellute-spotify-tui/",
      "title": "⭐ Rigellute spotify-tui",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/Rigellute\" 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\"\u003eRigellute’s\u003c/a\u003e project \u003ca href=\"https://github.com/Rigellute/spotify-tui\" 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\"\u003espotify-tui\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSpotify for the terminal written in Rust 🚀\u003c/p\u003e\n",
      "content_text": "\nI like [Rigellute's](https://github.com/Rigellute) project [spotify-tui](https://github.com/Rigellute/spotify-tui).\n\nSpotify for the terminal written in Rust 🚀\n",
      "summary": "I like Rigellute's project spotify-tui.",
      "date_published": "2021-03-08T23:21:02Z",
      "date_modified": "2021-03-08T23:21:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/swyxio-technical-community-builders/",
      "url": "https://go.waylonwalker.com/swyxio-technical-community-builders/",
      "title": "⭐ swyxio technical-community-builders",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/swyxio\" 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\"\u003eswyxio’s\u003c/a\u003e project \u003ca href=\"https://github.com/swyxio/technical-community-builders\" 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\"\u003etechnical-community-builders\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ecompanies hiring technical community builders\u003c/p\u003e\n",
      "content_text": "\nI like [swyxio's](https://github.com/swyxio) project [technical-community-builders](https://github.com/swyxio/technical-community-builders).\n\ncompanies hiring technical community builders\n",
      "summary": "I like swyxio's project technical-community-builders.",
      "date_published": "2021-03-06T02:02:15Z",
      "date_modified": "2021-03-06T02:02:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/minyus-minyus/",
      "url": "https://go.waylonwalker.com/minyus-minyus/",
      "title": "⭐ Minyus Minyus",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/Minyus/Minyus\" 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\"\u003eMinyus\u003c/a\u003e by \u003ca href=\"https://github.com/Minyus\" 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\"\u003eMinyus\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nJust starred [Minyus](https://github.com/Minyus/Minyus) by [Minyus](https://github.com/Minyus). It's an exciting project with a lot to offer.\n\nNo description available.\n",
      "summary": "Just starred Minyus by Minyus. It's an exciting project with a lot to offer.",
      "date_published": "2021-03-06T02:02:00Z",
      "date_modified": "2021-03-06T02:02:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/uranusjr-simpleindex/",
      "url": "https://go.waylonwalker.com/uranusjr-simpleindex/",
      "title": "⭐ uranusjr simpleindex",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/uranusjr\" 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\"\u003euranusjr’s\u003c/a\u003e project \u003ca href=\"https://github.com/uranusjr/simpleindex\" 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\"\u003esimpleindex\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI like [uranusjr's](https://github.com/uranusjr) project [simpleindex](https://github.com/uranusjr/simpleindex).\n\nNo description available.\n",
      "summary": "I like uranusjr's project simpleindex.",
      "date_published": "2021-03-03T04:20:11Z",
      "date_modified": "2021-03-03T04:20:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lorenabalan-lorenabalan/",
      "url": "https://go.waylonwalker.com/lorenabalan-lorenabalan/",
      "title": "⭐ lorenabalan lorenabalan",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/lorenabalan/lorenabalan\" 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\"\u003elorenabalan\u003c/a\u003e from \u003ca href=\"https://github.com/lorenabalan\" 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\"\u003elorenabalan\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003ePersonal repo\u003c/p\u003e\n",
      "content_text": "\nI came across [lorenabalan](https://github.com/lorenabalan/lorenabalan) from [lorenabalan](https://github.com/lorenabalan), and it's packed with great features and ideas.\n\nPersonal repo\n",
      "summary": "I came across lorenabalan from lorenabalan, and it's packed with great features and ideas.",
      "date_published": "2021-02-25T14:12:28Z",
      "date_modified": "2021-02-25T14:12:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rhysd-vim-wasm/",
      "url": "https://go.waylonwalker.com/rhysd-vim-wasm/",
      "title": "⭐ rhysd vim.wasm",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/rhysd/vim.wasm\" 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\"\u003evim.wasm\u003c/a\u003e from \u003ca href=\"https://github.com/rhysd\" 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\"\u003erhysd\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eVim editor ported to WebAssembly\u003c/p\u003e\n",
      "content_text": "\nI came across [vim.wasm](https://github.com/rhysd/vim.wasm) from [rhysd](https://github.com/rhysd), and it's packed with great features and ideas.\n\nVim editor ported to WebAssembly\n",
      "summary": "I came across vim.wasm from rhysd, and it's packed with great features and ideas.",
      "date_published": "2021-02-17T16:27:13Z",
      "date_modified": "2021-02-17T16:27:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dataengineerone-de1-python/",
      "url": "https://go.waylonwalker.com/dataengineerone-de1-python/",
      "title": "⭐ dataengineerone de1-python",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/dataengineerone/de1-python\" 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\"\u003ede1-python\u003c/a\u003e by \u003ca href=\"https://github.com/dataengineerone\" 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\"\u003edataengineerone\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eCurated collection of DE1’s favorite kedro pieces.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [de1-python](https://github.com/dataengineerone/de1-python) by [dataengineerone](https://github.com/dataengineerone), and it's truly impressive.\n\nCurated collection of DE1's favorite kedro pieces.\n",
      "summary": "I recently discovered de1-python by dataengineerone, and it's truly impressive.",
      "date_published": "2021-02-01T02:27:22Z",
      "date_modified": "2021-02-01T02:27:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/markserv-markserv/",
      "url": "https://go.waylonwalker.com/markserv-markserv/",
      "title": "⭐ markserv markserv",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/markserv/markserv\" 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\"\u003emarkserv\u003c/a\u003e by \u003ca href=\"https://github.com/markserv\" 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\"\u003emarkserv\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003e🏁  serve markdown as \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 (GitHub style), index directories, live-reload as you edit\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [markserv](https://github.com/markserv/markserv) by [markserv](https://github.com/markserv), and it's truly impressive.\n\n🏁  serve markdown as html (GitHub style), index directories, live-reload as you edit\n",
      "summary": "I recently discovered markserv by markserv, and it's truly impressive.",
      "date_published": "2021-01-28T19:33:04Z",
      "date_modified": "2021-01-28T19:33:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/facelessuser-pymdown-extensions/",
      "url": "https://go.waylonwalker.com/facelessuser-pymdown-extensions/",
      "title": "⭐ facelessuser pymdown-extensions",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/facelessuser\" 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\"\u003efacelessuser\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/facelessuser/pymdown-extensions\" 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\"\u003epymdown-extensions\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eExtensions for Python Markdown\u003c/p\u003e\n",
      "content_text": "\n[facelessuser](https://github.com/facelessuser) has done a fantastic job with [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions). Highly recommend taking a look.\n\nExtensions for Python Markdown\n",
      "summary": "facelessuser has done a fantastic job with pymdown-extensions. Highly recommend taking a look.",
      "date_published": "2021-01-27T18:46:30Z",
      "date_modified": "2021-01-27T18:46:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tkhyn-dirsync/",
      "url": "https://go.waylonwalker.com/tkhyn-dirsync/",
      "title": "⭐ tkhyn dirsync",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/tkhyn/dirsync\" 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\"\u003edirsync\u003c/a\u003e by \u003ca href=\"https://github.com/tkhyn\" 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\"\u003etkhyn\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [dirsync](https://github.com/tkhyn/dirsync) by [tkhyn](https://github.com/tkhyn). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out dirsync by tkhyn. It's a well-crafted project with great potential.",
      "date_published": "2021-01-25T13:37:50Z",
      "date_modified": "2021-01-25T13:37:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/andrewlin12-markdown2png/",
      "url": "https://go.waylonwalker.com/andrewlin12-markdown2png/",
      "title": "⭐ andrewlin12 markdown2png",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/andrewlin12\" 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\"\u003eandrewlin12\u003c/a\u003e and their project \u003ca href=\"https://github.com/andrewlin12/markdown2png\" 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\"\u003emarkdown2png\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRender markdown to PNG (or other formats)\u003c/p\u003e\n",
      "content_text": "\nCheck out [andrewlin12](https://github.com/andrewlin12) and their project [markdown2png](https://github.com/andrewlin12/markdown2png).\n\nRender markdown to PNG (or other formats)\n",
      "summary": "Check out andrewlin12 and their project markdown2png.",
      "date_published": "2021-01-22T14:14:50Z",
      "date_modified": "2021-01-22T14:14:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/twintproject-twint/",
      "url": "https://go.waylonwalker.com/twintproject-twint/",
      "title": "⭐ twintproject twint",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/twintproject/twint\" 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\"\u003etwint\u003c/a\u003e by \u003ca href=\"https://github.com/twintproject\" 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\"\u003etwintproject\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eAn advanced Twitter scraping \u0026amp; OSINT tool written in Python that doesn’t use Twitter’s API, allowing you to scrape a user’s followers, following, Tweets and more while evading most API limitations.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [twint](https://github.com/twintproject/twint) by [twintproject](https://github.com/twintproject), and it's truly impressive.\n\nAn advanced Twitter scraping \u0026 OSINT tool written in Python that doesn't use Twitter's API, allowing you to scrape a user's followers, following, Tweets and more while evading most API limitations.\n",
      "summary": "I recently discovered twint by twintproject, and it's truly impressive.",
      "date_published": "2021-01-20T20:47:28Z",
      "date_modified": "2021-01-20T20:47:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pytest-dev-pluggy/",
      "url": "https://go.waylonwalker.com/pytest-dev-pluggy/",
      "title": "⭐ pytest-dev pluggy",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/pytest-dev\" 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\"\u003epytest-dev’s\u003c/a\u003e project \u003ca href=\"https://github.com/pytest-dev/pluggy\" 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\"\u003epluggy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA minimalist production ready plugin system\u003c/p\u003e\n",
      "content_text": "\nI like [pytest-dev's](https://github.com/pytest-dev) project [pluggy](https://github.com/pytest-dev/pluggy).\n\nA minimalist production ready plugin system\n",
      "summary": "I like pytest-dev's project pluggy.",
      "date_published": "2021-01-20T19:17:25Z",
      "date_modified": "2021-01-20T19:17:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/to-mc-checksumdir/",
      "url": "https://go.waylonwalker.com/to-mc-checksumdir/",
      "title": "⭐ to-mc checksumdir",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/to-mc\" 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\"\u003eto-mc\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/to-mc/checksumdir\" 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\"\u003echecksumdir\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eSimple package to compute a single deterministic hash of the file contents of a directory.\u003c/p\u003e\n",
      "content_text": "\n[to-mc](https://github.com/to-mc) has done a fantastic job with [checksumdir](https://github.com/to-mc/checksumdir). Highly recommend taking a look.\n\nSimple package to compute a single deterministic hash of the file contents of a directory.\n",
      "summary": "to-mc has done a fantastic job with checksumdir. Highly recommend taking a look.",
      "date_published": "2021-01-20T15:32:44Z",
      "date_modified": "2021-01-20T15:32:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asottile-babi/",
      "url": "https://go.waylonwalker.com/asottile-babi/",
      "title": "⭐ asottile babi",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/asottile\" 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\"\u003easottile\u003c/a\u003e and their project \u003ca href=\"https://github.com/asottile/babi\" 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\"\u003ebabi\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ea text editor\u003c/p\u003e\n",
      "content_text": "\nCheck out [asottile](https://github.com/asottile) and their project [babi](https://github.com/asottile/babi).\n\na text editor\n",
      "summary": "Check out asottile and their project babi.",
      "date_published": "2021-01-11T04:47:17Z",
      "date_modified": "2021-01-11T04:47:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jameslittle230-stork/",
      "url": "https://go.waylonwalker.com/jameslittle230-stork/",
      "title": "⭐ jameslittle230 stork",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/jameslittle230\" 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\"\u003ejameslittle230\u003c/a\u003e and their project \u003ca href=\"https://github.com/jameslittle230/stork\" 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\"\u003estork\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🔎 Impossibly fast web search, made for static sites.\u003c/p\u003e\n",
      "content_text": "\nCheck out [jameslittle230](https://github.com/jameslittle230) and their project [stork](https://github.com/jameslittle230/stork).\n\n🔎 Impossibly fast web search, made for static sites.\n",
      "summary": "Check out jameslittle230 and their project stork.",
      "date_published": "2021-01-09T15:52:43Z",
      "date_modified": "2021-01-09T15:52:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tpope-vim-commentary/",
      "url": "https://go.waylonwalker.com/tpope-vim-commentary/",
      "title": "⭐ tpope vim-commentary",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/tpope/vim-commentary\" 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\"\u003evim-commentary\u003c/a\u003e, created by \u003ca href=\"https://github.com/tpope\" 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\"\u003etpope\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ecommentary.vim: comment stuff out\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [vim-commentary](https://github.com/tpope/vim-commentary), created by [tpope](https://github.com/tpope).\n\ncommentary.vim: comment stuff out\n",
      "summary": "If you're into interesting projects, don't miss out on vim-commentary, created by tpope.",
      "date_published": "2021-01-08T13:41:26Z",
      "date_modified": "2021-01-08T13:41:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tpope-vim-fugitive/",
      "url": "https://go.waylonwalker.com/tpope-vim-fugitive/",
      "title": "⭐ tpope vim-fugitive",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/tpope/vim-fugitive\" 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\"\u003evim-fugitive\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/tpope\" 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\"\u003etpope\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003efugitive.vim: A \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e wrapper so awesome, it should be illegal\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [vim-fugitive](https://github.com/tpope/vim-fugitive), an amazing project by [tpope](https://github.com/tpope). It's worth exploring!\n\nfugitive.vim: A Git wrapper so awesome, it should be illegal\n",
      "summary": "I'm really excited about vim-fugitive, an amazing project by tpope. It's worth exploring!",
      "date_published": "2021-01-08T13:41:17Z",
      "date_modified": "2021-01-08T13:41:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tpope-vim-surround/",
      "url": "https://go.waylonwalker.com/tpope-vim-surround/",
      "title": "⭐ tpope vim-surround",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/tpope/vim-surround\" 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\"\u003evim-surround\u003c/a\u003e by \u003ca href=\"https://github.com/tpope\" 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\"\u003etpope\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003esurround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease\u003c/p\u003e\n",
      "content_text": "\nThe work on [vim-surround](https://github.com/tpope/vim-surround) by [tpope](https://github.com/tpope).\n\nsurround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease\n",
      "summary": "The work on vim-surround by tpope.",
      "date_published": "2021-01-08T13:41:06Z",
      "date_modified": "2021-01-08T13:41:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-org-kedro-starters/",
      "url": "https://go.waylonwalker.com/kedro-org-kedro-starters/",
      "title": "⭐ kedro-org kedro-starters",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/kedro-org/kedro-starters\" 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\"\u003ekedro-starters\u003c/a\u003e, created by \u003ca href=\"https://github.com/kedro-org\" 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\"\u003ekedro-org\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTemplates for your Kedro projects.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [kedro-starters](https://github.com/kedro-org/kedro-starters), created by [kedro-org](https://github.com/kedro-org).\n\nTemplates for your Kedro projects.\n",
      "summary": "If you're into interesting projects, don't miss out on kedro-starters, created by kedro-org.",
      "date_published": "2021-01-06T22:26:48Z",
      "date_modified": "2021-01-06T22:26:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/khzaw-vim-conceal/",
      "url": "https://go.waylonwalker.com/khzaw-vim-conceal/",
      "title": "⭐ khzaw vim-conceal",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/khzaw\" 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\"\u003ekhzaw\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/khzaw/vim-conceal\" 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\"\u003evim-conceal\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA vim plugin making use of vim’s conceal feature for additional visual eyecandy.\u003c/p\u003e\n",
      "content_text": "\n[khzaw](https://github.com/khzaw) has done a fantastic job with [vim-conceal](https://github.com/khzaw/vim-conceal). Highly recommend taking a look.\n\nA vim plugin making use of vim's conceal feature for additional visual eyecandy.\n",
      "summary": "khzaw has done a fantastic job with vim-conceal. Highly recommend taking a look.",
      "date_published": "2021-01-03T00:56:45Z",
      "date_modified": "2021-01-03T00:56:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/christoomey-vim-tmux-runner/",
      "url": "https://go.waylonwalker.com/christoomey-vim-tmux-runner/",
      "title": "⭐ christoomey vim-tmux-runner",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/christoomey/vim-tmux-runner\" 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\"\u003evim-tmux-runner\u003c/a\u003e from \u003ca href=\"https://github.com/christoomey\" 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\"\u003echristoomey\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eVim and tmux, sittin’ in a tree…\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [vim-tmux-runner](https://github.com/christoomey/vim-tmux-runner) from [christoomey](https://github.com/christoomey).\n\nVim and tmux, sittin' in a tree...\n",
      "summary": "I'm impressed by vim-tmux-runner from christoomey.",
      "date_published": "2020-12-13T22:21:21Z",
      "date_modified": "2020-12-13T22:21:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fkromer-awesome-kedro/",
      "url": "https://go.waylonwalker.com/fkromer-awesome-kedro/",
      "title": "⭐ fkromer awesome-kedro",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/fkromer\" 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\"\u003efkromer’s\u003c/a\u003e project \u003ca href=\"https://github.com/fkromer/awesome-kedro\" 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\"\u003eawesome-kedro\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI like [fkromer's](https://github.com/fkromer) project [awesome-kedro](https://github.com/fkromer/awesome-kedro).\n\nNo description available.\n",
      "summary": "I like fkromer's project awesome-kedro.",
      "date_published": "2020-12-13T21:15:37Z",
      "date_modified": "2020-12-13T21:15:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/christianchiarulli-machfiles/",
      "url": "https://go.waylonwalker.com/christianchiarulli-machfiles/",
      "title": "⭐ ChristianChiarulli machfiles",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/ChristianChiarulli/machfiles\" 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\"\u003emachfiles\u003c/a\u003e by \u003ca href=\"https://github.com/ChristianChiarulli\" 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\"\u003eChristianChiarulli\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eThe dotfiles you see in all my videos\u003c/p\u003e\n",
      "content_text": "\nJust starred [machfiles](https://github.com/ChristianChiarulli/machfiles) by [ChristianChiarulli](https://github.com/ChristianChiarulli). It's an exciting project with a lot to offer.\n\nThe dotfiles you see in all my videos\n",
      "summary": "Just starred machfiles by ChristianChiarulli. It's an exciting project with a lot to offer.",
      "date_published": "2020-12-13T03:18:31Z",
      "date_modified": "2020-12-13T03:18:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lunarvim-lunarvim/",
      "url": "https://go.waylonwalker.com/lunarvim-lunarvim/",
      "title": "⭐ LunarVim LunarVim",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/LunarVim\" 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\"\u003eLunarVim\u003c/a\u003e and their project \u003ca href=\"https://github.com/LunarVim/LunarVim\" 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\"\u003eLunarVim\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.\u003c/p\u003e\n",
      "content_text": "\nCheck out [LunarVim](https://github.com/LunarVim) and their project [LunarVim](https://github.com/LunarVim/LunarVim).\n\n🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.\n",
      "summary": "Check out LunarVim and their project LunarVim.",
      "date_published": "2020-12-13T03:18:14Z",
      "date_modified": "2020-12-13T03:18:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joelhooks-joelhooks-com/",
      "url": "https://go.waylonwalker.com/joelhooks-joelhooks-com/",
      "title": "⭐ joelhooks joelhooks-com",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/joelhooks/joelhooks-com\" 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\"\u003ejoelhooks-com\u003c/a\u003e by \u003ca href=\"https://github.com/joelhooks\" 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\"\u003ejoelhooks\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eplaying with static pages\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [joelhooks-com](https://github.com/joelhooks/joelhooks-com) by [joelhooks](https://github.com/joelhooks).\n\nplaying with static pages\n",
      "summary": "Looking for inspiration? joelhooks-com by joelhooks.",
      "date_published": "2020-12-11T17:00:42Z",
      "date_modified": "2020-12-11T17:00:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-devtainer/",
      "url": "https://go.waylonwalker.com/waylonwalker-devtainer/",
      "title": "⭐ WaylonWalker devtainer",
      "content_html": "\u003cp\u003e\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 has done a fantastic job with \u003ca href=\"https://github.com/WaylonWalker/devtainer\" 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\"\u003edevtainer\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003e🐳 (dotfiles) My personal development docker container base image\u003c/p\u003e\n",
      "content_text": "\n[WaylonWalker](https://github.com/WaylonWalker) has done a fantastic job with [devtainer](https://github.com/WaylonWalker/devtainer). Highly recommend taking a look.\n\n🐳 (dotfiles) My personal development docker container base image\n",
      "summary": "WaylonWalker has done a fantastic job with devtainer. Highly recommend taking a look.",
      "date_published": "2020-12-07T13:55:15Z",
      "date_modified": "2020-12-07T13:55:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-waylonwalker/",
      "url": "https://go.waylonwalker.com/waylonwalker-waylonwalker/",
      "title": "⭐ WaylonWalker WaylonWalker",
      "content_html": "\u003cp\u003e\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 has done a fantastic job with \u003ca href=\"https://github.com/WaylonWalker/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. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eLearning in public\u003c/p\u003e\n",
      "content_text": "\n[WaylonWalker](https://github.com/WaylonWalker) has done a fantastic job with [WaylonWalker](https://github.com/WaylonWalker/WaylonWalker). Highly recommend taking a look.\n\nLearning in public\n",
      "summary": "WaylonWalker has done a fantastic job with WaylonWalker. Highly recommend taking a look.",
      "date_published": "2020-12-04T16:30:57Z",
      "date_modified": "2020-12-04T16:30:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/theprimeagen-aoc/",
      "url": "https://go.waylonwalker.com/theprimeagen-aoc/",
      "title": "⭐ ThePrimeagen aoc",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ThePrimeagen/aoc\" 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\"\u003eaoc\u003c/a\u003e by \u003ca href=\"https://github.com/ThePrimeagen\" 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\"\u003eThePrimeagen\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003e2020\u003c/p\u003e\n",
      "content_text": "\nCheck out [aoc](https://github.com/ThePrimeagen/aoc) by [ThePrimeagen](https://github.com/ThePrimeagen). It's a well-crafted project with great potential.\n\n2020\n",
      "summary": "Check out aoc by ThePrimeagen. It's a well-crafted project with great potential.",
      "date_published": "2020-12-02T14:18:31Z",
      "date_modified": "2020-12-02T14:18:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zaxr-bulwark/",
      "url": "https://go.waylonwalker.com/zaxr-bulwark/",
      "title": "⭐ ZaxR bulwark",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ZaxR\" 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\"\u003eZaxR\u003c/a\u003e and their project \u003ca href=\"https://github.com/ZaxR/bulwark\" 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\"\u003ebulwark\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBulwark is a package for convenient property-based testing of pandas dataframes.\u003c/p\u003e\n",
      "content_text": "\nCheck out [ZaxR](https://github.com/ZaxR) and their project [bulwark](https://github.com/ZaxR/bulwark).\n\nBulwark is a package for convenient property-based testing of pandas dataframes.\n",
      "summary": "Check out ZaxR and their project bulwark.",
      "date_published": "2020-12-01T22:12:05Z",
      "date_modified": "2020-12-01T22:12:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mariokostelac-sagemaker-setup/",
      "url": "https://go.waylonwalker.com/mariokostelac-sagemaker-setup/",
      "title": "⭐ mariokostelac sagemaker-setup",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/mariokostelac\" 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\"\u003emariokostelac\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/mariokostelac/sagemaker-setup\" 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\"\u003esagemaker-setup\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eUseful scripts for making AWS SageMaker better\u003c/p\u003e\n",
      "content_text": "\n[mariokostelac](https://github.com/mariokostelac) has done a fantastic job with [sagemaker-setup](https://github.com/mariokostelac/sagemaker-setup). Highly recommend taking a look.\n\nUseful scripts for making AWS SageMaker better\n",
      "summary": "mariokostelac has done a fantastic job with sagemaker-setup. Highly recommend taking a look.",
      "date_published": "2020-12-01T21:47:07Z",
      "date_modified": "2020-12-01T21:47:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypeaday-aoc-2020/",
      "url": "https://go.waylonwalker.com/pypeaday-aoc-2020/",
      "title": "⭐ pypeaday aoc-2020",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/pypeaday\" 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\"\u003epypeaday’s\u003c/a\u003e project \u003ca href=\"https://github.com/pypeaday/aoc-2020\" 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\"\u003eaoc-2020\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAdvent of Code 2020\u003c/p\u003e\n",
      "content_text": "\nI like [pypeaday's](https://github.com/pypeaday) project [aoc-2020](https://github.com/pypeaday/aoc-2020).\n\nAdvent of Code 2020\n",
      "summary": "I like pypeaday's project aoc-2020.",
      "date_published": "2020-12-01T04:27:17Z",
      "date_modified": "2020-12-01T04:27:17Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wyattblue-auto-editor/",
      "url": "https://go.waylonwalker.com/wyattblue-auto-editor/",
      "title": "⭐ WyattBlue auto-editor",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/WyattBlue/auto-editor\" 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\"\u003eauto-editor\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/WyattBlue\" 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\"\u003eWyattBlue\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eAuto-Editor: Efficient media analysis and rendering\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [auto-editor](https://github.com/WyattBlue/auto-editor), an amazing project by [WyattBlue](https://github.com/WyattBlue). It's worth exploring!\n\nAuto-Editor: Efficient media analysis and rendering\n",
      "summary": "I'm really excited about auto-editor, an amazing project by WyattBlue. It's worth exploring!",
      "date_published": "2020-11-27T04:09:27Z",
      "date_modified": "2020-11-27T04:09:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yetudada-yetudada/",
      "url": "https://go.waylonwalker.com/yetudada-yetudada/",
      "title": "⭐ yetudada yetudada",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/yetudada\" 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\"\u003eyetudada\u003c/a\u003e and their project \u003ca href=\"https://github.com/yetudada/yetudada\" 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\"\u003eyetudada\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [yetudada](https://github.com/yetudada) and their project [yetudada](https://github.com/yetudada/yetudada).\n\nNo description available.\n",
      "summary": "Check out yetudada and their project yetudada.",
      "date_published": "2020-11-23T23:09:30Z",
      "date_modified": "2020-11-23T23:09:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/timothycrosley-quickpython/",
      "url": "https://go.waylonwalker.com/timothycrosley-quickpython/",
      "title": "⭐ timothycrosley quickpython",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/timothycrosley/quickpython\" 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\"\u003equickpython\u003c/a\u003e from \u003ca href=\"https://github.com/timothycrosley\" 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\"\u003etimothycrosley\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA retro interactive coding environment powered by Python and nostalgia\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [quickpython](https://github.com/timothycrosley/quickpython) from [timothycrosley](https://github.com/timothycrosley).\n\nA retro interactive coding environment powered by Python and nostalgia\n",
      "summary": "I'm impressed by quickpython from timothycrosley.",
      "date_published": "2020-11-21T23:04:24Z",
      "date_modified": "2020-11-21T23:04:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/astronomer-dag-factory/",
      "url": "https://go.waylonwalker.com/astronomer-dag-factory/",
      "title": "⭐ astronomer dag-factory",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/astronomer\" 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\"\u003eastronomer\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/astronomer/dag-factory\" 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\"\u003edag-factory\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eDynamically generate Apache Airflow DAGs from YAML configuration files\u003c/p\u003e\n",
      "content_text": "\n[astronomer](https://github.com/astronomer) has done a fantastic job with [dag-factory](https://github.com/astronomer/dag-factory). Highly recommend taking a look.\n\nDynamically generate Apache Airflow DAGs from YAML configuration files\n",
      "summary": "astronomer has done a fantastic job with dag-factory. Highly recommend taking a look.",
      "date_published": "2020-11-16T14:35:24Z",
      "date_modified": "2020-11-16T14:35:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/orchest-orchest/",
      "url": "https://go.waylonwalker.com/orchest-orchest/",
      "title": "⭐ orchest orchest",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/orchest/orchest\" 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\"\u003eorchest\u003c/a\u003e by \u003ca href=\"https://github.com/orchest\" 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\"\u003eorchest\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eBuild data pipelines, the easy way 🛠️\u003c/p\u003e\n",
      "content_text": "\n[orchest](https://github.com/orchest/orchest) by [orchest](https://github.com/orchest) is a game-changer in its space. Excited to see how it evolves.\n\nBuild data pipelines, the easy way 🛠️\n",
      "summary": "orchest by orchest is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-11-12T15:38:23Z",
      "date_modified": "2020-11-12T15:38:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gvanrossum-patma/",
      "url": "https://go.waylonwalker.com/gvanrossum-patma/",
      "title": "⭐ gvanrossum patma",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/gvanrossum\" 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\"\u003egvanrossum\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/gvanrossum/patma\" 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\"\u003epatma\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003ePattern Matching\u003c/p\u003e\n",
      "content_text": "\n[gvanrossum](https://github.com/gvanrossum) has done a fantastic job with [patma](https://github.com/gvanrossum/patma). Highly recommend taking a look.\n\nPattern Matching\n",
      "summary": "gvanrossum has done a fantastic job with patma. Highly recommend taking a look.",
      "date_published": "2020-11-07T05:31:08Z",
      "date_modified": "2020-11-07T05:31:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mingrammer-diagrams/",
      "url": "https://go.waylonwalker.com/mingrammer-diagrams/",
      "title": "⭐ mingrammer diagrams",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/mingrammer\" 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\"\u003emingrammer\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/mingrammer/diagrams\" 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\"\u003ediagrams\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003e🎨 Diagram as Code for prototyping cloud system architectures\u003c/p\u003e\n",
      "content_text": "\n[mingrammer](https://github.com/mingrammer) has done a fantastic job with [diagrams](https://github.com/mingrammer/diagrams). Highly recommend taking a look.\n\n:art: Diagram as Code for prototyping cloud system architectures\n",
      "summary": "mingrammer has done a fantastic job with diagrams. Highly recommend taking a look.",
      "date_published": "2020-11-06T03:52:15Z",
      "date_modified": "2020-11-06T03:52:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/swyxio-svelte-actions/",
      "url": "https://go.waylonwalker.com/swyxio-svelte-actions/",
      "title": "⭐ swyxio svelte-actions",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/swyxio/svelte-actions\" 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\"\u003esvelte-actions\u003c/a\u003e by \u003ca href=\"https://github.com/swyxio\" 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\"\u003eswyxio\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eprototype official actions for Svelte\u003c/p\u003e\n",
      "content_text": "\nJust starred [svelte-actions](https://github.com/swyxio/svelte-actions) by [swyxio](https://github.com/swyxio). It's an exciting project with a lot to offer.\n\nprototype official actions for Svelte\n",
      "summary": "Just starred svelte-actions by swyxio. It's an exciting project with a lot to offer.",
      "date_published": "2020-11-02T18:13:21Z",
      "date_modified": "2020-11-02T18:13:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kasperzutterman-second-brain/",
      "url": "https://go.waylonwalker.com/kasperzutterman-second-brain/",
      "title": "⭐ KasperZutterman Second-Brain",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/KasperZutterman/Second-Brain\" 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\"\u003eSecond-Brain\u003c/a\u003e by \u003ca href=\"https://github.com/KasperZutterman\" 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\"\u003eKasperZutterman\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA curated list of awesome Public Zettelkastens 🗄️ / Second Brains 🧠 / Digital Gardens 🌱\u003c/p\u003e\n",
      "content_text": "\nJust starred [Second-Brain](https://github.com/KasperZutterman/Second-Brain) by [KasperZutterman](https://github.com/KasperZutterman). It's an exciting project with a lot to offer.\n\nA curated list of awesome Public Zettelkastens 🗄️ / Second Brains 🧠 / Digital Gardens 🌱\n",
      "summary": "Just starred Second-Brain by KasperZutterman. It's an exciting project with a lot to offer.",
      "date_published": "2020-10-28T16:17:51Z",
      "date_modified": "2020-10-28T16:17:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nastyox-repo-roster/",
      "url": "https://go.waylonwalker.com/nastyox-repo-roster/",
      "title": "⭐ nastyox Repo-Roster",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/nastyox/Repo-Roster\" 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\"\u003eRepo-Roster\u003c/a\u003e by \u003ca href=\"https://github.com/nastyox\" 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\"\u003enastyox\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eShout-out supporters in your GitHub README file.\u003c/p\u003e\n",
      "content_text": "\nJust starred [Repo-Roster](https://github.com/nastyox/Repo-Roster) by [nastyox](https://github.com/nastyox). It's an exciting project with a lot to offer.\n\nShout-out supporters in your GitHub README file.\n",
      "summary": "Just starred Repo-Roster by nastyox. It's an exciting project with a lot to offer.",
      "date_published": "2020-10-27T19:52:00Z",
      "date_modified": "2020-10-27T19:52:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mkdocs-mkdocs/",
      "url": "https://go.waylonwalker.com/mkdocs-mkdocs/",
      "title": "⭐ mkdocs mkdocs",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/mkdocs/mkdocs\" 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\"\u003emkdocs\u003c/a\u003e by \u003ca href=\"https://github.com/mkdocs\" 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\"\u003emkdocs\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eProject documentation with Markdown.\u003c/p\u003e\n",
      "content_text": "\n[mkdocs](https://github.com/mkdocs/mkdocs) by [mkdocs](https://github.com/mkdocs) is a game-changer in its space. Excited to see how it evolves.\n\nProject documentation with Markdown.\n",
      "summary": "mkdocs by mkdocs is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-10-23T20:56:01Z",
      "date_modified": "2020-10-23T20:56:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mmchougule-kedro-grpc-server/",
      "url": "https://go.waylonwalker.com/mmchougule-kedro-grpc-server/",
      "title": "⭐ mmchougule kedro-grpc-server",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/mmchougule\" 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\"\u003emmchougule\u003c/a\u003e and their project \u003ca href=\"https://github.com/mmchougule/kedro-grpc-server\" 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\"\u003ekedro-grpc-server\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eKedro gRPC Server is a Kedro plugin that creates a gRPC server for triggering and monitoring pipeline runs using a general-purpose RPC framework gRPC\u003c/p\u003e\n",
      "content_text": "\nCheck out [mmchougule](https://github.com/mmchougule) and their project [kedro-grpc-server](https://github.com/mmchougule/kedro-grpc-server).\n\nKedro gRPC Server is a Kedro plugin that creates a gRPC server for triggering and monitoring pipeline runs using a general-purpose RPC framework gRPC\n",
      "summary": "Check out mmchougule and their project kedro-grpc-server.",
      "date_published": "2020-10-21T03:23:46Z",
      "date_modified": "2020-10-21T03:23:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yetudada-kedro-user-testing/",
      "url": "https://go.waylonwalker.com/yetudada-kedro-user-testing/",
      "title": "⭐ yetudada kedro-user-testing",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/yetudada\" 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\"\u003eyetudada\u003c/a\u003e and their project \u003ca href=\"https://github.com/yetudada/kedro-user-testing\" 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\"\u003ekedro-user-testing\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDiscovery prototypes for user testing\u003c/p\u003e\n",
      "content_text": "\nCheck out [yetudada](https://github.com/yetudada) and their project [kedro-user-testing](https://github.com/yetudada/kedro-user-testing).\n\nDiscovery prototypes for user testing\n",
      "summary": "Check out yetudada and their project kedro-user-testing.",
      "date_published": "2020-10-21T03:23:29Z",
      "date_modified": "2020-10-21T03:23:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ikamensh-flynt/",
      "url": "https://go.waylonwalker.com/ikamensh-flynt/",
      "title": "⭐ ikamensh flynt",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/ikamensh/flynt\" 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\"\u003eflynt\u003c/a\u003e by \u003ca href=\"https://github.com/ikamensh\" 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\"\u003eikamensh\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA tool to automatically convert old string literal formatting to f-strings\u003c/p\u003e\n",
      "content_text": "\nThe work on [flynt](https://github.com/ikamensh/flynt) by [ikamensh](https://github.com/ikamensh).\n\nA tool to automatically convert old string literal formatting to f-strings\n",
      "summary": "The work on flynt by ikamensh.",
      "date_published": "2020-10-20T15:29:26Z",
      "date_modified": "2020-10-20T15:29:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/charmbracelet-glow/",
      "url": "https://go.waylonwalker.com/charmbracelet-glow/",
      "title": "⭐ charmbracelet glow",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/charmbracelet\" 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\"\u003echarmbracelet\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/charmbracelet/glow\" 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\"\u003eglow\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eRender markdown on the CLI, with pizzazz! 💅🏻\u003c/p\u003e\n",
      "content_text": "\n[charmbracelet](https://github.com/charmbracelet) has done a fantastic job with [glow](https://github.com/charmbracelet/glow). Highly recommend taking a look.\n\nRender markdown on the CLI, with pizzazz! 💅🏻\n",
      "summary": "charmbracelet has done a fantastic job with glow. Highly recommend taking a look.",
      "date_published": "2020-10-18T18:15:55Z",
      "date_modified": "2020-10-18T18:15:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mytechnotalent-python-for-kids/",
      "url": "https://go.waylonwalker.com/mytechnotalent-python-for-kids/",
      "title": "⭐ mytechnotalent Python-For-Kids",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/mytechnotalent\" 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\"\u003emytechnotalent\u003c/a\u003e and their project \u003ca href=\"https://github.com/mytechnotalent/Python-For-Kids\" 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\"\u003ePython-For-Kids\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA FREE comprehensive online Python development tutorial FOR KIDS utilizing an official BBC micro:bit Development Board going step-by-step into the world of Python for microcontrollers.\u003c/p\u003e\n",
      "content_text": "\nCheck out [mytechnotalent](https://github.com/mytechnotalent) and their project [Python-For-Kids](https://github.com/mytechnotalent/Python-For-Kids).\n\nA FREE comprehensive online Python development tutorial FOR KIDS utilizing an official BBC micro:bit Development Board going step-by-step into the world of Python for microcontrollers.\n",
      "summary": "Check out mytechnotalent and their project Python-For-Kids.",
      "date_published": "2020-10-17T18:06:29Z",
      "date_modified": "2020-10-17T18:06:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nnja-pycon_pybadge_2020/",
      "url": "https://go.waylonwalker.com/nnja-pycon_pybadge_2020/",
      "title": "⭐ nnja pycon_pybadge_2020",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/nnja/pycon_pybadge_2020\" 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\"\u003epycon_pybadge_2020\u003c/a\u003e from \u003ca href=\"https://github.com/nnja\" 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\"\u003ennja\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eInitial code for Microsoft’s PyBadge at PyCon 2020\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pycon_pybadge_2020](https://github.com/nnja/pycon_pybadge_2020) from [nnja](https://github.com/nnja).\n\nInitial code for Microsoft's PyBadge at PyCon 2020\n",
      "summary": "I'm impressed by pycon_2020 from nnja.",
      "date_published": "2020-10-17T15:20:21Z",
      "date_modified": "2020-10-17T15:20:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/muesli-duf/",
      "url": "https://go.waylonwalker.com/muesli-duf/",
      "title": "⭐ muesli duf",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/muesli\" 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\"\u003emuesli’s\u003c/a\u003e project \u003ca href=\"https://github.com/muesli/duf\" 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\"\u003eduf\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDisk Usage/Free Utility - a better ‘df’ alternative\u003c/p\u003e\n",
      "content_text": "\nI like [muesli's](https://github.com/muesli) project [duf](https://github.com/muesli/duf).\n\nDisk Usage/Free Utility - a better 'df' alternative\n",
      "summary": "I like muesli's project duf.",
      "date_published": "2020-10-11T15:42:27Z",
      "date_modified": "2020-10-11T15:42:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ankurdedania-python_training/",
      "url": "https://go.waylonwalker.com/ankurdedania-python_training/",
      "title": "⭐ AnkurDedania python_training",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/AnkurDedania/python_training\" 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\"\u003epython_training\u003c/a\u003e from \u003ca href=\"https://github.com/AnkurDedania\" 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\"\u003eAnkurDedania\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eIntro to Python\u003c/p\u003e\n",
      "content_text": "\nI came across [python_training](https://github.com/AnkurDedania/python_training) from [AnkurDedania](https://github.com/AnkurDedania), and it's packed with great features and ideas.\n\nIntro to Python\n",
      "summary": "I came across python_training from AnkurDedania, and it's packed with great features and ideas.",
      "date_published": "2020-10-02T19:59:12Z",
      "date_modified": "2020-10-02T19:59:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/github-renaming/",
      "url": "https://go.waylonwalker.com/github-renaming/",
      "title": "⭐ github renaming",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/github\" 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\"\u003egithub\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/github/renaming\" 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\"\u003erenaming\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eGuidance for changing the default branch name for GitHub repositories\u003c/p\u003e\n",
      "content_text": "\n[github](https://github.com/github) has done a fantastic job with [renaming](https://github.com/github/renaming). Highly recommend taking a look.\n\nGuidance for changing the default branch name for GitHub repositories\n",
      "summary": "github has done a fantastic job with renaming. Highly recommend taking a look.",
      "date_published": "2020-10-01T14:59:51Z",
      "date_modified": "2020-10-01T14:59:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tpope-vim-sleuth/",
      "url": "https://go.waylonwalker.com/tpope-vim-sleuth/",
      "title": "⭐ tpope vim-sleuth",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tpope\" 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\"\u003etpope\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/tpope/vim-sleuth\" 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\"\u003evim-sleuth\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003esleuth.vim: Heuristically set buffer options\u003c/p\u003e\n",
      "content_text": "\n[tpope](https://github.com/tpope) has done a fantastic job with [vim-sleuth](https://github.com/tpope/vim-sleuth). Highly recommend taking a look.\n\nsleuth.vim: Heuristically set buffer options\n",
      "summary": "tpope has done a fantastic job with vim-sleuth. Highly recommend taking a look.",
      "date_published": "2020-09-29T19:19:54Z",
      "date_modified": "2020-09-29T19:19:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/actions-setup-python/",
      "url": "https://go.waylonwalker.com/actions-setup-python/",
      "title": "⭐ actions setup-python",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/actions\" 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\"\u003eactions\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/actions/setup-python\" 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\"\u003esetup-python\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eSet up your GitHub Actions workflow with a specific version of Python\u003c/p\u003e\n",
      "content_text": "\n[actions](https://github.com/actions) has done a fantastic job with [setup-python](https://github.com/actions/setup-python). Highly recommend taking a look.\n\nSet up your GitHub Actions workflow with a specific version of Python\n",
      "summary": "actions has done a fantastic job with setup-python. Highly recommend taking a look.",
      "date_published": "2020-09-29T01:50:50Z",
      "date_modified": "2020-09-29T01:50:50Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/actions-starter-workflows/",
      "url": "https://go.waylonwalker.com/actions-starter-workflows/",
      "title": "⭐ actions starter-workflows",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/actions/starter-workflows\" 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\"\u003estarter-workflows\u003c/a\u003e from \u003ca href=\"https://github.com/actions\" 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\"\u003eactions\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eAccelerating new GitHub Actions workflows\u003c/p\u003e\n",
      "content_text": "\nI came across [starter-workflows](https://github.com/actions/starter-workflows) from [actions](https://github.com/actions), and it's packed with great features and ideas.\n\nAccelerating new GitHub Actions workflows\n",
      "summary": "I came across starter-workflows from actions, and it's packed with great features and ideas.",
      "date_published": "2020-09-29T01:50:38Z",
      "date_modified": "2020-09-29T01:50:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/actions-checkout/",
      "url": "https://go.waylonwalker.com/actions-checkout/",
      "title": "⭐ actions checkout",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/actions/checkout\" 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\"\u003echeckout\u003c/a\u003e by \u003ca href=\"https://github.com/actions\" 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\"\u003eactions\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eAction for checking out a repo\u003c/p\u003e\n",
      "content_text": "\n[checkout](https://github.com/actions/checkout) by [actions](https://github.com/actions) is a game-changer in its space. Excited to see how it evolves.\n\nAction for checking out a repo\n",
      "summary": "checkout by actions is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-09-29T01:50:21Z",
      "date_modified": "2020-09-29T01:50:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nicknisi-dotfiles/",
      "url": "https://go.waylonwalker.com/nicknisi-dotfiles/",
      "title": "⭐ nicknisi dotfiles",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/nicknisi/dotfiles\" 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\"\u003edotfiles\u003c/a\u003e by \u003ca href=\"https://github.com/nicknisi\" 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\"\u003enicknisi\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003evim, zsh, \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e, homebrew, neovim - my whole world\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [dotfiles](https://github.com/nicknisi/dotfiles) by [nicknisi](https://github.com/nicknisi).\n\nvim, zsh, git, homebrew, neovim - my whole world\n",
      "summary": "Looking for inspiration? dotfiles by nicknisi.",
      "date_published": "2020-09-27T19:52:33Z",
      "date_modified": "2020-09-27T19:52:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sirupsen-zk/",
      "url": "https://go.waylonwalker.com/sirupsen-zk/",
      "title": "⭐ sirupsen zk",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/sirupsen/zk\" 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\"\u003ezk\u003c/a\u003e by \u003ca href=\"https://github.com/sirupsen\" 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\"\u003esirupsen\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eZettelkasten on the command-line 📚 🔍\u003c/p\u003e\n",
      "content_text": "\nJust starred [zk](https://github.com/sirupsen/zk) by [sirupsen](https://github.com/sirupsen). It's an exciting project with a lot to offer.\n\nZettelkasten on the command-line 📚 🔍\n",
      "summary": "Just starred zk by sirupsen. It's an exciting project with a lot to offer.",
      "date_published": "2020-09-15T20:35:30Z",
      "date_modified": "2020-09-15T20:35:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sirupsen-napkin-math/",
      "url": "https://go.waylonwalker.com/sirupsen-napkin-math/",
      "title": "⭐ sirupsen napkin-math",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/sirupsen/napkin-math\" 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\"\u003enapkin-math\u003c/a\u003e by \u003ca href=\"https://github.com/sirupsen\" 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\"\u003esirupsen\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTechniques and numbers for estimating system’s performance from first-principles\u003c/p\u003e\n",
      "content_text": "\nThe work on [napkin-math](https://github.com/sirupsen/napkin-math) by [sirupsen](https://github.com/sirupsen).\n\nTechniques and numbers for estimating system's performance from first-principles\n",
      "summary": "The work on napkin-math by sirupsen.",
      "date_published": "2020-09-15T18:33:33Z",
      "date_modified": "2020-09-15T18:33:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/deepyaman-kedro-accelerator/",
      "url": "https://go.waylonwalker.com/deepyaman-kedro-accelerator/",
      "title": "⭐ deepyaman kedro-accelerator",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/deepyaman\" 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\"\u003edeepyaman\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/deepyaman/kedro-accelerator\" 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\"\u003ekedro-accelerator\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eKedro-Accelerator speeds up pipelines by parallelizing I/O in the background.\u003c/p\u003e\n",
      "content_text": "\n[deepyaman](https://github.com/deepyaman) has done a fantastic job with [kedro-accelerator](https://github.com/deepyaman/kedro-accelerator). Highly recommend taking a look.\n\nKedro-Accelerator speeds up pipelines by parallelizing I/O in the background.\n",
      "summary": "deepyaman has done a fantastic job with kedro-accelerator. Highly recommend taking a look.",
      "date_published": "2020-09-15T13:24:39Z",
      "date_modified": "2020-09-15T13:24:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-find-kedro/",
      "url": "https://go.waylonwalker.com/waylonwalker-find-kedro/",
      "title": "⭐ WaylonWalker find-kedro",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/WaylonWalker/find-kedro\" 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\"\u003efind-kedro\u003c/a\u003e by \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/p\u003e\n\u003cp\u003ekedro plugin to automatically construct pipelines using pytest style pattern matching\u003c/p\u003e\n",
      "content_text": "\nThe work on [find-kedro](https://github.com/WaylonWalker/find-kedro) by [WaylonWalker](https://github.com/WaylonWalker).\n\nkedro plugin to automatically construct pipelines using pytest style pattern matching\n",
      "summary": "The work on find-kedro by WaylonWalker.",
      "date_published": "2020-09-04T17:58:53Z",
      "date_modified": "2020-09-04T17:58:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-steel-toes/",
      "url": "https://go.waylonwalker.com/waylonwalker-steel-toes/",
      "title": "⭐ WaylonWalker steel-toes",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/WaylonWalker/steel-toes\" 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\"\u003esteel-toes\u003c/a\u003e by \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/p\u003e\n\u003cp\u003ea kedro hook to protect against breaking changes to data\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [steel-toes](https://github.com/WaylonWalker/steel-toes) by [WaylonWalker](https://github.com/WaylonWalker).\n\na kedro hook to protect against breaking changes to data\n",
      "summary": "Looking for inspiration? steel-toes by WaylonWalker.",
      "date_published": "2020-09-04T17:58:38Z",
      "date_modified": "2020-09-04T17:58:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/htop-dev-htop/",
      "url": "https://go.waylonwalker.com/htop-dev-htop/",
      "title": "⭐ htop-dev htop",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/htop-dev\" 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\"\u003ehtop-dev’s\u003c/a\u003e project \u003ca href=\"https://github.com/htop-dev/htop\" 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\"\u003ehtop\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ehtop - an interactive process viewer\u003c/p\u003e\n",
      "content_text": "\nI like [htop-dev's](https://github.com/htop-dev) project [htop](https://github.com/htop-dev/htop).\n\nhtop - an interactive process viewer\n",
      "summary": "I like htop-dev's project htop.",
      "date_published": "2020-09-01T20:48:47Z",
      "date_modified": "2020-09-01T20:48:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ranaemad-metrics-of-awesome-api/",
      "url": "https://go.waylonwalker.com/ranaemad-metrics-of-awesome-api/",
      "title": "⭐ RanaEmad metrics-of-awesome-api",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/RanaEmad\" 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\"\u003eRanaEmad’s\u003c/a\u003e project \u003ca href=\"https://github.com/RanaEmad/metrics-of-awesome-api\" 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\"\u003emetrics-of-awesome-api\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA Node.js API with the main purpose of acting as a backend for practicing authentication in React. It enables the user to sign up, sign in and view a dashboard with his metrics of awesome through different endpoints.\u003c/p\u003e\n",
      "content_text": "\nI like [RanaEmad's](https://github.com/RanaEmad) project [metrics-of-awesome-api](https://github.com/RanaEmad/metrics-of-awesome-api).\n\nA Node.js API with the main purpose of acting as a backend for practicing authentication in React. It enables the user to sign up, sign in and view a dashboard with his metrics of awesome through different endpoints.\n",
      "summary": "I like RanaEmad's project metrics-of-awesome-api.",
      "date_published": "2020-08-06T13:35:42Z",
      "date_modified": "2020-08-06T13:35:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/elyase-awesome-gpt3/",
      "url": "https://go.waylonwalker.com/elyase-awesome-gpt3/",
      "title": "⭐ elyase awesome-gpt3",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/elyase/awesome-gpt3\" 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\"\u003eawesome-gpt3\u003c/a\u003e, created by \u003ca href=\"https://github.com/elyase\" 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\"\u003eelyase\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [awesome-gpt3](https://github.com/elyase/awesome-gpt3), created by [elyase](https://github.com/elyase).\n\nNo description available.\n",
      "summary": "If you're into interesting projects, don't miss out on awesome-gpt3, created by elyase.",
      "date_published": "2020-08-03T16:26:21Z",
      "date_modified": "2020-08-03T16:26:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/shreyashankar-gpt3-sandbox/",
      "url": "https://go.waylonwalker.com/shreyashankar-gpt3-sandbox/",
      "title": "⭐ shreyashankar gpt3-sandbox",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/shreyashankar\" 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\"\u003eshreyashankar\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/shreyashankar/gpt3-sandbox\" 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\"\u003egpt3-sandbox\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eThe goal of this project is to enable users to create cool web demos using the newly released OpenAI GPT-3 API with just a few lines of Python.\u003c/p\u003e\n",
      "content_text": "\n[shreyashankar](https://github.com/shreyashankar) has done a fantastic job with [gpt3-sandbox](https://github.com/shreyashankar/gpt3-sandbox). Highly recommend taking a look.\n\nThe goal of this project is to enable users to create cool web demos using the newly released OpenAI GPT-3 API with just a few lines of Python.\n",
      "summary": "shreyashankar has done a fantastic job with gpt3-sandbox. Highly recommend taking a look.",
      "date_published": "2020-08-03T16:26:18Z",
      "date_modified": "2020-08-03T16:26:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bdougie-gitactiontraction/",
      "url": "https://go.waylonwalker.com/bdougie-gitactiontraction/",
      "title": "⭐ bdougie gitActionTraction",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/bdougie/gitActionTraction\" 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\"\u003egitActionTraction\u003c/a\u003e from \u003ca href=\"https://github.com/bdougie\" 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\"\u003ebdougie\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e📹 Home video of GitHub Actions tips for better traction.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [gitActionTraction](https://github.com/bdougie/gitActionTraction) from [bdougie](https://github.com/bdougie).\n\n:video_camera: Home video of GitHub Actions tips for better traction.\n",
      "summary": "I'm impressed by gitActionTraction from bdougie.",
      "date_published": "2020-07-31T02:47:44Z",
      "date_modified": "2020-07-31T02:47:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/elangosundar-awesome-readme-templates/",
      "url": "https://go.waylonwalker.com/elangosundar-awesome-readme-templates/",
      "title": "⭐ elangosundar awesome-README-templates",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/elangosundar/awesome-README-templates\" 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\"\u003eawesome-README-templates\u003c/a\u003e, created by \u003ca href=\"https://github.com/elangosundar\" 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\"\u003eelangosundar\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA collection of awesome readme templates to display on your github profile.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [awesome-README-templates](https://github.com/elangosundar/awesome-README-templates), created by [elangosundar](https://github.com/elangosundar).\n\nA collection of awesome readme templates to display on your github profile.\n",
      "summary": "If you're into interesting projects, don't miss out on awesome-README-templates, created by elangosundar.",
      "date_published": "2020-07-29T13:31:12Z",
      "date_modified": "2020-07-29T13:31:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jgm-pandoc/",
      "url": "https://go.waylonwalker.com/jgm-pandoc/",
      "title": "⭐ jgm pandoc",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/jgm/pandoc\" 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\"\u003epandoc\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/jgm\" 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\"\u003ejgm\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eUniversal markup converter\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [pandoc](https://github.com/jgm/pandoc), an amazing project by [jgm](https://github.com/jgm). It's worth exploring!\n\nUniversal markup converter\n",
      "summary": "I'm really excited about pandoc, an amazing project by jgm. It's worth exploring!",
      "date_published": "2020-07-28T01:27:47Z",
      "date_modified": "2020-07-28T01:27:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/anuraghazra-github-readme-stats/",
      "url": "https://go.waylonwalker.com/anuraghazra-github-readme-stats/",
      "title": "⭐ anuraghazra github-readme-stats",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/anuraghazra/github-readme-stats\" 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\"\u003egithub-readme-stats\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/anuraghazra\" 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\"\u003eanuraghazra\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003e⚡ Dynamically generated stats for your github readmes\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [github-readme-stats](https://github.com/anuraghazra/github-readme-stats), an amazing project by [anuraghazra](https://github.com/anuraghazra). It's worth exploring!\n\n:zap: Dynamically generated stats for your github readmes\n",
      "summary": "I'm really excited about github-readme-stats, an amazing project by anuraghazra. It's worth exploring!",
      "date_published": "2020-07-27T12:34:21Z",
      "date_modified": "2020-07-27T12:34:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kelseyhightower-nocode/",
      "url": "https://go.waylonwalker.com/kelseyhightower-nocode/",
      "title": "⭐ kelseyhightower nocode",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/kelseyhightower/nocode\" 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\"\u003enocode\u003c/a\u003e from \u003ca href=\"https://github.com/kelseyhightower\" 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\"\u003ekelseyhightower\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eThe best way to write secure and reliable applications. Write nothing; deploy nowhere.\u003c/p\u003e\n",
      "content_text": "\nI came across [nocode](https://github.com/kelseyhightower/nocode) from [kelseyhightower](https://github.com/kelseyhightower), and it's packed with great features and ideas.\n\nThe best way to write secure and reliable applications. Write nothing; deploy nowhere.\n",
      "summary": "I came across nocode from kelseyhightower, and it's packed with great features and ideas.",
      "date_published": "2020-07-25T20:14:05Z",
      "date_modified": "2020-07-25T20:14:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/thaiane-thaiane/",
      "url": "https://go.waylonwalker.com/thaiane-thaiane/",
      "title": "⭐ Thaiane Thaiane",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/Thaiane/Thaiane\" 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\"\u003eThaiane\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/Thaiane\" 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\"\u003eThaiane\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [Thaiane](https://github.com/Thaiane/Thaiane), an amazing project by [Thaiane](https://github.com/Thaiane). It's worth exploring!\n\nNo description available.\n",
      "summary": "I'm really excited about Thaiane, an amazing project by Thaiane. It's worth exploring!",
      "date_published": "2020-07-23T00:06:58Z",
      "date_modified": "2020-07-23T00:06:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sindresorhus-css-in-readme-like-wat/",
      "url": "https://go.waylonwalker.com/sindresorhus-css-in-readme-like-wat/",
      "title": "⭐ sindresorhus css-in-readme-like-wat",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/sindresorhus\" 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\"\u003esindresorhus\u003c/a\u003e and their project \u003ca href=\"https://github.com/sindresorhus/css-in-readme-like-wat\" 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\"\u003ecss-in-readme-like-wat\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eStyle your readme using CSS with this simple trick\u003c/p\u003e\n",
      "content_text": "\nCheck out [sindresorhus](https://github.com/sindresorhus) and their project [css-in-readme-like-wat](https://github.com/sindresorhus/css-in-readme-like-wat).\n\nStyle your readme using CSS with this simple trick\n",
      "summary": "Check out sindresorhus and their project css-in-readme-like-wat.",
      "date_published": "2020-07-22T14:20:12Z",
      "date_modified": "2020-07-22T14:20:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gautamkrishnar-blog-post-workflow/",
      "url": "https://go.waylonwalker.com/gautamkrishnar-blog-post-workflow/",
      "title": "⭐ gautamkrishnar blog-post-workflow",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/gautamkrishnar/blog-post-workflow\" 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\"\u003eblog-post-workflow\u003c/a\u003e from \u003ca href=\"https://github.com/gautamkrishnar\" 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\"\u003egautamkrishnar\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eShow your latest blog posts from any sources or StackOverflow activity or Youtube Videos on your GitHub profile/project readme automatically using the RSS feed\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [blog-post-workflow](https://github.com/gautamkrishnar/blog-post-workflow) from [gautamkrishnar](https://github.com/gautamkrishnar).\n\nShow your latest blog posts from any sources or StackOverflow activity or Youtube Videos on your GitHub profile/project readme automatically using the RSS feed\n",
      "summary": "I'm impressed by blog-post-workflow from gautamkrishnar.",
      "date_published": "2020-07-21T23:05:41Z",
      "date_modified": "2020-07-21T23:05:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/commitizen-tools-commitizen/",
      "url": "https://go.waylonwalker.com/commitizen-tools-commitizen/",
      "title": "⭐ commitizen-tools commitizen",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/commitizen-tools/commitizen\" 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\"\u003ecommitizen\u003c/a\u003e by \u003ca href=\"https://github.com/commitizen-tools\" 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\"\u003ecommitizen-tools\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCreate committing rules for projects 🚀 auto bump versions ⬆️ and auto changelog generation 📂\u003c/p\u003e\n",
      "content_text": "\nThe work on [commitizen](https://github.com/commitizen-tools/commitizen) by [commitizen-tools](https://github.com/commitizen-tools).\n\nCreate committing rules for projects :rocket: auto bump versions :arrow_up: and auto changelog generation :open_file_folder:\n",
      "summary": "The work on commitizen by commitizen-tools.",
      "date_published": "2020-07-21T19:49:18Z",
      "date_modified": "2020-07-21T19:49:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/christopherbiscardi-toast/",
      "url": "https://go.waylonwalker.com/christopherbiscardi-toast/",
      "title": "⭐ ChristopherBiscardi toast",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ChristopherBiscardi\" 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\"\u003eChristopherBiscardi\u003c/a\u003e and their project \u003ca href=\"https://github.com/ChristopherBiscardi/toast\" 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\"\u003etoast\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMoved! now at \u003ca href=\"https://github.com/toastdotdev/toast\" 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\"\u003ehttps://github.com/toastdotdev/toast\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nCheck out [ChristopherBiscardi](https://github.com/ChristopherBiscardi) and their project [toast](https://github.com/ChristopherBiscardi/toast).\n\nMoved! now at https://github.com/toastdotdev/toast\n",
      "summary": "Check out ChristopherBiscardi and their project toast.",
      "date_published": "2020-07-16T04:11:23Z",
      "date_modified": "2020-07-16T04:11:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rikschennink-fitty/",
      "url": "https://go.waylonwalker.com/rikschennink-fitty/",
      "title": "⭐ rikschennink fitty",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/rikschennink\" 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\"\u003erikschennink’s\u003c/a\u003e project \u003ca href=\"https://github.com/rikschennink/fitty\" 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\"\u003efitty\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e✨ Makes text fit perfectly\u003c/p\u003e\n",
      "content_text": "\nI like [rikschennink's](https://github.com/rikschennink) project [fitty](https://github.com/rikschennink/fitty).\n\n✨ Makes text fit perfectly\n",
      "summary": "I like rikschennink's project fitty.",
      "date_published": "2020-07-13T12:40:00Z",
      "date_modified": "2020-07-13T12:40:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/saturn-abhishek-awesome-github-profile-readme/",
      "url": "https://go.waylonwalker.com/saturn-abhishek-awesome-github-profile-readme/",
      "title": "⭐ saturn-abhishek awesome-github-profile-readme",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/saturn-abhishek/awesome-github-profile-readme\" 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\"\u003eawesome-github-profile-readme\u003c/a\u003e by \u003ca href=\"https://github.com/saturn-abhishek\" 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\"\u003esaturn-abhishek\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003e😎 A curated list of awesome GitHub Profile which updates in real time\u003c/p\u003e\n",
      "content_text": "\nCheck out [awesome-github-profile-readme](https://github.com/saturn-abhishek/awesome-github-profile-readme) by [saturn-abhishek](https://github.com/saturn-abhishek). It's a well-crafted project with great potential.\n\n😎 A curated list of awesome GitHub Profile which updates in real time \n",
      "summary": "Check out awesome-github-profile-readme by saturn-abhishek. It's a well-crafted project with great potential.",
      "date_published": "2020-07-13T01:06:30Z",
      "date_modified": "2020-07-13T01:06:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/abhisheknaiidu-awesome-github-profile-readme/",
      "url": "https://go.waylonwalker.com/abhisheknaiidu-awesome-github-profile-readme/",
      "title": "⭐ abhisheknaiidu awesome-github-profile-readme",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/abhisheknaiidu/awesome-github-profile-readme\" 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\"\u003eawesome-github-profile-readme\u003c/a\u003e by \u003ca href=\"https://github.com/abhisheknaiidu\" 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\"\u003eabhisheknaiidu\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003e😎 A curated list of awesome GitHub Profile which updates in real time\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [awesome-github-profile-readme](https://github.com/abhisheknaiidu/awesome-github-profile-readme) by [abhisheknaiidu](https://github.com/abhisheknaiidu), and it's truly impressive.\n\n😎 A curated list of awesome GitHub Profile which updates in real time\n",
      "summary": "I recently discovered awesome-github-profile-readme by abhisheknaiidu, and it's truly impressive.",
      "date_published": "2020-07-13T01:06:30Z",
      "date_modified": "2020-07-13T01:06:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ajeetdsouza-zoxide/",
      "url": "https://go.waylonwalker.com/ajeetdsouza-zoxide/",
      "title": "⭐ ajeetdsouza zoxide",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ajeetdsouza/zoxide\" 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\"\u003ezoxide\u003c/a\u003e by \u003ca href=\"https://github.com/ajeetdsouza\" 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\"\u003eajeetdsouza\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA smarter cd command. Supports all major shells.\u003c/p\u003e\n",
      "content_text": "\n[zoxide](https://github.com/ajeetdsouza/zoxide) by [ajeetdsouza](https://github.com/ajeetdsouza) is a game-changer in its space. Excited to see how it evolves.\n\nA smarter cd command. Supports all major shells.\n",
      "summary": "zoxide by ajeetdsouza is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-07-12T20:37:45Z",
      "date_modified": "2020-07-12T20:37:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mscoutermarsh-mscoutermarsh/",
      "url": "https://go.waylonwalker.com/mscoutermarsh-mscoutermarsh/",
      "title": "⭐ mscoutermarsh mscoutermarsh",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/mscoutermarsh/mscoutermarsh\" 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\"\u003emscoutermarsh\u003c/a\u003e by \u003ca href=\"https://github.com/mscoutermarsh\" 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\"\u003emscoutermarsh\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eSECRETS!\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [mscoutermarsh](https://github.com/mscoutermarsh/mscoutermarsh) by [mscoutermarsh](https://github.com/mscoutermarsh), and it's truly impressive.\n\nSECRETS!\n",
      "summary": "I recently discovered mscoutermarsh by mscoutermarsh, and it's truly impressive.",
      "date_published": "2020-07-12T13:30:48Z",
      "date_modified": "2020-07-12T13:30:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/timburgan-timburgan/",
      "url": "https://go.waylonwalker.com/timburgan-timburgan/",
      "title": "⭐ timburgan timburgan",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/timburgan/timburgan\" 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\"\u003etimburgan\u003c/a\u003e by \u003ca href=\"https://github.com/timburgan\" 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\"\u003etimburgan\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [timburgan](https://github.com/timburgan/timburgan) by [timburgan](https://github.com/timburgan).\n\nNo description available.\n",
      "summary": "Looking for inspiration? timburgan by timburgan.",
      "date_published": "2020-07-11T04:09:09Z",
      "date_modified": "2020-07-11T04:09:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mzjp2-mzjp2/",
      "url": "https://go.waylonwalker.com/mzjp2-mzjp2/",
      "title": "⭐ mzjp2 mzjp2",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/mzjp2/mzjp2\" 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\"\u003emzjp2\u003c/a\u003e by \u003ca href=\"https://github.com/mzjp2\" 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\"\u003emzjp2\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eMy personal readme\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [mzjp2](https://github.com/mzjp2/mzjp2) by [mzjp2](https://github.com/mzjp2), and it's truly impressive.\n\nMy personal readme\n",
      "summary": "I recently discovered mzjp2 by mzjp2, and it's truly impressive.",
      "date_published": "2020-07-09T21:23:26Z",
      "date_modified": "2020-07-09T21:23:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/conda-forge-staged-recipes/",
      "url": "https://go.waylonwalker.com/conda-forge-staged-recipes/",
      "title": "⭐ conda-forge staged-recipes",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/conda-forge/staged-recipes\" 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\"\u003estaged-recipes\u003c/a\u003e by \u003ca href=\"https://github.com/conda-forge\" 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\"\u003econda-forge\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eA place to submit conda recipes before they become fully fledged conda-forge feedstocks\u003c/p\u003e\n",
      "content_text": "\n[staged-recipes](https://github.com/conda-forge/staged-recipes) by [conda-forge](https://github.com/conda-forge) is a game-changer in its space. Excited to see how it evolves.\n\nA place to submit conda recipes before they become fully fledged conda-forge feedstocks\n",
      "summary": "staged-recipes by conda-forge is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-07-08T20:20:23Z",
      "date_modified": "2020-07-08T20:20:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/conda-grayskull/",
      "url": "https://go.waylonwalker.com/conda-grayskull/",
      "title": "⭐ conda grayskull",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/conda/grayskull\" 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\"\u003egrayskull\u003c/a\u003e by \u003ca href=\"https://github.com/conda\" 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\"\u003econda\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eGrayskull 💀 - Recipe generator for Conda\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [grayskull](https://github.com/conda/grayskull) by [conda](https://github.com/conda).\n\nGrayskull :skull: - Recipe generator for Conda\n",
      "summary": "Looking for inspiration? grayskull by conda.",
      "date_published": "2020-07-08T20:20:23Z",
      "date_modified": "2020-07-08T20:20:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rwhitt2049-log_to_json/",
      "url": "https://go.waylonwalker.com/rwhitt2049-log_to_json/",
      "title": "⭐ rwhitt2049 log_to_json",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/rwhitt2049/log_to_json\" 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\"\u003elog_to_json\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/rwhitt2049\" 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\"\u003erwhitt2049\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eYet another Python library to log to JSON\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [log_to_json](https://github.com/rwhitt2049/log_to_json), an amazing project by [rwhitt2049](https://github.com/rwhitt2049). It's worth exploring!\n\nYet another Python library to log to JSON\n",
      "summary": "I'm really excited about log_json, an amazing project by rwhitt2049. It's worth exploring!",
      "date_published": "2020-07-08T01:54:03Z",
      "date_modified": "2020-07-08T01:54:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/foambubble-foam-template/",
      "url": "https://go.waylonwalker.com/foambubble-foam-template/",
      "title": "⭐ foambubble foam-template",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/foambubble/foam-template\" 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\"\u003efoam-template\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/foambubble\" 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\"\u003efoambubble\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eFoam workpace template\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [foam-template](https://github.com/foambubble/foam-template), an amazing project by [foambubble](https://github.com/foambubble). It's worth exploring!\n\nFoam workpace template\n",
      "summary": "I'm really excited about foam-template, an amazing project by foambubble. It's worth exploring!",
      "date_published": "2020-07-06T19:38:29Z",
      "date_modified": "2020-07-06T19:38:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/maggieappleton-digital-gardeners/",
      "url": "https://go.waylonwalker.com/maggieappleton-digital-gardeners/",
      "title": "⭐ MaggieAppleton digital-gardeners",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/MaggieAppleton/digital-gardeners\" 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\"\u003edigital-gardeners\u003c/a\u003e by \u003ca href=\"https://github.com/MaggieAppleton\" 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\"\u003eMaggieAppleton\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eResources, links, projects, and ideas for gardeners tending their digital notes on the public interwebs\u003c/p\u003e\n",
      "content_text": "\nThe work on [digital-gardeners](https://github.com/MaggieAppleton/digital-gardeners) by [MaggieAppleton](https://github.com/MaggieAppleton).\n\nResources, links, projects, and ideas for gardeners tending their digital notes on the public interwebs\n",
      "summary": "The work on digital-gardeners by MaggieAppleton.",
      "date_published": "2020-07-05T21:18:29Z",
      "date_modified": "2020-07-05T21:18:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/googlechromelabs-react-adaptive-hooks/",
      "url": "https://go.waylonwalker.com/googlechromelabs-react-adaptive-hooks/",
      "title": "⭐ GoogleChromeLabs react-adaptive-hooks",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/GoogleChromeLabs/react-adaptive-hooks\" 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\"\u003ereact-adaptive-hooks\u003c/a\u003e by \u003ca href=\"https://github.com/GoogleChromeLabs\" 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\"\u003eGoogleChromeLabs\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eDeliver experiences best suited to a user’s device and network constraints\u003c/p\u003e\n",
      "content_text": "\nCheck out [react-adaptive-hooks](https://github.com/GoogleChromeLabs/react-adaptive-hooks) by [GoogleChromeLabs](https://github.com/GoogleChromeLabs). It's a well-crafted project with great potential.\n\nDeliver experiences best suited to a user's device and network constraints\n",
      "summary": "Check out react-adaptive-hooks by GoogleChromeLabs. It's a well-crafted project with great potential.",
      "date_published": "2020-07-04T20:06:13Z",
      "date_modified": "2020-07-04T20:06:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/streamlit-streamlit/",
      "url": "https://go.waylonwalker.com/streamlit-streamlit/",
      "title": "⭐ streamlit streamlit",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/streamlit/streamlit\" 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\"\u003estreamlit\u003c/a\u003e by \u003ca href=\"https://github.com/streamlit\" 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\"\u003estreamlit\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eStreamlit — A faster way to build and share data apps.\u003c/p\u003e\n",
      "content_text": "\nThe work on [streamlit](https://github.com/streamlit/streamlit) by [streamlit](https://github.com/streamlit).\n\nStreamlit — A faster way to build and share data apps.\n",
      "summary": "The work on streamlit by streamlit.",
      "date_published": "2020-06-25T13:25:14Z",
      "date_modified": "2020-06-25T13:25:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jackmckew-python-interrogate-check/",
      "url": "https://go.waylonwalker.com/jackmckew-python-interrogate-check/",
      "title": "⭐ JackMcKew python-interrogate-check",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/JackMcKew/python-interrogate-check\" 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\"\u003epython-interrogate-check\u003c/a\u003e by \u003ca href=\"https://github.com/JackMcKew\" 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\"\u003eJackMcKew\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eGitHub Action for use with python package interrogate\u003c/p\u003e\n",
      "content_text": "\nJust starred [python-interrogate-check](https://github.com/JackMcKew/python-interrogate-check) by [JackMcKew](https://github.com/JackMcKew). It's an exciting project with a lot to offer.\n\nGitHub Action for use with python package interrogate\n",
      "summary": "Just starred python-interrogate-check by JackMcKew. It's an exciting project with a lot to offer.",
      "date_published": "2020-06-22T19:37:24Z",
      "date_modified": "2020-06-22T19:37:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/davidesantangelo-datoji/",
      "url": "https://go.waylonwalker.com/davidesantangelo-datoji/",
      "title": "⭐ davidesantangelo datoji",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/davidesantangelo\" 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\"\u003edavidesantangelo\u003c/a\u003e and their project \u003ca href=\"https://github.com/davidesantangelo/datoji\" 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\"\u003edatoji\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA tiny JSON storage service. Create, Read, Update, Delete and Search JSON data.\u003c/p\u003e\n",
      "content_text": "\nCheck out [davidesantangelo](https://github.com/davidesantangelo) and their project [datoji](https://github.com/davidesantangelo/datoji).\n\nA tiny JSON storage service. Create, Read, Update, Delete and Search JSON data.\n",
      "summary": "Check out davidesantangelo and their project datoji.",
      "date_published": "2020-06-19T21:01:05Z",
      "date_modified": "2020-06-19T21:01:05Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/visit1985-mdp/",
      "url": "https://go.waylonwalker.com/visit1985-mdp/",
      "title": "⭐ visit1985 mdp",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/visit1985\" 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\"\u003evisit1985\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/visit1985/mdp\" 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\"\u003emdp\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA command-line based markdown presentation tool.\u003c/p\u003e\n",
      "content_text": "\n[visit1985](https://github.com/visit1985) has done a fantastic job with [mdp](https://github.com/visit1985/mdp). Highly recommend taking a look.\n\nA command-line based markdown presentation tool.\n",
      "summary": "visit1985 has done a fantastic job with mdp. Highly recommend taking a look.",
      "date_published": "2020-06-16T23:45:35Z",
      "date_modified": "2020-06-16T23:45:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/say4n-hotreload/",
      "url": "https://go.waylonwalker.com/say4n-hotreload/",
      "title": "⭐ say4n hotreload",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/say4n/hotreload\" 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\"\u003ehotreload\u003c/a\u003e by \u003ca href=\"https://github.com/say4n\" 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\"\u003esay4n\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003ehot reload your python code!\u003c/p\u003e\n",
      "content_text": "\nCheck out [hotreload](https://github.com/say4n/hotreload) by [say4n](https://github.com/say4n). It's a well-crafted project with great potential.\n\nhot reload your python code!\n",
      "summary": "Check out hotreload by say4n. It's a well-crafted project with great potential.",
      "date_published": "2020-06-15T20:02:23Z",
      "date_modified": "2020-06-15T20:02:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tamsanh-kedro-great/",
      "url": "https://go.waylonwalker.com/tamsanh-kedro-great/",
      "title": "⭐ tamsanh kedro-great",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/tamsanh/kedro-great\" 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\"\u003ekedro-great\u003c/a\u003e from \u003ca href=\"https://github.com/tamsanh\" 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\"\u003etamsanh\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eThe easiest way to integrate Kedro and Great Expectations\u003c/p\u003e\n",
      "content_text": "\nI came across [kedro-great](https://github.com/tamsanh/kedro-great) from [tamsanh](https://github.com/tamsanh), and it's packed with great features and ideas.\n\nThe easiest way to integrate Kedro and Great Expectations\n",
      "summary": "I came across kedro-great from tamsanh, and it's packed with great features and ideas.",
      "date_published": "2020-06-15T20:00:51Z",
      "date_modified": "2020-06-15T20:00:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/awesomedata-awesome-public-datasets/",
      "url": "https://go.waylonwalker.com/awesomedata-awesome-public-datasets/",
      "title": "⭐ awesomedata awesome-public-datasets",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/awesomedata/awesome-public-datasets\" 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\"\u003eawesome-public-datasets\u003c/a\u003e from \u003ca href=\"https://github.com/awesomedata\" 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\"\u003eawesomedata\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA topic-centric list of HQ open datasets.\u003c/p\u003e\n",
      "content_text": "\nI came across [awesome-public-datasets](https://github.com/awesomedata/awesome-public-datasets) from [awesomedata](https://github.com/awesomedata), and it's packed with great features and ideas.\n\nA topic-centric list of HQ open datasets.\n",
      "summary": "I came across awesome-public-datasets from awesomedata, and it's packed with great features and ideas.",
      "date_published": "2020-06-15T18:49:44Z",
      "date_modified": "2020-06-15T18:49:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/teemu-pytest-sugar/",
      "url": "https://go.waylonwalker.com/teemu-pytest-sugar/",
      "title": "⭐ Teemu pytest-sugar",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/Teemu/pytest-sugar\" 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\"\u003epytest-sugar\u003c/a\u003e by \u003ca href=\"https://github.com/Teemu\" 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\"\u003eTeemu\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ea plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [pytest-sugar](https://github.com/Teemu/pytest-sugar) by [Teemu](https://github.com/Teemu), and it's truly impressive.\n\na plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)\n",
      "summary": "I recently discovered pytest-sugar by Teemu, and it's truly impressive.",
      "date_published": "2020-06-08T16:13:31Z",
      "date_modified": "2020-06-08T16:13:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ari-hacks-the-hub/",
      "url": "https://go.waylonwalker.com/ari-hacks-the-hub/",
      "title": "⭐ ari-hacks the-hub",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/ari-hacks/the-hub\" 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\"\u003ethe-hub\u003c/a\u003e by \u003ca href=\"https://github.com/ari-hacks\" 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\"\u003eari-hacks\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003e📈📊 A hub where users can experiment with graphing and Python in the browser (\u003ca href=\"https://pyodide-experiment.herokuapp.com/\"\u003ehttps://pyodide-experiment.herokuapp.com/\u003c/a\u003e)\u003c/p\u003e\n",
      "content_text": "\n[the-hub](https://github.com/ari-hacks/the-hub) by [ari-hacks](https://github.com/ari-hacks) is a game-changer in its space. Excited to see how it evolves.\n\n📈📊 A hub where users can experiment with graphing and Python in the browser (https://pyodide-experiment.herokuapp.com/)\n",
      "summary": "the-hub by ari-hacks is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-06-08T15:00:03Z",
      "date_modified": "2020-06-08T15:00:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-desert-desert/",
      "url": "https://go.waylonwalker.com/python-desert-desert/",
      "title": "⭐ python-desert desert",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/python-desert/desert\" 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\"\u003edesert\u003c/a\u003e by \u003ca href=\"https://github.com/python-desert\" 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\"\u003epython-desert\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDeserialize to objects while staying DRY\u003c/p\u003e\n",
      "content_text": "\nThe work on [desert](https://github.com/python-desert/desert) by [python-desert](https://github.com/python-desert).\n\nDeserialize to objects while staying DRY\n",
      "summary": "The work on desert by python-desert.",
      "date_published": "2020-06-04T01:10:46Z",
      "date_modified": "2020-06-04T01:10:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tamsanh-kedro-wings/",
      "url": "https://go.waylonwalker.com/tamsanh-kedro-wings/",
      "title": "⭐ tamsanh kedro-wings",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/tamsanh/kedro-wings\" 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\"\u003ekedro-wings\u003c/a\u003e by \u003ca href=\"https://github.com/tamsanh\" 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\"\u003etamsanh\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eKedro Wings automatically creates catalog entries to simplify Kedro pipeline writing. See the video here: \u003ca href=\"https://www.youtube.com/watch?v=p4ELo1tqbYY\" 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\"\u003ehttps://www.youtube.com/watch?v=p4ELo1tqbYY\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [kedro-wings](https://github.com/tamsanh/kedro-wings) by [tamsanh](https://github.com/tamsanh), and it's truly impressive.\n\nKedro Wings automatically creates catalog entries to simplify Kedro pipeline writing. See the video here: https://www.youtube.com/watch?v=p4ELo1tqbYY\n",
      "summary": "I recently discovered kedro-wings by tamsanh, and it's truly impressive.",
      "date_published": "2020-06-03T19:11:26Z",
      "date_modified": "2020-06-03T19:11:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dataengineerone-kedro-streaming-twitter-pipeline/",
      "url": "https://go.waylonwalker.com/dataengineerone-kedro-streaming-twitter-pipeline/",
      "title": "⭐ dataengineerone kedro-streaming-twitter-pipeline",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/dataengineerone/kedro-streaming-twitter-pipeline\" 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\"\u003ekedro-streaming-twitter-pipeline\u003c/a\u003e by \u003ca href=\"https://github.com/dataengineerone\" 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\"\u003edataengineerone\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nCheck out [kedro-streaming-twitter-pipeline](https://github.com/dataengineerone/kedro-streaming-twitter-pipeline) by [dataengineerone](https://github.com/dataengineerone). It's a well-crafted project with great potential.\n\nNo description available.\n",
      "summary": "Check out kedro-streaming-twitter-pipeline by dataengineerone. It's a well-crafted project with great potential.",
      "date_published": "2020-05-31T00:55:25Z",
      "date_modified": "2020-05-31T00:55:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/junegunn-fzf-vim/",
      "url": "https://go.waylonwalker.com/junegunn-fzf-vim/",
      "title": "⭐ junegunn fzf.vim",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/junegunn\" 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\"\u003ejunegunn\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/junegunn/fzf.vim\" 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\"\u003efzf.vim\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003efzf ❤️ vim\u003c/p\u003e\n",
      "content_text": "\n[junegunn](https://github.com/junegunn) has done a fantastic job with [fzf.vim](https://github.com/junegunn/fzf.vim). Highly recommend taking a look.\n\nfzf :heart: vim\n",
      "summary": "junegunn has done a fantastic job with fzf.vim. Highly recommend taking a look.",
      "date_published": "2020-05-29T13:22:23Z",
      "date_modified": "2020-05-29T13:22:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joeyespo-pytest-watch/",
      "url": "https://go.waylonwalker.com/joeyespo-pytest-watch/",
      "title": "⭐ joeyespo pytest-watch",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/joeyespo/pytest-watch\" 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\"\u003epytest-watch\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/joeyespo\" 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\"\u003ejoeyespo\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eLocal continuous test runner with pytest and watchdog.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [pytest-watch](https://github.com/joeyespo/pytest-watch), an amazing project by [joeyespo](https://github.com/joeyespo). It's worth exploring!\n\nLocal continuous test runner with pytest and watchdog.\n",
      "summary": "I'm really excited about pytest-watch, an amazing project by joeyespo. It's worth exploring!",
      "date_published": "2020-05-24T19:25:52Z",
      "date_modified": "2020-05-24T19:25:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/aws-aws-cli/",
      "url": "https://go.waylonwalker.com/aws-aws-cli/",
      "title": "⭐ aws aws-cli",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/aws\" 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\"\u003eaws\u003c/a\u003e and their project \u003ca href=\"https://github.com/aws/aws-cli\" 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\"\u003eaws-cli\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eUniversal Command Line Interface for Amazon Web Services\u003c/p\u003e\n",
      "content_text": "\nCheck out [aws](https://github.com/aws) and their project [aws-cli](https://github.com/aws/aws-cli).\n\nUniversal Command Line Interface for Amazon Web Services\n",
      "summary": "Check out aws and their project aws-cli.",
      "date_published": "2020-05-24T02:35:29Z",
      "date_modified": "2020-05-24T02:35:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hauntsaninja-pyp/",
      "url": "https://go.waylonwalker.com/hauntsaninja-pyp/",
      "title": "⭐ hauntsaninja pyp",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/hauntsaninja/pyp\" 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\"\u003epyp\u003c/a\u003e by \u003ca href=\"https://github.com/hauntsaninja\" 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\"\u003ehauntsaninja\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eEasily run Python at the shell! Magical, but never mysterious.\u003c/p\u003e\n",
      "content_text": "\nJust starred [pyp](https://github.com/hauntsaninja/pyp) by [hauntsaninja](https://github.com/hauntsaninja). It's an exciting project with a lot to offer.\n\nEasily run Python at the shell! Magical, but never mysterious.\n",
      "summary": "Just starred pyp by hauntsaninja. It's an exciting project with a lot to offer.",
      "date_published": "2020-05-15T01:11:26Z",
      "date_modified": "2020-05-15T01:11:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/econchick-interrogate/",
      "url": "https://go.waylonwalker.com/econchick-interrogate/",
      "title": "⭐ econchick interrogate",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/econchick\" 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\"\u003eeconchick’s\u003c/a\u003e project \u003ca href=\"https://github.com/econchick/interrogate\" 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\"\u003einterrogate\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eExplain yourself! Interrogate a codebase for docstring coverage.\u003c/p\u003e\n",
      "content_text": "\nI like [econchick's](https://github.com/econchick) project [interrogate](https://github.com/econchick/interrogate).\n\nExplain yourself! Interrogate a codebase for docstring coverage.\n",
      "summary": "I like econchick's project interrogate.",
      "date_published": "2020-05-15T00:54:45Z",
      "date_modified": "2020-05-15T00:54:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rec-safer/",
      "url": "https://go.waylonwalker.com/rec-safer/",
      "title": "⭐ rec safer",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/rec\" 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\"\u003erec\u003c/a\u003e and their project \u003ca href=\"https://github.com/rec/safer\" 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\"\u003esafer\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🧷 A safer writer 🧷\u003c/p\u003e\n",
      "content_text": "\nCheck out [rec](https://github.com/rec) and their project [safer](https://github.com/rec/safer).\n\n🧷 A safer writer 🧷\n",
      "summary": "Check out rec and their project safer.",
      "date_published": "2020-05-10T18:56:58Z",
      "date_modified": "2020-05-10T18:56:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fake-name-autoflake/",
      "url": "https://go.waylonwalker.com/fake-name-autoflake/",
      "title": "⭐ fake-name autoflake",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/fake-name/autoflake\" 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\"\u003eautoflake\u003c/a\u003e by \u003ca href=\"https://github.com/fake-name\" 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\"\u003efake-name\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRemoves unused imports and unused variables as reported by pyflakes\u003c/p\u003e\n",
      "content_text": "\nThe work on [autoflake](https://github.com/fake-name/autoflake) by [fake-name](https://github.com/fake-name).\n\nRemoves unused imports and unused variables as reported by pyflakes\n",
      "summary": "The work on autoflake by fake-name.",
      "date_published": "2020-05-08T19:26:52Z",
      "date_modified": "2020-05-08T19:26:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/trys-sergey/",
      "url": "https://go.waylonwalker.com/trys-sergey/",
      "title": "⭐ trys sergey",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/trys\" 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\"\u003etrys\u003c/a\u003e and their project \u003ca href=\"https://github.com/trys/sergey\" 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\"\u003esergey\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA tiny lil’ static site generator\u003c/p\u003e\n",
      "content_text": "\nCheck out [trys](https://github.com/trys) and their project [sergey](https://github.com/trys/sergey).\n\nA tiny lil' static site generator\n",
      "summary": "Check out trys and their project sergey.",
      "date_published": "2020-05-08T13:46:32Z",
      "date_modified": "2020-05-08T13:46:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rsalmei-alive-progress/",
      "url": "https://go.waylonwalker.com/rsalmei-alive-progress/",
      "title": "⭐ rsalmei alive-progress",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/rsalmei/alive-progress\" 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\"\u003ealive-progress\u003c/a\u003e from \u003ca href=\"https://github.com/rsalmei\" 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\"\u003ersalmei\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [alive-progress](https://github.com/rsalmei/alive-progress) from [rsalmei](https://github.com/rsalmei).\n\nA new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!\n",
      "summary": "I'm impressed by alive-progress from rsalmei.",
      "date_published": "2020-04-30T18:34:43Z",
      "date_modified": "2020-04-30T18:34:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/skywind3000-vim-quickui/",
      "url": "https://go.waylonwalker.com/skywind3000-vim-quickui/",
      "title": "⭐ skywind3000 vim-quickui",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/skywind3000/vim-quickui\" 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\"\u003evim-quickui\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/skywind3000\" 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\"\u003eskywind3000\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eThe missing UI extensions for Vim 9 (and NeoVim) !! 😎\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [vim-quickui](https://github.com/skywind3000/vim-quickui), an amazing project by [skywind3000](https://github.com/skywind3000). It's worth exploring!\n\nThe missing UI extensions for Vim 9 (and NeoVim) !! :sunglasses:\n",
      "summary": "I'm really excited about vim-quickui, an amazing project by skywind3000. It's worth exploring!",
      "date_published": "2020-04-29T18:22:46Z",
      "date_modified": "2020-04-29T18:22:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/aristocratos-bashtop/",
      "url": "https://go.waylonwalker.com/aristocratos-bashtop/",
      "title": "⭐ aristocratos bashtop",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/aristocratos/bashtop\" 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\"\u003ebashtop\u003c/a\u003e, created by \u003ca href=\"https://github.com/aristocratos\" 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\"\u003earistocratos\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eLinux/OSX/FreeBSD resource monitor\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [bashtop](https://github.com/aristocratos/bashtop), created by [aristocratos](https://github.com/aristocratos).\n\nLinux/OSX/FreeBSD resource monitor\n",
      "summary": "If you're into interesting projects, don't miss out on bashtop, created by aristocratos.",
      "date_published": "2020-04-29T01:18:42Z",
      "date_modified": "2020-04-29T01:18:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/stevekrenzel-autoreload/",
      "url": "https://go.waylonwalker.com/stevekrenzel-autoreload/",
      "title": "⭐ stevekrenzel autoreload",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/stevekrenzel/autoreload\" 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\"\u003eautoreload\u003c/a\u003e by \u003ca href=\"https://github.com/stevekrenzel\" 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\"\u003estevekrenzel\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA small python script to watch a directory for changes and reload a process when a change is detected.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [autoreload](https://github.com/stevekrenzel/autoreload) by [stevekrenzel](https://github.com/stevekrenzel).\n\nA small python script to watch a directory for changes and reload a process when a change is detected.\n",
      "summary": "Looking for inspiration? autoreload by stevekrenzel.",
      "date_published": "2020-04-16T03:57:23Z",
      "date_modified": "2020-04-16T03:57:23Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/madzak-python-json-logger/",
      "url": "https://go.waylonwalker.com/madzak-python-json-logger/",
      "title": "⭐ madzak python-json-logger",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/madzak\" 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\"\u003emadzak\u003c/a\u003e and their project \u003ca href=\"https://github.com/madzak/python-json-logger\" 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\"\u003epython-json-logger\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eJson Formatter for the standard python logger\u003c/p\u003e\n",
      "content_text": "\nCheck out [madzak](https://github.com/madzak) and their project [python-json-logger](https://github.com/madzak/python-json-logger).\n\nJson Formatter for the standard python logger\n",
      "summary": "Check out madzak and their project python-json-logger.",
      "date_published": "2020-04-15T13:13:49Z",
      "date_modified": "2020-04-15T13:13:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/justmarkham-scikit-learn-tips/",
      "url": "https://go.waylonwalker.com/justmarkham-scikit-learn-tips/",
      "title": "⭐ justmarkham scikit-learn-tips",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/justmarkham\" 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\"\u003ejustmarkham\u003c/a\u003e and their project \u003ca href=\"https://github.com/justmarkham/scikit-learn-tips\" 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\"\u003escikit-learn-tips\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🤖⚡ 50 scikit-learn tips\u003c/p\u003e\n",
      "content_text": "\nCheck out [justmarkham](https://github.com/justmarkham) and their project [scikit-learn-tips](https://github.com/justmarkham/scikit-learn-tips).\n\n:robot::zap: 50 scikit-learn tips\n",
      "summary": "Check out justmarkham and their project scikit-learn-tips.",
      "date_published": "2020-04-09T15:31:43Z",
      "date_modified": "2020-04-09T15:31:43Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/textualize-rich/",
      "url": "https://go.waylonwalker.com/textualize-rich/",
      "title": "⭐ Textualize rich",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Textualize\" 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\"\u003eTextualize\u003c/a\u003e and their project \u003ca href=\"https://github.com/Textualize/rich\" 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\"\u003erich\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRich is a Python library for rich text and beautiful formatting in the terminal.\u003c/p\u003e\n",
      "content_text": "\nCheck out [Textualize](https://github.com/Textualize) and their project [rich](https://github.com/Textualize/rich).\n\nRich is a Python library for rich text and beautiful formatting in the terminal.\n",
      "summary": "Check out Textualize and their project rich.",
      "date_published": "2020-04-08T20:02:01Z",
      "date_modified": "2020-04-08T20:02:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/python-cpython/",
      "url": "https://go.waylonwalker.com/python-cpython/",
      "title": "⭐ python cpython",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/python/cpython\" 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\"\u003ecpython\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/python\" 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\"\u003epython\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eThe Python programming language\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [cpython](https://github.com/python/cpython), an amazing project by [python](https://github.com/python). It's worth exploring!\n\nThe Python programming language\n",
      "summary": "I'm really excited about cpython, an amazing project by python. It's worth exploring!",
      "date_published": "2020-04-07T21:23:01Z",
      "date_modified": "2020-04-07T21:23:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/scullyio-scully/",
      "url": "https://go.waylonwalker.com/scullyio-scully/",
      "title": "⭐ scullyio scully",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/scullyio/scully\" 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\"\u003escully\u003c/a\u003e by \u003ca href=\"https://github.com/scullyio\" 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\"\u003escullyio\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eThe Static Site Generator for Angular apps\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [scully](https://github.com/scullyio/scully) by [scullyio](https://github.com/scullyio), and it's truly impressive.\n\nThe Static Site Generator for Angular apps\n",
      "summary": "I recently discovered scully by scullyio, and it's truly impressive.",
      "date_published": "2020-04-05T21:41:42Z",
      "date_modified": "2020-04-05T21:41:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lpellis-pydevto/",
      "url": "https://go.waylonwalker.com/lpellis-pydevto/",
      "title": "⭐ lpellis pydevto",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/lpellis/pydevto\" 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\"\u003epydevto\u003c/a\u003e from \u003ca href=\"https://github.com/lpellis\" 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\"\u003elpellis\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eUnofficial dev.to api\u003c/p\u003e\n",
      "content_text": "\nI came across [pydevto](https://github.com/lpellis/pydevto) from [lpellis](https://github.com/lpellis), and it's packed with great features and ideas.\n\nUnofficial dev.to api\n",
      "summary": "I came across pydevto from lpellis, and it's packed with great features and ideas.",
      "date_published": "2020-04-05T01:34:04Z",
      "date_modified": "2020-04-05T01:34:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/brickfrog-kedro-pandas-profiling/",
      "url": "https://go.waylonwalker.com/brickfrog-kedro-pandas-profiling/",
      "title": "⭐ brickfrog kedro-pandas-profiling",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/brickfrog/kedro-pandas-profiling\" 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\"\u003ekedro-pandas-profiling\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/brickfrog\" 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\"\u003ebrickfrog\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA simple wrapper to use Pandas Profiling easily in Kedro\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [kedro-pandas-profiling](https://github.com/brickfrog/kedro-pandas-profiling), an amazing project by [brickfrog](https://github.com/brickfrog). It's worth exploring!\n\nA simple wrapper to use Pandas Profiling easily in Kedro\n",
      "summary": "I'm really excited about kedro-pandas-profiling, an amazing project by brickfrog. It's worth exploring!",
      "date_published": "2020-04-04T03:19:21Z",
      "date_modified": "2020-04-04T03:19:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gregives-gregives-co-uk/",
      "url": "https://go.waylonwalker.com/gregives-gregives-co-uk/",
      "title": "⭐ gregives gregives.co.uk",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/gregives/gregives.co.uk\" 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\"\u003egregives.co.uk\u003c/a\u003e by \u003ca href=\"https://github.com/gregives\" 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\"\u003egregives\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePersonal site and portfolio of software engineer Greg Ives\u003c/p\u003e\n",
      "content_text": "\nThe work on [gregives.co.uk](https://github.com/gregives/gregives.co.uk) by [gregives](https://github.com/gregives).\n\nPersonal site and portfolio of software engineer Greg Ives\n",
      "summary": "The work on gregives.co.uk by gregives.",
      "date_published": "2020-04-03T00:59:59Z",
      "date_modified": "2020-04-03T00:59:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nektos-act/",
      "url": "https://go.waylonwalker.com/nektos-act/",
      "title": "⭐ nektos act",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/nektos/act\" 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\"\u003eact\u003c/a\u003e from \u003ca href=\"https://github.com/nektos\" 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\"\u003enektos\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRun your GitHub Actions locally 🚀\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [act](https://github.com/nektos/act) from [nektos](https://github.com/nektos).\n\nRun your GitHub Actions locally 🚀\n",
      "summary": "I'm impressed by act from nektos.",
      "date_published": "2020-04-01T12:27:41Z",
      "date_modified": "2020-04-01T12:27:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jackmckew-awesome-python-bytes/",
      "url": "https://go.waylonwalker.com/jackmckew-awesome-python-bytes/",
      "title": "⭐ JackMcKew awesome-python-bytes",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/JackMcKew/awesome-python-bytes\" 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\"\u003eawesome-python-bytes\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/JackMcKew\" 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\"\u003eJackMcKew\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003e😎 🐍 Awesome lists about Python Bytes \u003ca href=\"https://pythonbytes.fm/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/pythonbytes.fm.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/pythonbytes.fm.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://pythonbytes.fm/\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [awesome-python-bytes](https://github.com/JackMcKew/awesome-python-bytes), an amazing project by [JackMcKew](https://github.com/JackMcKew). It's worth exploring!\n\n😎 🐍 Awesome lists about Python Bytes https://pythonbytes.fm/\n",
      "summary": "I'm really excited about awesome-python-bytes, an amazing project by JackMcKew. It's worth exploring!",
      "date_published": "2020-03-29T19:55:11Z",
      "date_modified": "2020-03-29T19:55:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/technote-space-get-diff-action/",
      "url": "https://go.waylonwalker.com/technote-space-get-diff-action/",
      "title": "⭐ technote-space get-diff-action",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/technote-space/get-diff-action\" 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\"\u003eget-diff-action\u003c/a\u003e by \u003ca href=\"https://github.com/technote-space\" 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\"\u003etechnote-space\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eGitHub Actions to get \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e diff\u003c/p\u003e\n",
      "content_text": "\nCheck out [get-diff-action](https://github.com/technote-space/get-diff-action) by [technote-space](https://github.com/technote-space). It's a well-crafted project with great potential.\n\nGitHub Actions to get git diff\n",
      "summary": "Check out get-diff-action by technote-space. It's a well-crafted project with great potential.",
      "date_published": "2020-03-22T20:42:47Z",
      "date_modified": "2020-03-22T20:42:47Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fkhadra-react-toastify/",
      "url": "https://go.waylonwalker.com/fkhadra-react-toastify/",
      "title": "⭐ fkhadra react-toastify",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/fkhadra/react-toastify\" 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\"\u003ereact-toastify\u003c/a\u003e, created by \u003ca href=\"https://github.com/fkhadra\" 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\"\u003efkhadra\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eReact notification made easy 🚀 !\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [react-toastify](https://github.com/fkhadra/react-toastify), created by [fkhadra](https://github.com/fkhadra).\n\nReact notification made easy 🚀 !\n",
      "summary": "If you're into interesting projects, don't miss out on react-toastify, created by fkhadra.",
      "date_published": "2020-03-18T19:37:01Z",
      "date_modified": "2020-03-18T19:37:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wobsoriano-poke95/",
      "url": "https://go.waylonwalker.com/wobsoriano-poke95/",
      "title": "⭐ wobsoriano poke95",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/wobsoriano/poke95\" 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\"\u003epoke95\u003c/a\u003e by \u003ca href=\"https://github.com/wobsoriano\" 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\"\u003ewobsoriano\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003e🚀 A Windows 95 style Pokédex built with React.\u003c/p\u003e\n",
      "content_text": "\nCheck out [poke95](https://github.com/wobsoriano/poke95) by [wobsoriano](https://github.com/wobsoriano). It's a well-crafted project with great potential.\n\n🚀 A Windows 95 style Pokédex built with React.\n",
      "summary": "Check out poke95 by wobsoriano. It's a well-crafted project with great potential.",
      "date_published": "2020-03-14T16:47:27Z",
      "date_modified": "2020-03-14T16:47:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sharadcodes-img-resizer/",
      "url": "https://go.waylonwalker.com/sharadcodes-img-resizer/",
      "title": "⭐ sharadcodes img-resizer",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/sharadcodes/img-resizer\" 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\"\u003eimg-resizer\u003c/a\u003e by \u003ca href=\"https://github.com/sharadcodes\" 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\"\u003esharadcodes\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn action for resizing images\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [img-resizer](https://github.com/sharadcodes/img-resizer) by [sharadcodes](https://github.com/sharadcodes).\n\nAn action for resizing images\n",
      "summary": "Looking for inspiration? img-resizer by sharadcodes.",
      "date_published": "2020-03-07T21:50:18Z",
      "date_modified": "2020-03-07T21:50:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/scottbrenner-generate-changelog-action/",
      "url": "https://go.waylonwalker.com/scottbrenner-generate-changelog-action/",
      "title": "⭐ ScottBrenner generate-changelog-action",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ScottBrenner/generate-changelog-action\" 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\"\u003egenerate-changelog-action\u003c/a\u003e by \u003ca href=\"https://github.com/ScottBrenner\" 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\"\u003eScottBrenner\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eGitHub Actions Hackathon 2020 winner -  lob/generate-changelog Action\u003c/p\u003e\n",
      "content_text": "\nCheck out [generate-changelog-action](https://github.com/ScottBrenner/generate-changelog-action) by [ScottBrenner](https://github.com/ScottBrenner). It's a well-crafted project with great potential.\n\nGitHub Actions Hackathon 2020 winner -  lob/generate-changelog Action\n",
      "summary": "Check out generate-changelog-action by ScottBrenner. It's a well-crafted project with great potential.",
      "date_published": "2020-03-06T12:28:49Z",
      "date_modified": "2020-03-06T12:28:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/desktopecho-xwsl/",
      "url": "https://go.waylonwalker.com/desktopecho-xwsl/",
      "title": "⭐ DesktopECHO xWSL",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/DesktopECHO\" 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\"\u003eDesktopECHO\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/DesktopECHO/xWSL\" 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\"\u003exWSL\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eInstaller script for Ubuntu 22.04 / 24.04 with XFCE 4.18 on WSL.  Does not require hypervisor, container, or X11 server.\u003c/p\u003e\n",
      "content_text": "\n[DesktopECHO](https://github.com/DesktopECHO) has done a fantastic job with [xWSL](https://github.com/DesktopECHO/xWSL). Highly recommend taking a look.\n\nInstaller script for Ubuntu 22.04 / 24.04 with XFCE 4.18 on WSL.  Does not require hypervisor, container, or X11 server.\n",
      "summary": "DesktopECHO has done a fantastic job with xWSL. Highly recommend taking a look.",
      "date_published": "2020-03-01T23:51:16Z",
      "date_modified": "2020-03-01T23:51:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastai-fastpages/",
      "url": "https://go.waylonwalker.com/fastai-fastpages/",
      "title": "⭐ fastai fastpages",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/fastai/fastpages\" 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\"\u003efastpages\u003c/a\u003e by \u003ca href=\"https://github.com/fastai\" 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\"\u003efastai\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAn easy to use blogging platform, with enhanced support for Jupyter Notebooks.\u003c/p\u003e\n",
      "content_text": "\nThe work on [fastpages](https://github.com/fastai/fastpages) by [fastai](https://github.com/fastai).\n\nAn easy to use blogging platform, with enhanced support for Jupyter Notebooks.\n",
      "summary": "The work on fastpages by fastai.",
      "date_published": "2020-02-26T05:06:16Z",
      "date_modified": "2020-02-26T05:06:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ines-termynal/",
      "url": "https://go.waylonwalker.com/ines-termynal/",
      "title": "⭐ ines termynal",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/ines/termynal\" 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\"\u003etermynal\u003c/a\u003e by \u003ca href=\"https://github.com/ines\" 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\"\u003eines\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e⬛️ Lightweight and modern terminal animations using async/await\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [termynal](https://github.com/ines/termynal) by [ines](https://github.com/ines).\n\n⬛️ Lightweight and modern terminal animations using async/await\n",
      "summary": "Looking for inspiration? termynal by ines.",
      "date_published": "2020-02-24T02:44:53Z",
      "date_modified": "2020-02-24T02:44:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/forem-forem/",
      "url": "https://go.waylonwalker.com/forem-forem/",
      "title": "⭐ forem forem",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/forem/forem\" 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\"\u003eforem\u003c/a\u003e by \u003ca href=\"https://github.com/forem\" 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\"\u003eforem\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFor empowering community 🌱\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [forem](https://github.com/forem/forem) by [forem](https://github.com/forem).\n\nFor empowering community 🌱\n",
      "summary": "Looking for inspiration? forem by forem.",
      "date_published": "2020-02-22T03:04:11Z",
      "date_modified": "2020-02-22T03:04:11Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fastapi-typer/",
      "url": "https://go.waylonwalker.com/fastapi-typer/",
      "title": "⭐ fastapi typer",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/fastapi/typer\" 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\"\u003etyper\u003c/a\u003e by \u003ca href=\"https://github.com/fastapi\" 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\"\u003efastapi\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eTyper, build great CLIs. Easy to code. Based on Python type hints.\u003c/p\u003e\n",
      "content_text": "\nJust starred [typer](https://github.com/fastapi/typer) by [fastapi](https://github.com/fastapi). It's an exciting project with a lot to offer.\n\nTyper, build great CLIs. Easy to code. Based on Python type hints.\n",
      "summary": "Just starred typer by fastapi. It's an exciting project with a lot to offer.",
      "date_published": "2020-02-22T02:33:06Z",
      "date_modified": "2020-02-22T02:33:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/localstack-localstack/",
      "url": "https://go.waylonwalker.com/localstack-localstack/",
      "title": "⭐ localstack localstack",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/localstack/localstack\" 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\"\u003elocalstack\u003c/a\u003e by \u003ca href=\"https://github.com/localstack\" 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\"\u003elocalstack\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003e💻 A fully functional local AWS cloud stack. Develop and test your cloud \u0026amp; Serverless apps offline\u003c/p\u003e\n",
      "content_text": "\n[localstack](https://github.com/localstack/localstack) by [localstack](https://github.com/localstack) is a game-changer in its space. Excited to see how it evolves.\n\n💻 A fully functional local AWS cloud stack. Develop and test your cloud \u0026 Serverless apps offline\n",
      "summary": "localstack by localstack is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2020-02-19T22:18:45Z",
      "date_modified": "2020-02-19T22:18:45Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/canop-broot/",
      "url": "https://go.waylonwalker.com/canop-broot/",
      "title": "⭐ Canop broot",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/Canop\" 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\"\u003eCanop\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/Canop/broot\" 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\"\u003ebroot\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA new way to see and navigate directory trees : \u003ca href=\"https://dystroy.org/broot\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/dystroy.org.png\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/dystroy.org.png\" class=\"has-avatar  has-avatar-before\"\u003ehttps://dystroy.org/broot\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\n[Canop](https://github.com/Canop) has done a fantastic job with [broot](https://github.com/Canop/broot). Highly recommend taking a look.\n\nA new way to see and navigate directory trees : https://dystroy.org/broot\n",
      "summary": "Canop has done a fantastic job with broot. Highly recommend taking a look.",
      "date_published": "2020-02-19T04:50:22Z",
      "date_modified": "2020-02-19T04:50:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/calebporzio-gitdown/",
      "url": "https://go.waylonwalker.com/calebporzio-gitdown/",
      "title": "⭐ calebporzio gitdown",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/calebporzio/gitdown\" 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\"\u003egitdown\u003c/a\u003e from \u003ca href=\"https://github.com/calebporzio\" 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\"\u003ecalebporzio\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA simple package to parse Github Flavored Markdown in PHP\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [gitdown](https://github.com/calebporzio/gitdown) from [calebporzio](https://github.com/calebporzio).\n\nA simple package to parse Github Flavored Markdown in PHP\n",
      "summary": "I'm impressed by gitdown from calebporzio.",
      "date_published": "2020-02-18T02:43:59Z",
      "date_modified": "2020-02-18T02:43:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/benawad-destiny/",
      "url": "https://go.waylonwalker.com/benawad-destiny/",
      "title": "⭐ benawad destiny",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/benawad\" 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\"\u003ebenawad’s\u003c/a\u003e project \u003ca href=\"https://github.com/benawad/destiny\" 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\"\u003edestiny\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePrettier for File Structures\u003c/p\u003e\n",
      "content_text": "\nI like [benawad's](https://github.com/benawad) project [destiny](https://github.com/benawad/destiny).\n\nPrettier for File Structures\n",
      "summary": "I like benawad's project destiny.",
      "date_published": "2020-02-17T23:32:00Z",
      "date_modified": "2020-02-17T23:32:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-org-kedro-community/",
      "url": "https://go.waylonwalker.com/kedro-org-kedro-community/",
      "title": "⭐ kedro-org kedro-community",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/kedro-org\" 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\"\u003ekedro-org\u003c/a\u003e and their project \u003ca href=\"https://github.com/kedro-org/kedro-community\" 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\"\u003ekedro-community\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eExamples of data science projects created with Kedro.\u003c/p\u003e\n",
      "content_text": "\nCheck out [kedro-org](https://github.com/kedro-org) and their project [kedro-community](https://github.com/kedro-org/kedro-community).\n\nExamples of data science projects created with Kedro.\n",
      "summary": "Check out kedro-org and their project kedro-community.",
      "date_published": "2020-02-07T18:48:59Z",
      "date_modified": "2020-02-07T18:48:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-org-kedro-viz/",
      "url": "https://go.waylonwalker.com/kedro-org-kedro-viz/",
      "title": "⭐ kedro-org kedro-viz",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/kedro-org/kedro-viz\" 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\"\u003ekedro-viz\u003c/a\u003e from \u003ca href=\"https://github.com/kedro-org\" 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\"\u003ekedro-org\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eVisualise your Kedro data and machine-learning pipelines and track your experiments.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [kedro-viz](https://github.com/kedro-org/kedro-viz) from [kedro-org](https://github.com/kedro-org).\n\nVisualise your Kedro data and machine-learning pipelines and track your experiments.\n",
      "summary": "I'm impressed by kedro-viz from kedro-org.",
      "date_published": "2020-02-07T18:48:32Z",
      "date_modified": "2020-02-07T18:48:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/szsdk-quick/",
      "url": "https://go.waylonwalker.com/szsdk-quick/",
      "title": "⭐ szsdk quick",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/szsdk\" 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\"\u003eszsdk\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/szsdk/quick\" 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\"\u003equick\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA real QUICK Qt5 based gUI generator for ClicK\u003c/p\u003e\n",
      "content_text": "\n[szsdk](https://github.com/szsdk) has done a fantastic job with [quick](https://github.com/szsdk/quick). Highly recommend taking a look.\n\nA real QUICK Qt5 based gUI generator for ClicK\n",
      "summary": "szsdk has done a fantastic job with quick. Highly recommend taking a look.",
      "date_published": "2020-01-28T16:50:39Z",
      "date_modified": "2020-01-28T16:50:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wfxr-forgit/",
      "url": "https://go.waylonwalker.com/wfxr-forgit/",
      "title": "⭐ wfxr forgit",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/wfxr/forgit\" 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\"\u003eforgit\u003c/a\u003e, created by \u003ca href=\"https://github.com/wfxr\" 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\"\u003ewfxr\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e💤 A utility tool powered by fzf for using \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e interactively.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [forgit](https://github.com/wfxr/forgit), created by [wfxr](https://github.com/wfxr).\n\n:zzz: A utility tool powered by fzf for using git interactively.\n",
      "summary": "If you're into interesting projects, don't miss out on forgit, created by wfxr.",
      "date_published": "2020-01-22T13:23:07Z",
      "date_modified": "2020-01-22T13:23:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/grantjenks-python-c2f/",
      "url": "https://go.waylonwalker.com/grantjenks-python-c2f/",
      "title": "⭐ grantjenks python-c2f",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/grantjenks/python-c2f\" 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\"\u003epython-c2f\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/grantjenks\" 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\"\u003egrantjenks\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eCython for All with GitHub Actions\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [python-c2f](https://github.com/grantjenks/python-c2f), an amazing project by [grantjenks](https://github.com/grantjenks). It's worth exploring!\n\nCython for All with GitHub Actions\n",
      "summary": "I'm really excited about python-c2f, an amazing project by grantjenks. It's worth exploring!",
      "date_published": "2020-01-19T13:15:53Z",
      "date_modified": "2020-01-19T13:15:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wesbos-beginner-javascript/",
      "url": "https://go.waylonwalker.com/wesbos-beginner-javascript/",
      "title": "⭐ wesbos beginner-javascript",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/wesbos\" 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\"\u003ewesbos\u003c/a\u003e and their project \u003ca href=\"https://github.com/wesbos/beginner-javascript\" 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\"\u003ebeginner-javascript\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSlam Dunk JavaScript\u003c/p\u003e\n",
      "content_text": "\nCheck out [wesbos](https://github.com/wesbos) and their project [beginner-javascript](https://github.com/wesbos/beginner-javascript).\n\nSlam Dunk JavaScript\n",
      "summary": "Check out wesbos and their project beginner-javascript.",
      "date_published": "2020-01-13T19:54:42Z",
      "date_modified": "2020-01-13T19:54:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/brillout-awesome-react-components/",
      "url": "https://go.waylonwalker.com/brillout-awesome-react-components/",
      "title": "⭐ brillout awesome-react-components",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/brillout/awesome-react-components\" 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\"\u003eawesome-react-components\u003c/a\u003e, created by \u003ca href=\"https://github.com/brillout\" 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\"\u003ebrillout\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCurated List of React Components \u0026amp; Libraries.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [awesome-react-components](https://github.com/brillout/awesome-react-components), created by [brillout](https://github.com/brillout).\n\nCurated List of React Components \u0026 Libraries.\n",
      "summary": "If you're into interesting projects, don't miss out on awesome-react-components, created by brillout.",
      "date_published": "2020-01-12T14:49:08Z",
      "date_modified": "2020-01-12T14:49:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/carykh-jumpcutter/",
      "url": "https://go.waylonwalker.com/carykh-jumpcutter/",
      "title": "⭐ carykh jumpcutter",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/carykh/jumpcutter\" 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\"\u003ejumpcutter\u003c/a\u003e from \u003ca href=\"https://github.com/carykh\" 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\"\u003ecarykh\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eAutomatically edits vidx. Explanation here: \u003ca href=\"https://www.youtube.com/watch?v=DQ8orIurGxw\" 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\"\u003ehttps://www.youtube.com/watch?v=DQ8orIurGxw\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI came across [jumpcutter](https://github.com/carykh/jumpcutter) from [carykh](https://github.com/carykh), and it's packed with great features and ideas.\n\nAutomatically edits vidx. Explanation here: https://www.youtube.com/watch?v=DQ8orIurGxw\n",
      "summary": "I came across jumpcutter from carykh, and it's packed with great features and ideas.",
      "date_published": "2019-12-04T04:26:25Z",
      "date_modified": "2019-12-04T04:26:25Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/great-expectations-great_expectations/",
      "url": "https://go.waylonwalker.com/great-expectations-great_expectations/",
      "title": "⭐ great-expectations great_expectations",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/great-expectations\" 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\"\u003egreat-expectations\u003c/a\u003e and their project \u003ca href=\"https://github.com/great-expectations/great_expectations\" 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\"\u003egreat_expectations\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAlways know what to expect from your data.\u003c/p\u003e\n",
      "content_text": "\nCheck out [great-expectations](https://github.com/great-expectations) and their project [great_expectations](https://github.com/great-expectations/great_expectations).\n\nAlways know what to expect from your data.\n",
      "summary": "Check out great-expectations and their project great_expectations.",
      "date_published": "2019-12-02T21:20:06Z",
      "date_modified": "2019-12-02T21:20:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/alyssaxuu-flowy/",
      "url": "https://go.waylonwalker.com/alyssaxuu-flowy/",
      "title": "⭐ alyssaxuu flowy",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/alyssaxuu/flowy\" 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\"\u003eflowy\u003c/a\u003e from \u003ca href=\"https://github.com/alyssaxuu\" 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\"\u003ealyssaxuu\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe minimal javascript library to create flowcharts ✨\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [flowy](https://github.com/alyssaxuu/flowy) from [alyssaxuu](https://github.com/alyssaxuu).\n\nThe minimal javascript library to create flowcharts ✨\n",
      "summary": "I'm impressed by flowy from alyssaxuu.",
      "date_published": "2019-11-28T04:54:32Z",
      "date_modified": "2019-11-28T04:54:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/blocks-blocks/",
      "url": "https://go.waylonwalker.com/blocks-blocks/",
      "title": "⭐ blocks blocks",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/blocks/blocks\" 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\"\u003eblocks\u003c/a\u003e from \u003ca href=\"https://github.com/blocks\" 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\"\u003eblocks\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA JSX-based page builder for creating beautiful websites without writing code\u003c/p\u003e\n",
      "content_text": "\nI came across [blocks](https://github.com/blocks/blocks) from [blocks](https://github.com/blocks), and it's packed with great features and ideas.\n\nA JSX-based page builder for creating beautiful websites without writing code\n",
      "summary": "I came across blocks from blocks, and it's packed with great features and ideas.",
      "date_published": "2019-11-27T04:26:06Z",
      "date_modified": "2019-11-27T04:26:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asmeurer-removestar/",
      "url": "https://go.waylonwalker.com/asmeurer-removestar/",
      "title": "⭐ asmeurer removestar",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/asmeurer\" 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\"\u003easmeurer’s\u003c/a\u003e project \u003ca href=\"https://github.com/asmeurer/removestar\" 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\"\u003eremovestar\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTool to automatically replace ‘import *’ in Python files with explicit imports\u003c/p\u003e\n",
      "content_text": "\nI like [asmeurer's](https://github.com/asmeurer) project [removestar](https://github.com/asmeurer/removestar).\n\nTool to automatically replace 'import *' in Python files with explicit imports\n",
      "summary": "I like asmeurer's project removestar.",
      "date_published": "2019-11-21T15:01:49Z",
      "date_modified": "2019-11-21T15:01:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lolcommits-lolcommits/",
      "url": "https://go.waylonwalker.com/lolcommits-lolcommits/",
      "title": "⭐ lolcommits lolcommits",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/lolcommits\" 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\"\u003elolcommits\u003c/a\u003e and their project \u003ca href=\"https://github.com/lolcommits/lolcommits\" 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\"\u003elolcommits\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e📷 \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e-based selfies for software developers\u003c/p\u003e\n",
      "content_text": "\nCheck out [lolcommits](https://github.com/lolcommits) and their project [lolcommits](https://github.com/lolcommits/lolcommits).\n\n:camera: git-based selfies for software developers\n",
      "summary": "Check out lolcommits and their project lolcommits.",
      "date_published": "2019-11-17T19:51:49Z",
      "date_modified": "2019-11-17T19:51:49Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jacobdeichert-mask/",
      "url": "https://go.waylonwalker.com/jacobdeichert-mask/",
      "title": "⭐ jacobdeichert mask",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/jacobdeichert/mask\" 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\"\u003emask\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/jacobdeichert\" 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\"\u003ejacobdeichert\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003e🎭 A CLI task runner defined by a simple markdown file\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [mask](https://github.com/jacobdeichert/mask), an amazing project by [jacobdeichert](https://github.com/jacobdeichert). It's worth exploring!\n\n🎭 A CLI task runner defined by a simple markdown file\n",
      "summary": "I'm really excited about mask, an amazing project by jacobdeichert. It's worth exploring!",
      "date_published": "2019-11-14T12:20:58Z",
      "date_modified": "2019-11-14T12:20:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pyjanitor-devs-pandas_flavor/",
      "url": "https://go.waylonwalker.com/pyjanitor-devs-pandas_flavor/",
      "title": "⭐ pyjanitor-devs pandas_flavor",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/pyjanitor-devs\" 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\"\u003epyjanitor-devs\u003c/a\u003e and their project \u003ca href=\"https://github.com/pyjanitor-devs/pandas_flavor\" 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\"\u003epandas_flavor\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe easy way to write your own flavor of Pandas\u003c/p\u003e\n",
      "content_text": "\nCheck out [pyjanitor-devs](https://github.com/pyjanitor-devs) and their project [pandas_flavor](https://github.com/pyjanitor-devs/pandas_flavor).\n\nThe easy way to write your own flavor of Pandas\n",
      "summary": "Check out pyjanitor-devs and their project pandas_flavor.",
      "date_published": "2019-11-13T02:44:04Z",
      "date_modified": "2019-11-13T02:44:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tj-go-termd/",
      "url": "https://go.waylonwalker.com/tj-go-termd/",
      "title": "⭐ tj go-termd",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/tj\" 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\"\u003etj’s\u003c/a\u003e project \u003ca href=\"https://github.com/tj/go-termd\" 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\"\u003ego-termd\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePackage termd provides terminal markdown rendering, with code block syntax highlighting support.\u003c/p\u003e\n",
      "content_text": "\nI like [tj's](https://github.com/tj) project [go-termd](https://github.com/tj/go-termd).\n\nPackage termd provides terminal markdown rendering, with code block syntax highlighting support.\n",
      "summary": "I like tj's project go-termd.",
      "date_published": "2019-11-12T13:05:00Z",
      "date_modified": "2019-11-12T13:05:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pomber-git-history/",
      "url": "https://go.waylonwalker.com/pomber-git-history/",
      "title": "⭐ pomber git-history",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/pomber/git-history\" 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\"\u003egit-history\u003c/a\u003e by \u003ca href=\"https://github.com/pomber\" 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\"\u003epomber\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eQuickly browse the history of a file from any \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repository\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [git-history](https://github.com/pomber/git-history) by [pomber](https://github.com/pomber), and it's truly impressive.\n\nQuickly browse the history of a file from any git repository\n",
      "summary": "I recently discovered git-history by pomber, and it's truly impressive.",
      "date_published": "2019-11-10T03:20:42Z",
      "date_modified": "2019-11-10T03:20:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/csurfer-pypette/",
      "url": "https://go.waylonwalker.com/csurfer-pypette/",
      "title": "⭐ csurfer pypette",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/csurfer\" 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\"\u003ecsurfer\u003c/a\u003e and their project \u003ca href=\"https://github.com/csurfer/pypette\" 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\"\u003epypette\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRidiculously simple flow controller for building complex pipelines\u003c/p\u003e\n",
      "content_text": "\nCheck out [csurfer](https://github.com/csurfer) and their project [pypette](https://github.com/csurfer/pypette).\n\nRidiculously simple flow controller for building complex pipelines\n",
      "summary": "Check out csurfer and their project pypette.",
      "date_published": "2019-11-07T17:12:56Z",
      "date_modified": "2019-11-07T17:12:56Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/psf-requests/",
      "url": "https://go.waylonwalker.com/psf-requests/",
      "title": "⭐ psf requests",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/psf/requests\" 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\"\u003erequests\u003c/a\u003e by \u003ca href=\"https://github.com/psf\" 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\"\u003epsf\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA simple, yet elegant, HTTP library.\u003c/p\u003e\n",
      "content_text": "\nCheck out [requests](https://github.com/psf/requests) by [psf](https://github.com/psf). It's a well-crafted project with great potential.\n\nA simple, yet elegant, HTTP library.\n",
      "summary": "Check out requests by psf. It's a well-crafted project with great potential.",
      "date_published": "2019-10-29T16:37:59Z",
      "date_modified": "2019-10-29T16:37:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nitayneeman-vscode-git-semantic-commit/",
      "url": "https://go.waylonwalker.com/nitayneeman-vscode-git-semantic-commit/",
      "title": "⭐ nitayneeman vscode-git-semantic-commit",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/nitayneeman/vscode-git-semantic-commit\" 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\"\u003evscode-git-semantic-commit\u003c/a\u003e by \u003ca href=\"https://github.com/nitayneeman\" 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\"\u003enitayneeman\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003e💬 A Visual Studio Code extension which enables to commit simply by the semantic message conventions\u003c/p\u003e\n",
      "content_text": "\nCheck out [vscode-git-semantic-commit](https://github.com/nitayneeman/vscode-git-semantic-commit) by [nitayneeman](https://github.com/nitayneeman). It's a well-crafted project with great potential.\n\n💬 A Visual Studio Code extension which enables to commit simply by the semantic message conventions\n",
      "summary": "Check out vscode-git-semantic-commit by nitayneeman. It's a well-crafted project with great potential.",
      "date_published": "2019-10-28T00:59:44Z",
      "date_modified": "2019-10-28T00:59:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/marcskovmadsen-awesome-streamlit/",
      "url": "https://go.waylonwalker.com/marcskovmadsen-awesome-streamlit/",
      "title": "⭐ MarcSkovMadsen awesome-streamlit",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/MarcSkovMadsen/awesome-streamlit\" 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\"\u003eawesome-streamlit\u003c/a\u003e by \u003ca href=\"https://github.com/MarcSkovMadsen\" 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\"\u003eMarcSkovMadsen\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eThe purpose of this project is to share knowledge on how awesome Streamlit is and can be\u003c/p\u003e\n",
      "content_text": "\n[awesome-streamlit](https://github.com/MarcSkovMadsen/awesome-streamlit) by [MarcSkovMadsen](https://github.com/MarcSkovMadsen) is a game-changer in its space. Excited to see how it evolves.\n\nThe purpose of this project is to share knowledge on how awesome Streamlit is and can be\n",
      "summary": "awesome-streamlit by MarcSkovMadsen is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2019-10-19T04:05:32Z",
      "date_modified": "2019-10-19T04:05:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bencoder-js13k-2019/",
      "url": "https://go.waylonwalker.com/bencoder-js13k-2019/",
      "title": "⭐ bencoder js13k-2019",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/bencoder/js13k-2019\" 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\"\u003ejs13k-2019\u003c/a\u003e from \u003ca href=\"https://github.com/bencoder\" 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\"\u003ebencoder\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003exx142-b2.exe. An entry for js13kgames 2019\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [js13k-2019](https://github.com/bencoder/js13k-2019) from [bencoder](https://github.com/bencoder).\n\nxx142-b2.exe. An entry for js13kgames 2019\n",
      "summary": "I'm impressed by js13k-2019 from bencoder.",
      "date_published": "2019-10-18T23:21:34Z",
      "date_modified": "2019-10-18T23:21:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gablaroche-death-to-ie11/",
      "url": "https://go.waylonwalker.com/gablaroche-death-to-ie11/",
      "title": "⭐ gabLaroche death-to-ie11",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/gabLaroche/death-to-ie11\" 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\"\u003edeath-to-ie11\u003c/a\u003e by \u003ca href=\"https://github.com/gabLaroche\" 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\"\u003egabLaroche\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eCountdown for IE11 end of support\u003c/p\u003e\n",
      "content_text": "\nJust starred [death-to-ie11](https://github.com/gabLaroche/death-to-ie11) by [gabLaroche](https://github.com/gabLaroche). It's an exciting project with a lot to offer.\n\nCountdown for IE11 end of support\n",
      "summary": "Just starred death-to-ie11 by gabLaroche. It's an exciting project with a lot to offer.",
      "date_published": "2019-10-15T14:01:10Z",
      "date_modified": "2019-10-15T14:01:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/igorbarinov-awesome-data-engineering/",
      "url": "https://go.waylonwalker.com/igorbarinov-awesome-data-engineering/",
      "title": "⭐ igorbarinov awesome-data-engineering",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/igorbarinov/awesome-data-engineering\" 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\"\u003eawesome-data-engineering\u003c/a\u003e from \u003ca href=\"https://github.com/igorbarinov\" 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\"\u003eigorbarinov\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eA curated list of data engineering tools for software developers\u003c/p\u003e\n",
      "content_text": "\nI came across [awesome-data-engineering](https://github.com/igorbarinov/awesome-data-engineering) from [igorbarinov](https://github.com/igorbarinov), and it's packed with great features and ideas.\n\nA curated list of data engineering tools for software developers\n",
      "summary": "I came across awesome-data-engineering from igorbarinov, and it's packed with great features and ideas.",
      "date_published": "2019-10-06T02:07:42Z",
      "date_modified": "2019-10-06T02:07:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/microsoft-vscode-python/",
      "url": "https://go.waylonwalker.com/microsoft-vscode-python/",
      "title": "⭐ microsoft vscode-python",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/microsoft/vscode-python\" 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\"\u003evscode-python\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/microsoft\" 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\"\u003emicrosoft\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003ePython extension for Visual Studio Code\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [vscode-python](https://github.com/microsoft/vscode-python), an amazing project by [microsoft](https://github.com/microsoft). It's worth exploring!\n\nPython extension for Visual Studio Code\n",
      "summary": "I'm really excited about vscode-python, an amazing project by microsoft. It's worth exploring!",
      "date_published": "2019-10-03T00:16:48Z",
      "date_modified": "2019-10-03T00:16:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kashu7100-recreation-of-nature/",
      "url": "https://go.waylonwalker.com/kashu7100-recreation-of-nature/",
      "title": "⭐ Kashu7100 Recreation-of-Nature",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/Kashu7100/Recreation-of-Nature\" 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\"\u003eRecreation-of-Nature\u003c/a\u003e, created by \u003ca href=\"https://github.com/Kashu7100\" 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\"\u003eKashu7100\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eALife simulation with Python: patterns, behavior, and cognition.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [Recreation-of-Nature](https://github.com/Kashu7100/Recreation-of-Nature), created by [Kashu7100](https://github.com/Kashu7100).\n\nALife simulation with Python: patterns, behavior, and cognition.\n",
      "summary": "If you're into interesting projects, don't miss out on Recreation-of-Nature, created by Kashu7100.",
      "date_published": "2019-09-18T16:52:32Z",
      "date_modified": "2019-09-18T16:52:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kennethreitz-bake/",
      "url": "https://go.waylonwalker.com/kennethreitz-bake/",
      "title": "⭐ kennethreitz bake",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/kennethreitz/bake\" 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\"\u003ebake\u003c/a\u003e from \u003ca href=\"https://github.com/kennethreitz\" 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\"\u003ekennethreitz\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBake — the strangely familiar workflow utility.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [bake](https://github.com/kennethreitz/bake) from [kennethreitz](https://github.com/kennethreitz).\n\nBake — the strangely familiar workflow utility.\n",
      "summary": "I'm impressed by bake from kennethreitz.",
      "date_published": "2019-09-15T01:11:44Z",
      "date_modified": "2019-09-15T01:11:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/microsoft-terminal/",
      "url": "https://go.waylonwalker.com/microsoft-terminal/",
      "title": "⭐ microsoft terminal",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/microsoft/terminal\" 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\"\u003eterminal\u003c/a\u003e by \u003ca href=\"https://github.com/microsoft\" 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\"\u003emicrosoft\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eThe new Windows Terminal and the original Windows console host, all in the same place!\u003c/p\u003e\n",
      "content_text": "\nCheck out [terminal](https://github.com/microsoft/terminal) by [microsoft](https://github.com/microsoft). It's a well-crafted project with great potential.\n\nThe new Windows Terminal and the original Windows console host, all in the same place!\n",
      "summary": "Check out terminal by microsoft. It's a well-crafted project with great potential.",
      "date_published": "2019-09-13T13:11:35Z",
      "date_modified": "2019-09-13T13:11:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/starship-starship/",
      "url": "https://go.waylonwalker.com/starship-starship/",
      "title": "⭐ starship starship",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/starship/starship\" 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\"\u003estarship\u003c/a\u003e, created by \u003ca href=\"https://github.com/starship\" 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\"\u003estarship\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e☄🌌️  The minimal, blazing-fast, and infinitely customizable prompt for any shell!\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [starship](https://github.com/starship/starship), created by [starship](https://github.com/starship).\n\n☄🌌️  The minimal, blazing-fast, and infinitely customizable prompt for any shell!\n",
      "summary": "If you're into interesting projects, don't miss out on starship, created by starship.",
      "date_published": "2019-09-08T21:23:03Z",
      "date_modified": "2019-09-08T21:23:03Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/alttch-rapidtables/",
      "url": "https://go.waylonwalker.com/alttch-rapidtables/",
      "title": "⭐ alttch rapidtables",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/alttch\" 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\"\u003ealttch\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/alttch/rapidtables\" 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\"\u003erapidtables\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eSuper fast list of dicts to pre-formatted tables conversion library for Python 2/3\u003c/p\u003e\n",
      "content_text": "\n[alttch](https://github.com/alttch) has done a fantastic job with [rapidtables](https://github.com/alttch/rapidtables). Highly recommend taking a look.\n\nSuper fast list of dicts to pre-formatted tables conversion library for Python 2/3\n",
      "summary": "alttch has done a fantastic job with rapidtables. Highly recommend taking a look.",
      "date_published": "2019-09-08T18:10:55Z",
      "date_modified": "2019-09-08T18:10:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/giampaolo-psutil/",
      "url": "https://go.waylonwalker.com/giampaolo-psutil/",
      "title": "⭐ giampaolo psutil",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/giampaolo/psutil\" 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\"\u003epsutil\u003c/a\u003e, created by \u003ca href=\"https://github.com/giampaolo\" 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\"\u003egiampaolo\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCross-platform lib for process and system monitoring in Python\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [psutil](https://github.com/giampaolo/psutil), created by [giampaolo](https://github.com/giampaolo).\n\nCross-platform lib for process and system monitoring in Python\n",
      "summary": "If you're into interesting projects, don't miss out on psutil, created by giampaolo.",
      "date_published": "2019-09-07T20:41:41Z",
      "date_modified": "2019-09-07T20:41:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zenika-open-source-promote-open-source-project/",
      "url": "https://go.waylonwalker.com/zenika-open-source-promote-open-source-project/",
      "title": "⭐ zenika-open-source promote-open-source-project",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/zenika-open-source/promote-open-source-project\" 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\"\u003epromote-open-source-project\u003c/a\u003e, created by \u003ca href=\"https://github.com/zenika-open-source\" 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\"\u003ezenika-open-source\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e📄 How to promote my open source project?\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [promote-open-source-project](https://github.com/zenika-open-source/promote-open-source-project), created by [zenika-open-source](https://github.com/zenika-open-source).\n\n📄 How to promote my open source project?\n",
      "summary": "If you're into interesting projects, don't miss out on promote-open-source-project, created by zenika-open-source.",
      "date_published": "2019-09-06T04:27:58Z",
      "date_modified": "2019-09-06T04:27:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kislyuk-watchtower/",
      "url": "https://go.waylonwalker.com/kislyuk-watchtower/",
      "title": "⭐ kislyuk watchtower",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/kislyuk/watchtower\" 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\"\u003ewatchtower\u003c/a\u003e by \u003ca href=\"https://github.com/kislyuk\" 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\"\u003ekislyuk\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003ePython CloudWatch Logging: Log Analytics and Application Intelligence\u003c/p\u003e\n",
      "content_text": "\nCheck out [watchtower](https://github.com/kislyuk/watchtower) by [kislyuk](https://github.com/kislyuk). It's a well-crafted project with great potential.\n\nPython CloudWatch Logging: Log Analytics and Application Intelligence\n",
      "summary": "Check out watchtower by kislyuk. It's a well-crafted project with great potential.",
      "date_published": "2019-09-05T13:58:07Z",
      "date_modified": "2019-09-05T13:58:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/apache-arrow/",
      "url": "https://go.waylonwalker.com/apache-arrow/",
      "title": "⭐ apache arrow",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/apache/arrow\" 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\"\u003earrow\u003c/a\u003e by \u003ca href=\"https://github.com/apache\" 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\"\u003eapache\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eApache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [arrow](https://github.com/apache/arrow) by [apache](https://github.com/apache), and it's truly impressive.\n\nApache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics\n",
      "summary": "I recently discovered arrow by apache, and it's truly impressive.",
      "date_published": "2019-08-31T12:06:54Z",
      "date_modified": "2019-08-31T12:06:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/sharkdp-shell-functools/",
      "url": "https://go.waylonwalker.com/sharkdp-shell-functools/",
      "title": "⭐ sharkdp shell-functools",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/sharkdp/shell-functools\" 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\"\u003eshell-functools\u003c/a\u003e by \u003ca href=\"https://github.com/sharkdp\" 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\"\u003esharkdp\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eFunctional programming tools for the shell\u003c/p\u003e\n",
      "content_text": "\nJust starred [shell-functools](https://github.com/sharkdp/shell-functools) by [sharkdp](https://github.com/sharkdp). It's an exciting project with a lot to offer.\n\nFunctional programming tools for the shell\n",
      "summary": "Just starred shell-functools by sharkdp. It's an exciting project with a lot to offer.",
      "date_published": "2019-08-10T09:53:24Z",
      "date_modified": "2019-08-10T09:53:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/burglarbenson-jupyter-atom-dark-theme/",
      "url": "https://go.waylonwalker.com/burglarbenson-jupyter-atom-dark-theme/",
      "title": "⭐ burglarbenson Jupyter-Atom-Dark-Theme",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/burglarbenson/Jupyter-Atom-Dark-Theme\" 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\"\u003eJupyter-Atom-Dark-Theme\u003c/a\u003e by \u003ca href=\"https://github.com/burglarbenson\" 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\"\u003eburglarbenson\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA dark theme for Jupyter Lab\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [Jupyter-Atom-Dark-Theme](https://github.com/burglarbenson/Jupyter-Atom-Dark-Theme) by [burglarbenson](https://github.com/burglarbenson).\n\nA dark theme for Jupyter Lab\n",
      "summary": "Looking for inspiration? Jupyter-Atom-Dark-Theme by burglarbenson.",
      "date_published": "2019-06-28T14:41:20Z",
      "date_modified": "2019-06-28T14:41:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tarpas-pytest-testmon/",
      "url": "https://go.waylonwalker.com/tarpas-pytest-testmon/",
      "title": "⭐ tarpas pytest-testmon",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tarpas\" 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\"\u003etarpas\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/tarpas/pytest-testmon\" 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\"\u003epytest-testmon\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eSelects tests affected by changed files. Executes the right tests first. Continuous test runner when used with pytest-watch.\u003c/p\u003e\n",
      "content_text": "\n[tarpas](https://github.com/tarpas) has done a fantastic job with [pytest-testmon](https://github.com/tarpas/pytest-testmon). Highly recommend taking a look.\n\nSelects tests affected by changed files. Executes the right tests first. Continuous test runner when used with pytest-watch.\n",
      "summary": "tarpas has done a fantastic job with pytest-testmon. Highly recommend taking a look.",
      "date_published": "2019-06-20T01:09:33Z",
      "date_modified": "2019-06-20T01:09:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rbong-vim-flog/",
      "url": "https://go.waylonwalker.com/rbong-vim-flog/",
      "title": "⭐ rbong vim-flog",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/rbong/vim-flog\" 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\"\u003evim-flog\u003c/a\u003e, created by \u003ca href=\"https://github.com/rbong\" 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\"\u003erbong\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA blazingly fast, stunningly beautiful, exceptionally powerful \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e branch viewer for Vim/Neovim.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [vim-flog](https://github.com/rbong/vim-flog), created by [rbong](https://github.com/rbong).\n\nA blazingly fast, stunningly beautiful, exceptionally powerful git branch viewer for Vim/Neovim.\n",
      "summary": "If you're into interesting projects, don't miss out on vim-flog, created by rbong.",
      "date_published": "2019-06-19T18:11:59Z",
      "date_modified": "2019-06-19T18:11:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mcfunley-pugsql/",
      "url": "https://go.waylonwalker.com/mcfunley-pugsql/",
      "title": "⭐ mcfunley pugsql",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/mcfunley\" 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\"\u003emcfunley’s\u003c/a\u003e project \u003ca href=\"https://github.com/mcfunley/pugsql\" 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\"\u003epugsql\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA HugSQL-inspired database library for Python\u003c/p\u003e\n",
      "content_text": "\nI like [mcfunley's](https://github.com/mcfunley) project [pugsql](https://github.com/mcfunley/pugsql).\n\nA HugSQL-inspired database library for Python\n",
      "summary": "I like mcfunley's project pugsql.",
      "date_published": "2019-05-30T17:14:14Z",
      "date_modified": "2019-05-30T17:14:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ggreer-the_silver_searcher/",
      "url": "https://go.waylonwalker.com/ggreer-the_silver_searcher/",
      "title": "⭐ ggreer the_silver_searcher",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/ggreer\" 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\"\u003eggreer’s\u003c/a\u003e project \u003ca href=\"https://github.com/ggreer/the_silver_searcher\" 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\"\u003ethe_silver_searcher\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA code-searching tool similar to ack, but faster.\u003c/p\u003e\n",
      "content_text": "\nI like [ggreer's](https://github.com/ggreer) project [the_silver_searcher](https://github.com/ggreer/the_silver_searcher).\n\nA code-searching tool similar to ack, but faster.\n",
      "summary": "I like ggreer's project the_searcher.",
      "date_published": "2019-05-30T16:15:33Z",
      "date_modified": "2019-05-30T16:15:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kedro-org-kedro/",
      "url": "https://go.waylonwalker.com/kedro-org-kedro/",
      "title": "⭐ kedro-org kedro",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/kedro-org/kedro\" 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\"\u003ekedro\u003c/a\u003e by \u003ca href=\"https://github.com/kedro-org\" 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\"\u003ekedro-org\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.\u003c/p\u003e\n",
      "content_text": "\nJust starred [kedro](https://github.com/kedro-org/kedro) by [kedro-org](https://github.com/kedro-org). It's an exciting project with a lot to offer.\n\nKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.\n",
      "summary": "Just starred kedro by kedro-org. It's an exciting project with a lot to offer.",
      "date_published": "2019-05-20T12:11:42Z",
      "date_modified": "2019-05-20T12:11:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/forestryio-forestry-io/",
      "url": "https://go.waylonwalker.com/forestryio-forestry-io/",
      "title": "⭐ forestryio forestry.io",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/forestryio\" 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\"\u003eforestryio\u003c/a\u003e and their project \u003ca href=\"https://github.com/forestryio/forestry.io\" 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\"\u003eforestry.io\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eForestry.io website\u003c/p\u003e\n",
      "content_text": "\nCheck out [forestryio](https://github.com/forestryio) and their project [forestry.io](https://github.com/forestryio/forestry.io).\n\nForestry.io website\n",
      "summary": "Check out forestryio and their project forestry.io.",
      "date_published": "2019-05-18T16:03:31Z",
      "date_modified": "2019-05-18T16:03:31Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/chris104957-maildown/",
      "url": "https://go.waylonwalker.com/chris104957-maildown/",
      "title": "⭐ chris104957 maildown",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/chris104957/maildown\" 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\"\u003emaildown\u003c/a\u003e by \u003ca href=\"https://github.com/chris104957\" 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\"\u003echris104957\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eA super simple CLI for sending emails\u003c/p\u003e\n",
      "content_text": "\nCheck out [maildown](https://github.com/chris104957/maildown) by [chris104957](https://github.com/chris104957). It's a well-crafted project with great potential.\n\nA super simple CLI for sending emails\n",
      "summary": "Check out maildown by chris104957. It's a well-crafted project with great potential.",
      "date_published": "2019-05-10T02:14:36Z",
      "date_modified": "2019-05-10T02:14:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wesbos-eslint-config-wesbos/",
      "url": "https://go.waylonwalker.com/wesbos-eslint-config-wesbos/",
      "title": "⭐ wesbos eslint-config-wesbos",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/wesbos/eslint-config-wesbos\" 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\"\u003eeslint-config-wesbos\u003c/a\u003e by \u003ca href=\"https://github.com/wesbos\" 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\"\u003ewesbos\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eNo-Sweat™ Eslint and Prettier Setup - with or without VS Code\u003c/p\u003e\n",
      "content_text": "\nJust starred [eslint-config-wesbos](https://github.com/wesbos/eslint-config-wesbos) by [wesbos](https://github.com/wesbos). It's an exciting project with a lot to offer.\n\nNo-Sweat™ Eslint and Prettier Setup - with or without VS Code\n",
      "summary": "Just starred eslint-config-wesbos by wesbos. It's an exciting project with a lot to offer.",
      "date_published": "2019-03-13T11:40:54Z",
      "date_modified": "2019-03-13T11:40:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/ydataai-ydata-profiling/",
      "url": "https://go.waylonwalker.com/ydataai-ydata-profiling/",
      "title": "⭐ ydataai ydata-profiling",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/ydataai\" 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\"\u003eydataai\u003c/a\u003e and their project \u003ca href=\"https://github.com/ydataai/ydata-profiling\" 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\"\u003eydata-profiling\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e1 Line of code data quality profiling \u0026amp; exploratory data analysis for Pandas and Spark DataFrames.\u003c/p\u003e\n",
      "content_text": "\nCheck out [ydataai](https://github.com/ydataai) and their project [ydata-profiling](https://github.com/ydataai/ydata-profiling).\n\n1 Line of code data quality profiling \u0026 exploratory data analysis for Pandas and Spark DataFrames.\n",
      "summary": "Check out ydataai and their project ydata-profiling.",
      "date_published": "2019-03-11T16:42:52Z",
      "date_modified": "2019-03-11T16:42:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/data-centric-ai-community-ydata-profiling/",
      "url": "https://go.waylonwalker.com/data-centric-ai-community-ydata-profiling/",
      "title": "⭐ Data-Centric-AI-Community ydata-profiling",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/Data-Centric-AI-Community/ydata-profiling\" 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\"\u003eydata-profiling\u003c/a\u003e from \u003ca href=\"https://github.com/Data-Centric-AI-Community\" 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\"\u003eData-Centric-AI-Community\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003e1 Line of code data quality profiling \u0026amp; exploratory data analysis for Pandas and Spark DataFrames.\u003c/p\u003e\n",
      "content_text": "\nI came across [ydata-profiling](https://github.com/Data-Centric-AI-Community/ydata-profiling) from [Data-Centric-AI-Community](https://github.com/Data-Centric-AI-Community), and it's packed with great features and ideas.\n\n1 Line of code data quality profiling \u0026 exploratory data analysis for Pandas and Spark DataFrames. \n",
      "summary": "I came across ydata-profiling from Data-Centric-AI-Community, and it's packed with great features and ideas.",
      "date_published": "2019-03-11T16:42:52Z",
      "date_modified": "2019-03-11T16:42:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mdbartos-tabview/",
      "url": "https://go.waylonwalker.com/mdbartos-tabview/",
      "title": "⭐ mdbartos tabview",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/mdbartos\" 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\"\u003emdbartos\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/mdbartos/tabview\" 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\"\u003etabview\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003ePython curses command line CSV viewer\u003c/p\u003e\n",
      "content_text": "\n[mdbartos](https://github.com/mdbartos) has done a fantastic job with [tabview](https://github.com/mdbartos/tabview). Highly recommend taking a look.\n\nPython curses command line CSV viewer\n",
      "summary": "mdbartos has done a fantastic job with tabview. Highly recommend taking a look.",
      "date_published": "2019-03-04T19:27:01Z",
      "date_modified": "2019-03-04T19:27:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tabviewer-tabview/",
      "url": "https://go.waylonwalker.com/tabviewer-tabview/",
      "title": "⭐ TabViewer tabview",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/TabViewer\" 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\"\u003eTabViewer\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/TabViewer/tabview\" 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\"\u003etabview\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003ePython curses command line CSV and tabular data viewer\u003c/p\u003e\n",
      "content_text": "\n[TabViewer](https://github.com/TabViewer) has done a fantastic job with [tabview](https://github.com/TabViewer/tabview). Highly recommend taking a look.\n\nPython curses command line CSV and tabular data viewer\n",
      "summary": "TabViewer has done a fantastic job with tabview. Highly recommend taking a look.",
      "date_published": "2019-03-04T17:30:58Z",
      "date_modified": "2019-03-04T17:30:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lukesmithxyz-voidrice/",
      "url": "https://go.waylonwalker.com/lukesmithxyz-voidrice/",
      "title": "⭐ LukeSmithxyz voidrice",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/LukeSmithxyz/voidrice\" 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\"\u003evoidrice\u003c/a\u003e from \u003ca href=\"https://github.com/LukeSmithxyz\" 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\"\u003eLukeSmithxyz\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eMy dotfiles (deployed by LARBS)\u003c/p\u003e\n",
      "content_text": "\nI came across [voidrice](https://github.com/LukeSmithxyz/voidrice) from [LukeSmithxyz](https://github.com/LukeSmithxyz), and it's packed with great features and ideas.\n\nMy dotfiles (deployed by LARBS)\n",
      "summary": "I came across voidrice from LukeSmithxyz, and it's packed with great features and ideas.",
      "date_published": "2019-03-04T15:50:24Z",
      "date_modified": "2019-03-04T15:50:24Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/formidablelabs-webpack-dashboard/",
      "url": "https://go.waylonwalker.com/formidablelabs-webpack-dashboard/",
      "title": "⭐ FormidableLabs webpack-dashboard",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/FormidableLabs\" 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\"\u003eFormidableLabs’s\u003c/a\u003e project \u003ca href=\"https://github.com/FormidableLabs/webpack-dashboard\" 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\"\u003ewebpack-dashboard\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA CLI dashboard for webpack dev server\u003c/p\u003e\n",
      "content_text": "\nI like [FormidableLabs's](https://github.com/FormidableLabs) project [webpack-dashboard](https://github.com/FormidableLabs/webpack-dashboard).\n\nA CLI dashboard for webpack dev server\n",
      "summary": "I like FormidableLabs's project webpack-dashboard.",
      "date_published": "2019-02-09T15:33:40Z",
      "date_modified": "2019-02-09T15:33:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/yuki-yano-fzf-preview-vim/",
      "url": "https://go.waylonwalker.com/yuki-yano-fzf-preview-vim/",
      "title": "⭐ yuki-yano fzf-preview.vim",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/yuki-yano/fzf-preview.vim\" 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\"\u003efzf-preview.vim\u003c/a\u003e by \u003ca href=\"https://github.com/yuki-yano\" 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\"\u003eyuki-yano\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe plugin that powerfully integrates fzf and (Neo)vim. It is also possible to integrate with coc.nvim.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [fzf-preview.vim](https://github.com/yuki-yano/fzf-preview.vim) by [yuki-yano](https://github.com/yuki-yano).\n\nThe plugin that powerfully integrates fzf and (Neo)vim. It is also possible to integrate with coc.nvim.\n",
      "summary": "Looking for inspiration? fzf-preview.vim by yuki-yano.",
      "date_published": "2019-02-01T13:08:57Z",
      "date_modified": "2019-02-01T13:08:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/parths007-background/",
      "url": "https://go.waylonwalker.com/parths007-background/",
      "title": "⭐ ParthS007 background",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/ParthS007/background\" 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\"\u003ebackground\u003c/a\u003e, created by \u003ca href=\"https://github.com/ParthS007\" 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\"\u003eParthS007\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRuns things in the background.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [background](https://github.com/ParthS007/background), created by [ParthS007](https://github.com/ParthS007).\n\nRuns things in the background.\n",
      "summary": "If you're into interesting projects, don't miss out on background, created by ParthS007.",
      "date_published": "2019-01-30T15:40:36Z",
      "date_modified": "2019-01-30T15:40:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jedwatson-react-select/",
      "url": "https://go.waylonwalker.com/jedwatson-react-select/",
      "title": "⭐ JedWatson react-select",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/JedWatson/react-select\" 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\"\u003ereact-select\u003c/a\u003e by \u003ca href=\"https://github.com/JedWatson\" 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\"\u003eJedWatson\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe Select Component for React.js\u003c/p\u003e\n",
      "content_text": "\nThe work on [react-select](https://github.com/JedWatson/react-select) by [JedWatson](https://github.com/JedWatson).\n\nThe Select Component for React.js\n",
      "summary": "The work on react-select by JedWatson.",
      "date_published": "2019-01-26T15:37:15Z",
      "date_modified": "2019-01-26T15:37:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tadaa-vimade/",
      "url": "https://go.waylonwalker.com/tadaa-vimade/",
      "title": "⭐ TaDaa vimade",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/TaDaa/vimade\" 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\"\u003evimade\u003c/a\u003e by \u003ca href=\"https://github.com/TaDaa\" 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\"\u003eTaDaa\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eVimade let’s you dim, fade, tint, animate, and customize colors in your windows and buffers for (Neo)vim\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [vimade](https://github.com/TaDaa/vimade) by [TaDaa](https://github.com/TaDaa), and it's truly impressive.\n\nVimade let's you dim, fade, tint, animate, and customize colors in your windows and buffers for (Neo)vim\n",
      "summary": "I recently discovered vimade by TaDaa, and it's truly impressive.",
      "date_published": "2019-01-26T14:19:16Z",
      "date_modified": "2019-01-26T14:19:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/engineer-man-youtube/",
      "url": "https://go.waylonwalker.com/engineer-man-youtube/",
      "title": "⭐ engineer-man youtube",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/engineer-man\" 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\"\u003eengineer-man\u003c/a\u003e and their project \u003ca href=\"https://github.com/engineer-man/youtube\" 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\"\u003eyoutube\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCode from the Engineer Man YouTube channel. Please do not submit pull requests, they will be ignored/closed. The code in the repo needs to remain as it was in the video.\u003c/p\u003e\n",
      "content_text": "\nCheck out [engineer-man](https://github.com/engineer-man) and their project [youtube](https://github.com/engineer-man/youtube).\n\nCode from the Engineer Man YouTube channel. Please do not submit pull requests, they will be ignored/closed. The code in the repo needs to remain as it was in the video.\n",
      "summary": "Check out engineer-man and their project youtube.",
      "date_published": "2019-01-06T23:23:53Z",
      "date_modified": "2019-01-06T23:23:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wesm-feather/",
      "url": "https://go.waylonwalker.com/wesm-feather/",
      "title": "⭐ wesm feather",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/wesm/feather\" 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\"\u003efeather\u003c/a\u003e by \u003ca href=\"https://github.com/wesm\" 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\"\u003ewesm\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eFeather: fast, interoperable binary data frame storage for Python, R, and more powered by Apache Arrow\u003c/p\u003e\n",
      "content_text": "\n[feather](https://github.com/wesm/feather) by [wesm](https://github.com/wesm) is a game-changer in its space. Excited to see how it evolves.\n\nFeather: fast, interoperable binary data frame storage for Python, R, and more powered by Apache Arrow\n",
      "summary": "feather by wesm is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2018-11-29T19:58:28Z",
      "date_modified": "2018-11-29T19:58:28Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nostalgic-css-nes-css/",
      "url": "https://go.waylonwalker.com/nostalgic-css-nes-css/",
      "title": "⭐ nostalgic-css NES.css",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/nostalgic-css/NES.css\" 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\"\u003eNES.css\u003c/a\u003e by \u003ca href=\"https://github.com/nostalgic-css\" 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\"\u003enostalgic-css\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eNES-style CSS Framework | ファミコン風CSSフレームワーク\u003c/p\u003e\n",
      "content_text": "\nJust starred [NES.css](https://github.com/nostalgic-css/NES.css) by [nostalgic-css](https://github.com/nostalgic-css). It's an exciting project with a lot to offer.\n\nNES-style CSS Framework | ファミコン風CSSフレームワーク\n",
      "summary": "Just starred NES.css by nostalgic-css. It's an exciting project with a lot to offer.",
      "date_published": "2018-11-28T15:46:37Z",
      "date_modified": "2018-11-28T15:46:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kennethreitz-responder/",
      "url": "https://go.waylonwalker.com/kennethreitz-responder/",
      "title": "⭐ kennethreitz responder",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/kennethreitz\" 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\"\u003ekennethreitz\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/kennethreitz/responder\" 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\"\u003eresponder\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA familiar HTTP Service Framework for Python.\u003c/p\u003e\n",
      "content_text": "\n[kennethreitz](https://github.com/kennethreitz) has done a fantastic job with [responder](https://github.com/kennethreitz/responder). Highly recommend taking a look.\n\nA familiar HTTP Service Framework for Python.\n",
      "summary": "kennethreitz has done a fantastic job with responder. Highly recommend taking a look.",
      "date_published": "2018-10-10T23:26:29Z",
      "date_modified": "2018-10-10T23:26:29Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rstacruz-cheatsheets/",
      "url": "https://go.waylonwalker.com/rstacruz-cheatsheets/",
      "title": "⭐ rstacruz cheatsheets",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rstacruz/cheatsheets\" 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\"\u003echeatsheets\u003c/a\u003e by \u003ca href=\"https://github.com/rstacruz\" 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\"\u003erstacruz\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eCheatsheets for web development - devhints.io\u003c/p\u003e\n",
      "content_text": "\n[cheatsheets](https://github.com/rstacruz/cheatsheets) by [rstacruz](https://github.com/rstacruz) is a game-changer in its space. Excited to see how it evolves.\n\nCheatsheets for web development - devhints.io\n",
      "summary": "cheatsheets by rstacruz is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2018-10-10T13:19:34Z",
      "date_modified": "2018-10-10T13:19:34Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/viatsko-awesome-vscode/",
      "url": "https://go.waylonwalker.com/viatsko-awesome-vscode/",
      "title": "⭐ viatsko awesome-vscode",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/viatsko/awesome-vscode\" 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\"\u003eawesome-vscode\u003c/a\u003e, created by \u003ca href=\"https://github.com/viatsko\" 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\"\u003eviatsko\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🎨 A curated list of delightful VS Code packages and resources.\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [awesome-vscode](https://github.com/viatsko/awesome-vscode), created by [viatsko](https://github.com/viatsko).\n\n🎨 A curated list of delightful VS Code packages and resources.\n",
      "summary": "If you're into interesting projects, don't miss out on awesome-vscode, created by viatsko.",
      "date_published": "2018-10-09T16:35:18Z",
      "date_modified": "2018-10-09T16:35:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rwhitt2049-psp_hourly_rates/",
      "url": "https://go.waylonwalker.com/rwhitt2049-psp_hourly_rates/",
      "title": "⭐ rwhitt2049 psp_hourly_rates",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/rwhitt2049/psp_hourly_rates\" 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\"\u003epsp_hourly_rates\u003c/a\u003e by \u003ca href=\"https://github.com/rwhitt2049\" 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\"\u003erwhitt2049\u003c/a\u003e is a game-changer in its space. Excited to see how it evolves.\u003c/p\u003e\n\u003cp\u003eMy local power company offers market based electricity rates that vary by hour. This is an analysis to determine if it could save me money.  \u003ca href=\"https://www.powersmartpricing.org/\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/www.powersmartpricing.org.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/www.powersmartpricing.org.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://www.powersmartpricing.org/\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\n[psp_hourly_rates](https://github.com/rwhitt2049/psp_hourly_rates) by [rwhitt2049](https://github.com/rwhitt2049) is a game-changer in its space. Excited to see how it evolves.\n\nMy local power company offers market based electricity rates that vary by hour. This is an analysis to determine if it could save me money.  https://www.powersmartpricing.org/\n",
      "summary": "psp_rates by rwhitt2049 is a game-changer in its space. Excited to see how it evolves.",
      "date_published": "2018-10-04T14:14:22Z",
      "date_modified": "2018-10-04T14:14:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mdx-js-mdx/",
      "url": "https://go.waylonwalker.com/mdx-js-mdx/",
      "title": "⭐ mdx-js mdx",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/mdx-js/mdx\" 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\"\u003emdx\u003c/a\u003e by \u003ca href=\"https://github.com/mdx-js\" 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\"\u003emdx-js\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMarkdown for the component era\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [mdx](https://github.com/mdx-js/mdx) by [mdx-js](https://github.com/mdx-js).\n\nMarkdown for the component era\n",
      "summary": "Looking for inspiration? mdx by mdx-js.",
      "date_published": "2018-09-27T13:07:04Z",
      "date_modified": "2018-09-27T13:07:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/asweigart-pyperclip/",
      "url": "https://go.waylonwalker.com/asweigart-pyperclip/",
      "title": "⭐ asweigart pyperclip",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/asweigart/pyperclip\" 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\"\u003epyperclip\u003c/a\u003e by \u003ca href=\"https://github.com/asweigart\" 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\"\u003easweigart\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003ePython module for cross-platform clipboard functions.\u003c/p\u003e\n",
      "content_text": "\nJust starred [pyperclip](https://github.com/asweigart/pyperclip) by [asweigart](https://github.com/asweigart). It's an exciting project with a lot to offer.\n\nPython module for cross-platform clipboard functions.\n",
      "summary": "Just starred pyperclip by asweigart. It's an exciting project with a lot to offer.",
      "date_published": "2018-09-25T02:27:38Z",
      "date_modified": "2018-09-25T02:27:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tomerfiliba-plumbum/",
      "url": "https://go.waylonwalker.com/tomerfiliba-plumbum/",
      "title": "⭐ tomerfiliba plumbum",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/tomerfiliba\" 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\"\u003etomerfiliba\u003c/a\u003e and their project \u003ca href=\"https://github.com/tomerfiliba/plumbum\" 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\"\u003eplumbum\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePlumbum: Shell Combinators\u003c/p\u003e\n",
      "content_text": "\nCheck out [tomerfiliba](https://github.com/tomerfiliba) and their project [plumbum](https://github.com/tomerfiliba/plumbum).\n\nPlumbum: Shell Combinators\n",
      "summary": "Check out tomerfiliba and their project plumbum.",
      "date_published": "2018-09-24T12:40:58Z",
      "date_modified": "2018-09-24T12:40:58Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/decaporg-decap-cms/",
      "url": "https://go.waylonwalker.com/decaporg-decap-cms/",
      "title": "⭐ decaporg decap-cms",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/decaporg\" 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\"\u003edecaporg\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/decaporg/decap-cms\" 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\"\u003edecap-cms\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eA \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003eGit\u003c/a\u003e-based CMS for Static Site Generators\u003c/p\u003e\n",
      "content_text": "\n[decaporg](https://github.com/decaporg) has done a fantastic job with [decap-cms](https://github.com/decaporg/decap-cms). Highly recommend taking a look.\n\nA Git-based CMS for Static Site Generators\n",
      "summary": "decaporg has done a fantastic job with decap-cms. Highly recommend taking a look.",
      "date_published": "2018-09-23T19:41:10Z",
      "date_modified": "2018-09-23T19:41:10Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lovell-sharp/",
      "url": "https://go.waylonwalker.com/lovell-sharp/",
      "title": "⭐ lovell sharp",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/lovell/sharp\" 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\"\u003esharp\u003c/a\u003e by \u003ca href=\"https://github.com/lovell\" 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\"\u003elovell\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eHigh performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.\u003c/p\u003e\n",
      "content_text": "\nThe work on [sharp](https://github.com/lovell/sharp) by [lovell](https://github.com/lovell).\n\nHigh performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.\n",
      "summary": "The work on sharp by lovell.",
      "date_published": "2018-09-22T14:58:26Z",
      "date_modified": "2018-09-22T14:58:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/benfred-py-spy/",
      "url": "https://go.waylonwalker.com/benfred-py-spy/",
      "title": "⭐ benfred py-spy",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/benfred\" 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\"\u003ebenfred’s\u003c/a\u003e project \u003ca href=\"https://github.com/benfred/py-spy\" 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\"\u003epy-spy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSampling profiler for Python programs\u003c/p\u003e\n",
      "content_text": "\nI like [benfred's](https://github.com/benfred) project [py-spy](https://github.com/benfred/py-spy).\n\nSampling profiler for Python programs\n",
      "summary": "I like benfred's project py-spy.",
      "date_published": "2018-09-10T13:40:20Z",
      "date_modified": "2018-09-10T13:40:20Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/adereth-dactyl-keyboard/",
      "url": "https://go.waylonwalker.com/adereth-dactyl-keyboard/",
      "title": "⭐ adereth dactyl-keyboard",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/adereth\" 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\"\u003eadereth\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/adereth/dactyl-keyboard\" 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\"\u003edactyl-keyboard\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eParameterized ergonomic keyboard\u003c/p\u003e\n",
      "content_text": "\n[adereth](https://github.com/adereth) has done a fantastic job with [dactyl-keyboard](https://github.com/adereth/dactyl-keyboard). Highly recommend taking a look.\n\nParameterized ergonomic keyboard\n",
      "summary": "adereth has done a fantastic job with dactyl-keyboard. Highly recommend taking a look.",
      "date_published": "2018-08-13T01:47:02Z",
      "date_modified": "2018-08-13T01:47:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/kitao-pyxel/",
      "url": "https://go.waylonwalker.com/kitao-pyxel/",
      "title": "⭐ kitao pyxel",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/kitao\" 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\"\u003ekitao\u003c/a\u003e and their project \u003ca href=\"https://github.com/kitao/pyxel\" 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\"\u003epyxel\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA retro game engine for Python\u003c/p\u003e\n",
      "content_text": "\nCheck out [kitao](https://github.com/kitao) and their project [pyxel](https://github.com/kitao/pyxel).\n\nA retro game engine for Python\n",
      "summary": "Check out kitao and their project pyxel.",
      "date_published": "2018-08-08T14:40:48Z",
      "date_modified": "2018-08-08T14:40:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jesseduffield-lazygit/",
      "url": "https://go.waylonwalker.com/jesseduffield-lazygit/",
      "title": "⭐ jesseduffield lazygit",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/jesseduffield/lazygit\" 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\"\u003elazygit\u003c/a\u003e by \u003ca href=\"https://github.com/jesseduffield\" 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\"\u003ejesseduffield\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003esimple terminal UI for \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e commands\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [lazygit](https://github.com/jesseduffield/lazygit) by [jesseduffield](https://github.com/jesseduffield), and it's truly impressive.\n\nsimple terminal UI for git commands\n",
      "summary": "I recently discovered lazygit by jesseduffield, and it's truly impressive.",
      "date_published": "2018-08-06T16:25:27Z",
      "date_modified": "2018-08-06T16:25:27Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gatsbyjs-gatsby/",
      "url": "https://go.waylonwalker.com/gatsbyjs-gatsby/",
      "title": "⭐ gatsbyjs gatsby",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/gatsbyjs/gatsby\" 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\"\u003egatsby\u003c/a\u003e from \u003ca href=\"https://github.com/gatsbyjs\" 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\"\u003egatsbyjs\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe best React-based framework with performance, scalability and security built in.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [gatsby](https://github.com/gatsbyjs/gatsby) from [gatsbyjs](https://github.com/gatsbyjs).\n\nThe best React-based framework with performance, scalability and security built in.\n",
      "summary": "I'm impressed by gatsby from gatsbyjs.",
      "date_published": "2018-07-20T14:08:09Z",
      "date_modified": "2018-07-20T14:08:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/chubin-cheat-sh/",
      "url": "https://go.waylonwalker.com/chubin-cheat-sh/",
      "title": "⭐ chubin cheat.sh",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/chubin/cheat.sh\" 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\"\u003echeat.sh\u003c/a\u003e by \u003ca href=\"https://github.com/chubin\" 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\"\u003echubin\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ethe only cheat sheet you need\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [cheat.sh](https://github.com/chubin/cheat.sh) by [chubin](https://github.com/chubin), and it's truly impressive.\n\nthe only cheat sheet you need\n",
      "summary": "I recently discovered cheat.sh by chubin, and it's truly impressive.",
      "date_published": "2018-07-12T02:19:55Z",
      "date_modified": "2018-07-12T02:19:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jmoon018-pacvim/",
      "url": "https://go.waylonwalker.com/jmoon018-pacvim/",
      "title": "⭐ jmoon018 PacVim",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/jmoon018/PacVim\" 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\"\u003ePacVim\u003c/a\u003e by \u003ca href=\"https://github.com/jmoon018\" 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\"\u003ejmoon018\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\nThe work on [PacVim](https://github.com/jmoon018/PacVim) by [jmoon018](https://github.com/jmoon018).\n\nNo description available.\n",
      "summary": "The work on PacVim by jmoon018.",
      "date_published": "2018-07-09T21:29:41Z",
      "date_modified": "2018-07-09T21:29:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/realpython-python-guide/",
      "url": "https://go.waylonwalker.com/realpython-python-guide/",
      "title": "⭐ realpython python-guide",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/realpython/python-guide\" 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\"\u003epython-guide\u003c/a\u003e by \u003ca href=\"https://github.com/realpython\" 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\"\u003erealpython\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003ePython best practices guidebook, written for humans.\u003c/p\u003e\n",
      "content_text": "\nJust starred [python-guide](https://github.com/realpython/python-guide) by [realpython](https://github.com/realpython). It's an exciting project with a lot to offer.\n\nPython best practices guidebook, written for humans.\n",
      "summary": "Just starred python-guide by realpython. It's an exciting project with a lot to offer.",
      "date_published": "2018-07-05T17:07:00Z",
      "date_modified": "2018-07-05T17:07:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/choices-js-choices/",
      "url": "https://go.waylonwalker.com/choices-js-choices/",
      "title": "⭐ Choices-js Choices",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/Choices-js\" 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\"\u003eChoices-js\u003c/a\u003e and their project \u003ca href=\"https://github.com/Choices-js/Choices\" 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\"\u003eChoices\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA vanilla JS customisable select box/text input plugin ⚡️\u003c/p\u003e\n",
      "content_text": "\nCheck out [Choices-js](https://github.com/Choices-js) and their project [Choices](https://github.com/Choices-js/Choices).\n\nA vanilla JS customisable select box/text input plugin ⚡️\n",
      "summary": "Check out Choices-js and their project Choices.",
      "date_published": "2018-06-09T04:05:04Z",
      "date_modified": "2018-06-09T04:05:04Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mobius1-vanilla-datatables/",
      "url": "https://go.waylonwalker.com/mobius1-vanilla-datatables/",
      "title": "⭐ Mobius1 Vanilla-DataTables",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/Mobius1/Vanilla-DataTables\" 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\"\u003eVanilla-DataTables\u003c/a\u003e by \u003ca href=\"https://github.com/Mobius1\" 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\"\u003eMobius1\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eA lightweight, dependency-free javascript \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 table plugin\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [Vanilla-DataTables](https://github.com/Mobius1/Vanilla-DataTables) by [Mobius1](https://github.com/Mobius1), and it's truly impressive.\n\nA lightweight, dependency-free javascript HTML table plugin\n",
      "summary": "I recently discovered Vanilla-DataTables by Mobius1, and it's truly impressive.",
      "date_published": "2018-06-09T03:58:54Z",
      "date_modified": "2018-06-09T03:58:54Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dhruvasagar-vim-table-mode/",
      "url": "https://go.waylonwalker.com/dhruvasagar-vim-table-mode/",
      "title": "⭐ dhruvasagar vim-table-mode",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/dhruvasagar/vim-table-mode\" 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\"\u003evim-table-mode\u003c/a\u003e from \u003ca href=\"https://github.com/dhruvasagar\" 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\"\u003edhruvasagar\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eVIM Table Mode for instant table creation.\u003c/p\u003e\n",
      "content_text": "\nI came across [vim-table-mode](https://github.com/dhruvasagar/vim-table-mode) from [dhruvasagar](https://github.com/dhruvasagar), and it's packed with great features and ideas.\n\nVIM Table Mode for instant table creation.\n",
      "summary": "I came across vim-table-mode from dhruvasagar, and it's packed with great features and ideas.",
      "date_published": "2018-05-22T15:07:52Z",
      "date_modified": "2018-05-22T15:07:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pbnj-awesome-podcasts/",
      "url": "https://go.waylonwalker.com/pbnj-awesome-podcasts/",
      "title": "⭐ pbnj awesome-podcasts",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/pbnj/awesome-podcasts\" 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\"\u003eawesome-podcasts\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/pbnj\" 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\"\u003epbnj\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003e🎙 A collection of awesome engineering podcasts! ARCHIVED in favor of \u003ca href=\"https://github.com/rShetty/awesome-podcasts\" 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\"\u003ehttps://github.com/rShetty/awesome-podcasts\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [awesome-podcasts](https://github.com/pbnj/awesome-podcasts), an amazing project by [pbnj](https://github.com/pbnj). It's worth exploring!\n\n🎙 A collection of awesome engineering podcasts! ARCHIVED in favor of https://github.com/rShetty/awesome-podcasts\n",
      "summary": "I'm really excited about awesome-podcasts, an amazing project by pbnj. It's worth exploring!",
      "date_published": "2018-05-02T17:21:52Z",
      "date_modified": "2018-05-02T17:21:52Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/bogdanp-hugs/",
      "url": "https://go.waylonwalker.com/bogdanp-hugs/",
      "title": "⭐ Bogdanp hugs",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/Bogdanp/hugs\" 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\"\u003ehugs\u003c/a\u003e by \u003ca href=\"https://github.com/Bogdanp\" 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\"\u003eBogdanp\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eHugs lets you map SQL expressions to Python functions.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [hugs](https://github.com/Bogdanp/hugs) by [Bogdanp](https://github.com/Bogdanp).\n\nHugs lets you map SQL expressions to Python functions.\n",
      "summary": "Looking for inspiration? hugs by Bogdanp.",
      "date_published": "2018-05-02T17:20:08Z",
      "date_modified": "2018-05-02T17:20:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/joeyespo-grip/",
      "url": "https://go.waylonwalker.com/joeyespo-grip/",
      "title": "⭐ joeyespo grip",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/joeyespo/grip\" 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\"\u003egrip\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/joeyespo\" 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\"\u003ejoeyespo\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003ePreview GitHub README.md files locally before committing them.\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [grip](https://github.com/joeyespo/grip), an amazing project by [joeyespo](https://github.com/joeyespo). It's worth exploring!\n\nPreview GitHub README.md files locally before committing them.\n",
      "summary": "I'm really excited about grip, an amazing project by joeyespo. It's worth exploring!",
      "date_published": "2018-04-28T14:27:13Z",
      "date_modified": "2018-04-28T14:27:13Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/psf-black/",
      "url": "https://go.waylonwalker.com/psf-black/",
      "title": "⭐ psf black",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/psf\" 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\"\u003epsf\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/psf/black\" 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\"\u003eblack\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eThe uncompromising Python code formatter\u003c/p\u003e\n",
      "content_text": "\n[psf](https://github.com/psf) has done a fantastic job with [black](https://github.com/psf/black). Highly recommend taking a look.\n\nThe uncompromising Python code formatter\n",
      "summary": "psf has done a fantastic job with black. Highly recommend taking a look.",
      "date_published": "2018-03-16T18:10:18Z",
      "date_modified": "2018-03-16T18:10:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tfeldmann-organize/",
      "url": "https://go.waylonwalker.com/tfeldmann-organize/",
      "title": "⭐ tfeldmann organize",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/tfeldmann\" 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\"\u003etfeldmann\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/tfeldmann/organize\" 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\"\u003eorganize\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eThe file management automation tool.\u003c/p\u003e\n",
      "content_text": "\n[tfeldmann](https://github.com/tfeldmann) has done a fantastic job with [organize](https://github.com/tfeldmann/organize). Highly recommend taking a look.\n\nThe file management automation tool.\n",
      "summary": "tfeldmann has done a fantastic job with organize. Highly recommend taking a look.",
      "date_published": "2018-03-16T18:07:07Z",
      "date_modified": "2018-03-16T18:07:07Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/albinotonnina-albinotonnina-com/",
      "url": "https://go.waylonwalker.com/albinotonnina-albinotonnina-com/",
      "title": "⭐ albinotonnina albinotonnina.com",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/albinotonnina/albinotonnina.com\" 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\"\u003ealbinotonnina.com\u003c/a\u003e by \u003ca href=\"https://github.com/albinotonnina\" 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\"\u003ealbinotonnina\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003esource-code\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [albinotonnina.com](https://github.com/albinotonnina/albinotonnina.com) by [albinotonnina](https://github.com/albinotonnina), and it's truly impressive.\n\nsource-code\n",
      "summary": "I recently discovered albinotonnina.com by albinotonnina, and it's truly impressive.",
      "date_published": "2018-03-13T19:42:44Z",
      "date_modified": "2018-03-13T19:42:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/psf-requests-html/",
      "url": "https://go.waylonwalker.com/psf-requests-html/",
      "title": "⭐ psf requests-html",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/psf\" 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\"\u003epsf’s\u003c/a\u003e project \u003ca href=\"https://github.com/psf/requests-html\" 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\"\u003erequests-html\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePythonic \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 Parsing for Humans™\u003c/p\u003e\n",
      "content_text": "\nI like [psf's](https://github.com/psf) project [requests-html](https://github.com/psf/requests-html).\n\nPythonic HTML Parsing for Humans™\n",
      "summary": "I like psf's project requests-html.",
      "date_published": "2018-02-25T14:39:48Z",
      "date_modified": "2018-02-25T14:39:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/wentin-css-mono/",
      "url": "https://go.waylonwalker.com/wentin-css-mono/",
      "title": "⭐ wentin CSS-Mono",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/wentin/CSS-Mono\" 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\"\u003eCSS-Mono\u003c/a\u003e by \u003ca href=\"https://github.com/wentin\" 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\"\u003ewentin\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003eMonospaced Typeface Created for CSS Coding\u003c/p\u003e\n",
      "content_text": "\nCheck out [CSS-Mono](https://github.com/wentin/CSS-Mono) by [wentin](https://github.com/wentin). It's a well-crafted project with great potential.\n\nMonospaced Typeface Created for CSS Coding\n",
      "summary": "Check out CSS-Mono by wentin. It's a well-crafted project with great potential.",
      "date_published": "2018-02-19T02:05:53Z",
      "date_modified": "2018-02-19T02:05:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dixler-pc/",
      "url": "https://go.waylonwalker.com/dixler-pc/",
      "title": "⭐ dixler pc",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/dixler/pc\" 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\"\u003epc\u003c/a\u003e from \u003ca href=\"https://github.com/dixler\" 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\"\u003edixler\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003epython calculator purely aesthetic. probably pretty glitchy. sorry in advance.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [pc](https://github.com/dixler/pc) from [dixler](https://github.com/dixler).\n\npython calculator purely aesthetic. probably pretty glitchy. sorry in advance.\n",
      "summary": "I'm impressed by pc from dixler.",
      "date_published": "2018-02-06T02:02:18Z",
      "date_modified": "2018-02-06T02:02:18Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/openimages-dataset/",
      "url": "https://go.waylonwalker.com/openimages-dataset/",
      "title": "⭐ openimages dataset",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/openimages/dataset\" 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\"\u003edataset\u003c/a\u003e by \u003ca href=\"https://github.com/openimages\" 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\"\u003eopenimages\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe Open Images dataset\u003c/p\u003e\n",
      "content_text": "\nThe work on [dataset](https://github.com/openimages/dataset) by [openimages](https://github.com/openimages).\n\nThe Open Images dataset\n",
      "summary": "The work on dataset by openimages.",
      "date_published": "2018-01-24T21:19:02Z",
      "date_modified": "2018-01-24T21:19:02Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/hamidfaraji-panda-theme-cmder/",
      "url": "https://go.waylonwalker.com/hamidfaraji-panda-theme-cmder/",
      "title": "⭐ HamidFaraji panda-theme-cmder",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/HamidFaraji/panda-theme-cmder\" 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\"\u003epanda-theme-cmder\u003c/a\u003e from \u003ca href=\"https://github.com/HamidFaraji\" 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\"\u003eHamidFaraji\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePanda Syntax Theme for Cmder\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [panda-theme-cmder](https://github.com/HamidFaraji/panda-theme-cmder) from [HamidFaraji](https://github.com/HamidFaraji).\n\nPanda Syntax Theme for Cmder\n",
      "summary": "I'm impressed by panda-theme-cmder from HamidFaraji.",
      "date_published": "2018-01-07T15:48:41Z",
      "date_modified": "2018-01-07T15:48:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jhermann-awesome-python-talks/",
      "url": "https://go.waylonwalker.com/jhermann-awesome-python-talks/",
      "title": "⭐ jhermann awesome-python-talks",
      "content_html": "\u003cp\u003eI’m impressed by \u003ca href=\"https://github.com/jhermann/awesome-python-talks\" 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\"\u003eawesome-python-talks\u003c/a\u003e from \u003ca href=\"https://github.com/jhermann\" 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\"\u003ejhermann\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e🎬 🎓 An opinionated list of awesome videos related to Python, with a focus on training and gaining hands-on experience.\u003c/p\u003e\n",
      "content_text": "\nI'm impressed by [awesome-python-talks](https://github.com/jhermann/awesome-python-talks) from [jhermann](https://github.com/jhermann).\n\n:clapper: :mortar_board: An opinionated list of awesome videos related to Python, with a focus on training and gaining hands-on experience.\n",
      "summary": "I'm impressed by awesome-python-talks from jhermann.",
      "date_published": "2017-12-02T15:14:15Z",
      "date_modified": "2017-12-02T15:14:15Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/datacamp-datacamp_facebook_live_titanic/",
      "url": "https://go.waylonwalker.com/datacamp-datacamp_facebook_live_titanic/",
      "title": "⭐ datacamp datacamp_facebook_live_titanic",
      "content_html": "\u003cp\u003eLooking for inspiration? \u003ca href=\"https://github.com/datacamp/datacamp_facebook_live_titanic\" 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\"\u003edatacamp_facebook_live_titanic\u003c/a\u003e by \u003ca href=\"https://github.com/datacamp\" 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\"\u003edatacamp\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eDataCamp Facebook Live Code Along Session 2: Learn how to complete a Kaggle competition using exploratory data analysis, data munging, data cleaning and machine leaning. Enjoy.\u003c/p\u003e\n",
      "content_text": "\nLooking for inspiration? [datacamp_facebook_live_titanic](https://github.com/datacamp/datacamp_facebook_live_titanic) by [datacamp](https://github.com/datacamp).\n\nDataCamp Facebook Live Code Along Session 2: Learn how to complete a Kaggle competition using exploratory data analysis, data munging, data cleaning and machine leaning. Enjoy.\n",
      "summary": "Looking for inspiration? datacamp_live_titanic by datacamp.",
      "date_published": "2017-12-01T02:26:55Z",
      "date_modified": "2017-12-01T02:26:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/richardlitt-standard-readme/",
      "url": "https://go.waylonwalker.com/richardlitt-standard-readme/",
      "title": "⭐ RichardLitt standard-readme",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/RichardLitt/standard-readme\" 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\"\u003estandard-readme\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/RichardLitt\" 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\"\u003eRichardLitt\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eA standard style for README files\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [standard-readme](https://github.com/RichardLitt/standard-readme), an amazing project by [RichardLitt](https://github.com/RichardLitt). It's worth exploring!\n\nA standard style for README files\n",
      "summary": "I'm really excited about standard-readme, an amazing project by RichardLitt. It's worth exploring!",
      "date_published": "2017-09-24T00:28:48Z",
      "date_modified": "2017-09-24T00:28:48Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/lepture-python-livereload/",
      "url": "https://go.waylonwalker.com/lepture-python-livereload/",
      "title": "⭐ lepture python-livereload",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/lepture\" 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\"\u003elepture\u003c/a\u003e and their project \u003ca href=\"https://github.com/lepture/python-livereload\" 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\"\u003epython-livereload\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003elivereload server in python\u003c/p\u003e\n",
      "content_text": "\nCheck out [lepture](https://github.com/lepture) and their project [python-livereload](https://github.com/lepture/python-livereload).\n\nlivereload server in python\n",
      "summary": "Check out lepture and their project python-livereload.",
      "date_published": "2017-09-21T12:25:35Z",
      "date_modified": "2017-09-21T12:25:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/tqdm-tqdm/",
      "url": "https://go.waylonwalker.com/tqdm-tqdm/",
      "title": "⭐ tqdm tqdm",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/tqdm/tqdm\" 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\"\u003etqdm\u003c/a\u003e by \u003ca href=\"https://github.com/tqdm\" 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\"\u003etqdm\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003e⚡ A Fast, Extensible Progress Bar for Python and CLI\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [tqdm](https://github.com/tqdm/tqdm) by [tqdm](https://github.com/tqdm), and it's truly impressive.\n\n:zap: A Fast, Extensible Progress Bar for Python and CLI\n",
      "summary": "I recently discovered tqdm by tqdm, and it's truly impressive.",
      "date_published": "2017-09-16T01:55:40Z",
      "date_modified": "2017-09-16T01:55:40Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cmderdev-cmder/",
      "url": "https://go.waylonwalker.com/cmderdev-cmder/",
      "title": "⭐ cmderdev cmder",
      "content_html": "\u003cp\u003eI’m really excited about \u003ca href=\"https://github.com/cmderdev/cmder\" 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\"\u003ecmder\u003c/a\u003e, an amazing project by \u003ca href=\"https://github.com/cmderdev\" 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\"\u003ecmderdev\u003c/a\u003e. It’s worth exploring!\u003c/p\u003e\n\u003cp\u003eLovely console emulator package for Windows\u003c/p\u003e\n",
      "content_text": "\nI'm really excited about [cmder](https://github.com/cmderdev/cmder), an amazing project by [cmderdev](https://github.com/cmderdev). It's worth exploring!\n\nLovely console emulator package for Windows\n",
      "summary": "I'm really excited about cmder, an amazing project by cmderdev. It's worth exploring!",
      "date_published": "2017-09-16T01:55:30Z",
      "date_modified": "2017-09-16T01:55:30Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/navdeep-g-setup-py/",
      "url": "https://go.waylonwalker.com/navdeep-g-setup-py/",
      "title": "⭐ navdeep-G setup.py",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/navdeep-G/setup.py\" 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\"\u003esetup.py\u003c/a\u003e by \u003ca href=\"https://github.com/navdeep-G\" 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\"\u003enavdeep-G\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003e📦 A Human’s Ultimate Guide to setup.py.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [setup.py](https://github.com/navdeep-G/setup.py) by [navdeep-G](https://github.com/navdeep-G), and it's truly impressive.\n\n📦 A Human's Ultimate Guide to setup.py.\n",
      "summary": "I recently discovered setup.py by navdeep-G, and it's truly impressive.",
      "date_published": "2017-08-31T17:54:38Z",
      "date_modified": "2017-08-31T17:54:38Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/waylonwalker-pydatavizday/",
      "url": "https://go.waylonwalker.com/waylonwalker-pydatavizday/",
      "title": "⭐ WaylonWalker pyDataVizDay",
      "content_html": "\u003cp\u003eI like \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’s\u003c/a\u003e project \u003ca href=\"https://github.com/WaylonWalker/pyDataVizDay\" 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\"\u003epyDataVizDay\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA python implementation of the Data Viz Day visualization.\u003c/p\u003e\n",
      "content_text": "\nI like [WaylonWalker's](https://github.com/WaylonWalker) project [pyDataVizDay](https://github.com/WaylonWalker/pyDataVizDay).\n\nA python implementation of the Data Viz Day visualization.\n",
      "summary": "I like WaylonWalker's project pyDataVizDay.",
      "date_published": "2017-07-04T12:26:06Z",
      "date_modified": "2017-07-04T12:26:06Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/niloch-iplotter/",
      "url": "https://go.waylonwalker.com/niloch-iplotter/",
      "title": "⭐ niloch iplotter",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/niloch/iplotter\" 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\"\u003eiplotter\u003c/a\u003e, created by \u003ca href=\"https://github.com/niloch\" 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\"\u003eniloch\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eJavaScript charting in ipython/jupyter notebooks -\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [iplotter](https://github.com/niloch/iplotter), created by [niloch](https://github.com/niloch).\n\nJavaScript charting in ipython/jupyter notebooks -\n",
      "summary": "If you're into interesting projects, don't miss out on iplotter, created by niloch.",
      "date_published": "2017-06-14T19:48:00Z",
      "date_modified": "2017-06-14T19:48:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/encode-apistar/",
      "url": "https://go.waylonwalker.com/encode-apistar/",
      "title": "⭐ encode apistar",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/encode/apistar\" 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\"\u003eapistar\u003c/a\u003e by \u003ca href=\"https://github.com/encode\" 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\"\u003eencode\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eThe Web API toolkit. 🛠\u003c/p\u003e\n",
      "content_text": "\nJust starred [apistar](https://github.com/encode/apistar) by [encode](https://github.com/encode). It's an exciting project with a lot to offer.\n\nThe Web API toolkit. 🛠\n",
      "summary": "Just starred apistar by encode. It's an exciting project with a lot to offer.",
      "date_published": "2017-06-10T00:53:32Z",
      "date_modified": "2017-06-10T00:53:32Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pypyjs-pypyjs/",
      "url": "https://go.waylonwalker.com/pypyjs-pypyjs/",
      "title": "⭐ pypyjs pypyjs",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/pypyjs/pypyjs\" 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\"\u003epypyjs\u003c/a\u003e by \u003ca href=\"https://github.com/pypyjs\" 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\"\u003epypyjs\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003ePyPy compiled to JavaScript\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [pypyjs](https://github.com/pypyjs/pypyjs) by [pypyjs](https://github.com/pypyjs), and it's truly impressive.\n\nPyPy compiled to JavaScript\n",
      "summary": "I recently discovered pypyjs by pypyjs, and it's truly impressive.",
      "date_published": "2017-05-16T01:30:51Z",
      "date_modified": "2017-05-16T01:30:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gtnx-pandas-highcharts/",
      "url": "https://go.waylonwalker.com/gtnx-pandas-highcharts/",
      "title": "⭐ gtnx pandas-highcharts",
      "content_html": "\u003cp\u003eIf you’re into interesting projects, don’t miss out on \u003ca href=\"https://github.com/gtnx/pandas-highcharts\" 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\"\u003epandas-highcharts\u003c/a\u003e, created by \u003ca href=\"https://github.com/gtnx\" 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\"\u003egtnx\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBeautiful charting of pandas.DataFrame with Highcharts\u003c/p\u003e\n",
      "content_text": "\nIf you're into interesting projects, don't miss out on [pandas-highcharts](https://github.com/gtnx/pandas-highcharts), created by [gtnx](https://github.com/gtnx).\n\nBeautiful charting of pandas.DataFrame with Highcharts\n",
      "summary": "If you're into interesting projects, don't miss out on pandas-highcharts, created by gtnx.",
      "date_published": "2017-05-10T14:36:46Z",
      "date_modified": "2017-05-10T14:36:46Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jakevdp-pythondatasciencehandbook/",
      "url": "https://go.waylonwalker.com/jakevdp-pythondatasciencehandbook/",
      "title": "⭐ jakevdp PythonDataScienceHandbook",
      "content_html": "\u003cp\u003eCheck out \u003ca href=\"https://github.com/jakevdp/PythonDataScienceHandbook\" 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\"\u003ePythonDataScienceHandbook\u003c/a\u003e by \u003ca href=\"https://github.com/jakevdp\" 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\"\u003ejakevdp\u003c/a\u003e. It’s a well-crafted project with great potential.\u003c/p\u003e\n\u003cp\u003ePython Data Science Handbook: full text in Jupyter Notebooks\u003c/p\u003e\n",
      "content_text": "\nCheck out [PythonDataScienceHandbook](https://github.com/jakevdp/PythonDataScienceHandbook) by [jakevdp](https://github.com/jakevdp). It's a well-crafted project with great potential.\n\nPython Data Science Handbook: full text in Jupyter Notebooks\n",
      "summary": "Check out PythonDataScienceHandbook by jakevdp. It's a well-crafted project with great potential.",
      "date_published": "2017-04-28T15:06:57Z",
      "date_modified": "2017-04-28T15:06:57Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/timofurrer-colorful/",
      "url": "https://go.waylonwalker.com/timofurrer-colorful/",
      "title": "⭐ timofurrer colorful",
      "content_html": "\u003cp\u003eI like \u003ca href=\"https://github.com/timofurrer\" 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\"\u003etimofurrer’s\u003c/a\u003e project \u003ca href=\"https://github.com/timofurrer/colorful\" 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\"\u003ecolorful\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTerminal string styling done right, in Python 🐍 🎉\u003c/p\u003e\n",
      "content_text": "\nI like [timofurrer's](https://github.com/timofurrer) project [colorful](https://github.com/timofurrer/colorful).\n\nTerminal string styling done right, in Python :snake: :tada:\n",
      "summary": "I like timofurrer's project colorful.",
      "date_published": "2017-04-20T22:04:26Z",
      "date_modified": "2017-04-20T22:04:26Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/cookiecutter-cookiecutter/",
      "url": "https://go.waylonwalker.com/cookiecutter-cookiecutter/",
      "title": "⭐ cookiecutter cookiecutter",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/cookiecutter/cookiecutter\" 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\"\u003ecookiecutter\u003c/a\u003e by \u003ca href=\"https://github.com/cookiecutter\" 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\"\u003ecookiecutter\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eA cross-platform command-line utility that creates projects from cookiecutters (project templates), e.g. Python package projects, C projects.\u003c/p\u003e\n",
      "content_text": "\nJust starred [cookiecutter](https://github.com/cookiecutter/cookiecutter) by [cookiecutter](https://github.com/cookiecutter). It's an exciting project with a lot to offer.\n\nA cross-platform command-line utility that creates projects from cookiecutters (project templates), e.g. Python package projects, C projects.\n",
      "summary": "Just starred cookiecutter by cookiecutter. It's an exciting project with a lot to offer.",
      "date_published": "2017-01-21T04:30:22Z",
      "date_modified": "2017-01-21T04:30:22Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/jupyterlab-jupyterlab/",
      "url": "https://go.waylonwalker.com/jupyterlab-jupyterlab/",
      "title": "⭐ jupyterlab jupyterlab",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/jupyterlab/jupyterlab\" 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\"\u003ejupyterlab\u003c/a\u003e by \u003ca href=\"https://github.com/jupyterlab\" 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\"\u003ejupyterlab\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eJupyterLab computational environment.\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [jupyterlab](https://github.com/jupyterlab/jupyterlab) by [jupyterlab](https://github.com/jupyterlab), and it's truly impressive.\n\nJupyterLab computational environment.\n",
      "summary": "I recently discovered jupyterlab by jupyterlab, and it's truly impressive.",
      "date_published": "2016-12-13T04:17:08Z",
      "date_modified": "2016-12-13T04:17:08Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nickhould-tidy-data-python/",
      "url": "https://go.waylonwalker.com/nickhould-tidy-data-python/",
      "title": "⭐ nickhould tidy-data-python",
      "content_html": "\u003cp\u003eJust starred \u003ca href=\"https://github.com/nickhould/tidy-data-python\" 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\"\u003etidy-data-python\u003c/a\u003e by \u003ca href=\"https://github.com/nickhould\" 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\"\u003enickhould\u003c/a\u003e. It’s an exciting project with a lot to offer.\u003c/p\u003e\n\u003cp\u003eTidy Data in Python Jupyter Notebook\u003c/p\u003e\n",
      "content_text": "\nJust starred [tidy-data-python](https://github.com/nickhould/tidy-data-python) by [nickhould](https://github.com/nickhould). It's an exciting project with a lot to offer.\n\nTidy Data in Python Jupyter Notebook\n",
      "summary": "Just starred tidy-data-python by nickhould. It's an exciting project with a lot to offer.",
      "date_published": "2016-12-09T06:17:35Z",
      "date_modified": "2016-12-09T06:17:35Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mikeckennedy-write-pythonic-code-demos/",
      "url": "https://go.waylonwalker.com/mikeckennedy-write-pythonic-code-demos/",
      "title": "⭐ mikeckennedy write-pythonic-code-demos",
      "content_html": "\u003cp\u003eThe work on \u003ca href=\"https://github.com/mikeckennedy/write-pythonic-code-demos\" 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\"\u003ewrite-pythonic-code-demos\u003c/a\u003e by \u003ca href=\"https://github.com/mikeckennedy\" 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\"\u003emikeckennedy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWrite Pythonic Code Like a Seasoned Developer video course demo materials.\u003c/p\u003e\n",
      "content_text": "\nThe work on [write-pythonic-code-demos](https://github.com/mikeckennedy/write-pythonic-code-demos) by [mikeckennedy](https://github.com/mikeckennedy).\n\nWrite Pythonic Code Like a Seasoned Developer video course demo materials.\n",
      "summary": "The work on write-pythonic-code-demos by mikeckennedy.",
      "date_published": "2016-11-22T20:44:53Z",
      "date_modified": "2016-11-22T20:44:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/mikeckennedy-write-pythonic-code-for-better-data-science-webcast/",
      "url": "https://go.waylonwalker.com/mikeckennedy-write-pythonic-code-for-better-data-science-webcast/",
      "title": "⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast",
      "content_html": "\u003cp\u003e\u003ca href=\"https://github.com/mikeckennedy\" 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\"\u003emikeckennedy\u003c/a\u003e has done a fantastic job with \u003ca href=\"https://github.com/mikeckennedy/write-pythonic-code-for-better-data-science-webcast\" 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\"\u003ewrite-pythonic-code-for-better-data-science-webcast\u003c/a\u003e. Highly recommend taking a look.\u003c/p\u003e\n\u003cp\u003eNo description available.\u003c/p\u003e\n",
      "content_text": "\n[mikeckennedy](https://github.com/mikeckennedy) has done a fantastic job with [write-pythonic-code-for-better-data-science-webcast](https://github.com/mikeckennedy/write-pythonic-code-for-better-data-science-webcast). Highly recommend taking a look.\n\nNo description available.\n",
      "summary": "mikeckennedy has done a fantastic job with write-pythonic-code-for-better-data-science-webcast. Highly recommend taking a look.",
      "date_published": "2016-11-22T19:15:51Z",
      "date_modified": "2016-11-22T19:15:51Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rajshah4-dlgroup/",
      "url": "https://go.waylonwalker.com/rajshah4-dlgroup/",
      "title": "⭐ rajshah4 dlgroup",
      "content_html": "\u003cp\u003eI came across \u003ca href=\"https://github.com/rajshah4/dlgroup\" 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\"\u003edlgroup\u003c/a\u003e from \u003ca href=\"https://github.com/rajshah4\" 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\"\u003erajshah4\u003c/a\u003e, and it’s packed with great features and ideas.\u003c/p\u003e\n\u003cp\u003eDeep Learning Group\u003c/p\u003e\n",
      "content_text": "\nI came across [dlgroup](https://github.com/rajshah4/dlgroup) from [rajshah4](https://github.com/rajshah4), and it's packed with great features and ideas.\n\nDeep Learning Group\n",
      "summary": "I came across dlgroup from rajshah4, and it's packed with great features and ideas.",
      "date_published": "2016-11-18T14:01:09Z",
      "date_modified": "2016-11-18T14:01:09Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/pandas-dev-pandas/",
      "url": "https://go.waylonwalker.com/pandas-dev-pandas/",
      "title": "⭐ pandas-dev pandas",
      "content_html": "\u003cp\u003eI recently discovered \u003ca href=\"https://github.com/pandas-dev/pandas\" 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\"\u003epandas\u003c/a\u003e by \u003ca href=\"https://github.com/pandas-dev\" 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\"\u003epandas-dev\u003c/a\u003e, and it’s truly impressive.\u003c/p\u003e\n\u003cp\u003eFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more\u003c/p\u003e\n",
      "content_text": "\nI recently discovered [pandas](https://github.com/pandas-dev/pandas) by [pandas-dev](https://github.com/pandas-dev), and it's truly impressive.\n\nFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more\n",
      "summary": "I recently discovered pandas by pandas-dev, and it's truly impressive.",
      "date_published": "2016-10-05T22:50:41Z",
      "date_modified": "2016-10-05T22:50:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "github-stars"
      ]
    }
  ]
}